2017-10

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ルンバプログラミング 音楽再生

概要:
ルンバライブラリにバグがあったので、
修正ついでに音楽再生機能を追加しました。


使用機器:
・ルンバ
・シリアル変換ケーブル
・制御用PC
・Wiiコントローラー(制御用)


修正箇所:
・センサのデータが正常にとれていなかったバグを修正
・driveDirect関数を使っても動作しなかったバグを修正
・音楽再生機能を追加


サンプル:
修正したサンプルプログラムは以下のものになっています。

#include
#include
#include "wiimote.h"
#include "RoombaController.h"

int main() {
// wiimoteの接続
wiimote wm = wiimote();
while(!wm.Connect(wiimote::FIRST_AVAILABLE)) ;
wm.SetReportType(wiimote::IN_BUTTONS_ACCEL_IR_EXT); // no IR dots
std::cerr << "wiimote conected!!" << std::endl;

roomba::Controller controller;
controller.initialize( "COM4" );

// 音楽登録
std::vector< roomba::Sound > music;
music.push_back( roomba::Sound( roomba::Tone(roomba::Note::F,4), 8 ) );
music.push_back( roomba::Sound( roomba::Tone(roomba::Note::F,4), 8 ) );
music.push_back( roomba::Sound( roomba::Tone(roomba::Note::F,4), 8 ) );
music.push_back( roomba::Sound( roomba::Tone(roomba::Note::F,4), 8 ) );
music.push_back( roomba::Sound( roomba::Tone(roomba::Note::REST,0), 8 ) );
music.push_back( roomba::Sound( roomba::Tone(roomba::Note::DS,4), 8 ) );
music.push_back( roomba::Sound( roomba::Tone(roomba::Note::REST,0), 8 ) );
music.push_back( roomba::Sound( roomba::Tone(roomba::Note::G,4), 8 ) );
music.push_back( roomba::Sound( roomba::Tone(roomba::Note::REST,0), 8 ) );
music.push_back( roomba::Sound( roomba::Tone(roomba::Note::F,4), 32 ) );

// 音楽0に登録(使用できるのは、0-4番まで)
controller.song( 0, music );

while( !wm.Button.Home() ) {
// wiiが更新されるまで停止
while( wm.RefreshState() == NO_CHANGE ) Sleep(1);

// Bボタンが押されたら、掃除用のモーターON
if( wm.Button.B() ) controller.motors( true, true, true );
else controller.motors(false,false,false);

// Aボタンが押されたら、音楽再生
if( wm.Button.A() ) controller.play( 0 );

// 十字キーを使った操作
if( controller.renewSensorData() ) {
if( wm.Button.Up() ) {
controller.driveDirect( 100, 100 );
}
else if( wm.Button.Down() ) {
controller.driveDirect( -100, -100 );
}
else if( wm.Button.Right() ) {
controller.driveDirect( 100, -100 );
}
else if( wm.Button.Left() ) {
controller.driveDirect( -100, 100 );
}
else {
controller.driveDirect( 0, 0 );
}
}
}
wm.Disconnect();
return 0;
}


動作結果:
これを用いて動かした動画は以下のようになります。


最後に修正したライブラリをおいておきます。
ルンバ制御クラス(修正版)

これでだいたいの機能を実装が終わったかなと。
個人的には、オドメトリの修正周りをやってみたいと思っています。

● COMMENT FORM ●


管理者にだけ表示を許可する

トラックバック

http://chicklab.blog84.fc2.com/tb.php/38-08df7872
この記事にトラックバックする(FC2ブログユーザー)

NEW ENTRY «  | BLOG TOP |  » OLD ENTRY

カレンダー

09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

FC2カウンター

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

未分類 (7)
日記 (7)
wiiremote (1)
google (1)
回路 (3)
psp (1)
programing (15)
linux (0)
OpenWRT (3)
kinect (1)
Raspberry Pi (8)

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

google adsense

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。