自作roomba実験ロボットをturtlebotコンパチにする
ROSさんお手やわらかに:ROS青雲編
以前製作して諸般の事情でお蔵入りとなったroomba500を使った実験用ロボットを、turtlebotのスタックで動くようにする。つまりturtlebotのコンパチ機を作るわけだ。ROS_by_exampleを読んでいると、やっぱり手元にturtlebotが欲しくなる。自作ロボットでサンプルを試すには、かなりスクリプトに手を入れなければならない。買おうかと思ったが円安の影響もあるのか、現在販売されているkobukiをベースに使ったturtlebot2はかなり高い。turtlebot1は昔のroomba createをベースにしているので、マニュアルを見るかかぎり、通信体系が似ているroomba500でも動きそうだ。
基本的にこの記事にしたがって作業した。ただ、createの設定のままではうまく動かなかったので下記に設定内容を記録しておくことにした。roombaに搭載したX61とターミナルになるT61は相互に名前でsshできるようになっている。システム構成はこの投稿の図(ただしROSはhydro)を参照のこと。
■X61(roomba搭載機)の設定
.bashrcに下記を追加
export ROS_MASTER_URI=http://X61:11311
export ROS_HOSTNAME=X61
#
# setting up turtlebot
#
export TURTLEBOT_BASE=roomba
export TURTLEBOT_STACKS=circles
export TURTLEBOT_3D_SENSOR=kinect
export TURTLEBOT_SERIAL_PORT=/dev/ttyUSB0
ROS_MASTERをX61に設定している。重要なのはTURTLEBOT_BASEをroombaにしておくこと。例によって使いにくいROSのwikiでは見つからなかったが、launchスクリプトを調べたところ、roombaという値もとれることに気づいた。createだとroombaは動かない。
またダッシュボードで見るとジャイロに赤いアイコンがついているが、デゼーブルになっているという意味なので、問題はないようだ。もともとroombaにはジャイロがないのでこれはしょうがない。
■T61(ターミナル)の設定
.bashrcに下記を追加
ROS_MASTER_URI=http://X61:11311
ROS_HOSTNAME=T61
X61をマスターにするように設定する。これだけでOK
■ロボットの起動
X61とroombaの電源を入れる。
T61からsshでX61にログインし、下記を実行
$ roslaunch turtlebot_bringup minimal.launch
これだけだ。あとはチュートリアルにしたがって試してみればいい。キーボードでテレオペするのがわかりやすい。
■問題点
ダッシュボードでroombaのバッテリーレベル(右側)が表示されない。これは我慢するしかないみたいだ。
X61でローンチしたプロセスをコントロールCで停止しても、roombaが外部コントロールの状態(Fullモード)のままになっていて、roombaのパワーボタンを押しても電源が切れない。roomba500_lightノードでは終了すると通常モードに戻って電源が切れる。この状態では充電もできないので、roombaのSPOTボタンとDOCKボタンを10秒以上押してリセットするしかない。これは何とかしないと、大変に使い勝手が悪い。
ともあれ、これでturtlebot用のサンプルコードが動く(動きそう?)な環境が出来上がった。
« ようやく.bashrcの使い方に気がつく | トップページ | roombaの電源を切るプログラムをpythonで作る »
「ROSさんお手やわらかに」カテゴリの記事
- 3Dプリンターで作る簡単turtlebot(おしまい)(2017.01.07)
- 3Dプリンターで作る簡単turtlebot(raspberry pi3の取り付け)(2017.01.03)
- 3Dプリンターで作る簡単turtlebot(kinectの取り付け)(2017.01.02)
- 3Dプリンターで作る簡単turtlebot(パーツの組み立て2)(2016.12.29)
- 3Dプリンターで作る簡単turtlebot(パーツの組み立て1)(2016.12.25)
コメント
« ようやく.bashrcの使い方に気がつく | トップページ | roombaの電源を切るプログラムをpythonで作る »
初めまして。
いつもこのブログをROSの勉強の参考にさせていただいています。
現在私もROSとroomba630を使用して自己位置推定しながら自律移動させようとしているのですが少々つまづいています。。。
突然のことで大変申し訳ないのですが質問させていただくことは可能でしょうか?
投稿: Daiki | 2015年1月 8日 (木) 15時19分
コメントありがとうございます。ブログオーナーのササガワです。
わかる範囲内なら(僕も初心者です)お答えしますよ。ご遠慮なく。
投稿: ササガワ | 2015年1月 9日 (金) 00時01分
ササガワさん。
返信ありがとうございます。
私のやりたいことにかなり近いことをササガワさんが実現しておられたのでご教示いただきたくコメントさせていだたきました。
、
私はササガワさんが2014年12月 7日 に投稿しておられるマップを使ったroombaの自律移動を、2台のPCを通信させて行うのではなく、roombaに搭載したPCのみでマップの作成とそのマップを使ったroombaの自律移動を行うことを目指しています。
ここからが質問なのですが、
ササガワさんはroombaをturtlebotとして認識させて使用しておられますが、roombaをturtlebotとして認識させずに直接navigation stackを使用して動かすことは可能なのでしょうか?
とりあえず、navigation stackを使ってroombaを指定したゴールまで動かしてみたいのですが、navigation stackの使い方が分からず困っています。
navigation stackの使用方法でササオカさんが参考にされていた資料やサイトなどどんな情報でもいいので教えていただければ助かります。
初心者のわかりづらい質問で大変申し訳ありませんがお力添えいただければ幸いです。
以下、私の使用している環境です。
[環境]
OS:Ubuntu 12.04 64bit
ROS:fuerte
Laser Scanner:URG-04LX-UG01
Base:iRobot Roomba 620
投稿: Daiki | 2015年1月 9日 (金) 06時35分
実は昨年の夏頃、navigationstackを使ってみようと大分苦労したのですが、具体例の情報が見つからず、途中で投げ出してしまいました。7月ごろの投稿をご覧いただければ2回ほど関連の記事があります。
turtlebotならサンプルのコードもたくさんありますし、ROS by Exsampleでも使っているので、まずはこれで試してみようというわけで、コンパチ機を製作した次第です。
ROSの場合、パッケージの使い方を知るには、そのlaunchファイルを解析するのが近道です。turtlebotのlaunchを見るとnavigationスタックの解析には役立つと思います。僕はまだ、その辺まで進んでいません。
お勧めするのは、roombaをお持ちですから、まずtutlebotを試してみて、launchファイルを解析し、応用するという手法です。ちょっとうろ覚えですが、turtlebotでもレーザースキャナを使用するオプションがあったように思います。(調べられたら、こちらに投稿します。)
以上ご参考までに
投稿: ササガワ | 2015年1月10日 (土) 11時06分
ササガワさん
Daikiです。
お返事ありがとうございます!
navigationstack関係の記事を拝見させていただきました。自分で探したものが英語の資料で読み解き辛かった部分を日本語で載せて頂いていたので大変参考になりました。
私もササガワさんのように一度roombaをturtlebotとして動かしてみようと思います!
あと、turtlebotにレーザースキャナを使用するオプションがあることは初めて知ったので自分でも探してみます!
ありがとうございます!
投稿: Daiki | 2015年1月13日 (火) 13時14分