前回までにルンバ,ラズベリーパイ,モバイルバッテリ,そしてレーザー距離センサといったRoomblockの部品を紹介しました.これらをルンバの上に載せるための,3Dプリンタで出力できる構造材を紹介します.
棚のような構造で,1番下の段にモバイルバッテリ,2番目の段にラズベリーパイ,1番上の段にRPLIDAR A2を載せます.動作中にモバイルバッテリが落ちてしまうことがあるので,1番下の段にはバッテリー固定用のベルトがつけられるようになっています.
部品をブロックのように交換したり追加したりして,機能を拡張することを狙っているので,”Roomblock”と名付けました.安直ですね.ラズベリーパイ用のボードカメラを固定するための部品も追加しました.
ルンバとフレーム部分はベルクロテープで固定されているので,取り外しも簡単です.
この構造材は,比較的安価な3Dプリンタでも出力できるサイズで設計されています.確認には UP! plus2を使いましたが,ワークエリアが15cm x 15cm程度の3Dプリンタであれば,大抵の機種で出力できると思います.3Dデータ(STLファイル)は,Thingiverseからダウンロードすることができます.
Roomblockの詳細な作り方については,Instructablesで公開しています.ただし当社は,これらの内容によって生じるいかなる損害についても責任を負いません.興味がわいた方はあくまで自己責任で,チャレンジしてくださいね.
前回はルンバと通信するための計算機として用いているラズベリーパイについて紹介しました.今回は,自律移動のためのキーパーツである,レーザ距離センサについて紹介します.レーザースキャナ,LIDAR(Laser Imaging Detection And Ranging)とも呼ばれます.
弱いレーザービームを発光し,物体への反射光を計測して,その時間差により物体までの距離を測ります.計測部分を回転させながら計測(スキャン)すれば,平面内の物体までの距離が計測できます.レーザービームを複数並べたり,細かく向きを変える機構を使うことで,平面内だけでなく3次元的な計測点が得られる3次元レーザ距離センサもあります.
一般的にレーザー距離センサは,2次元のものでも数十万円していたので,そう手軽に使えるものではありませんでした.しかしRoomblockで使っている SlamTech社のRPLIDAR A2 は,なんと5万円程度と破格なのです.
RPLIDAR用のROSドライバが公開されています.
$ sudo apt install ros-kinetic-rplidar-ros
として,
$ roslaunch rplidar_ros view_rplidar.launch
とするだけで,rvizで計測した点が表示されるお手軽さです.
計測可能距離は16m, 更新周期は10Hzと,高価なレーザスキャナと比べて性能では劣るものの,通常の屋内であれば地図生成や自己位置推定に問題はありません.スキャンは1度刻みで360度なので死角がありませんが,センサ上部がむき出しのままぐるぐると回転するので,動作中に触ってしまわないように注意が必要です.インターフェースはUSB2.0で,バスパワー駆動なのもうれしいところです.
laser_scan_matcherパッケージで少し遊んでみましょう.
$ roslaunch rplidar_ros view_rplidar.launch
としてセンサを起動した後,
$ rosrun laser_scan_matcher laser_scan_matcher_node _base_frame:=laser
として,センサの水平を保ちながら,ゆっくりと動かしてみます.
初期状態ではworld座標系と一致していたlaser座標系が,センサの動きに応じて位置と姿勢がレーザのスキャンマッチングにより更新されていきます.センサを元の位置,姿勢に戻すと,だいたいworld座標系に一致しています.ただ,レーザのスキャンマッチングでは,フレーム間の移動量を推定してこれを積算するので,長く移動させるとエラーも積算されていきます.これを避けるためには,より高度な自己位置推定のアルゴリズムが必要になります.
次回はこれらの部品をルンバにのせるフレームを3Dプリンタで出力します.
Roomblockの詳細な作り方については,Instructablesで公開しています.ただし当社は,これらの内容によって生じるいかなる損害についても責任を負いません.興味がわいた方はあくまで自己責任で,チャレンジしてくださいね.
前回はルンバと通信するためのROIコネクタについて紹介しました.今回はルンバと通信するための計算機として用いている,ラズベリーパイ(Raspberry Pi)について書きます.
ラズベリーパイについては改めて言うまでもないかもしれませんが,低価格なARM搭載のボードコンピュータです.Roomblockで用いているのはラズベリーパイ2です.通常のPCと同じように,Ubuntuをインストールしたあと,ROSをインストールすることができます.
Raspberry Pi 2
ルンバのROIコネクタとラズベリーパイは,USB-シリアル変換器を使って接続します.変換器を内蔵したケーブル(秋月電子で購入できます)を使うと,ミニDINコネクタとはんだ付けするだけで写真のようなケーブルが出来上がります.Roomblockで唯一のはんだ付けが必要な部品ですが,3,4箇所をはんだ付けするだけなのでそれほど難しくないと思います.
ラズベリーパイの電源はどうしましょうか?ルンバのROIポートにも電源が出ているのですが,これはルンバのバッテリの電圧がそのまま出ているので,使う場合には電圧の変換が必要になってしまいます.Roomblockでは市販のUSBモバイルバッテリーを別電源として使用することにしました.10000mAのものが3000円程度で購入できる,良い時代になりました…これでラズベリーパイを数時間は動作させることができます.
今回はここまでです.次はレーザースキャナについて紹介します.
Roomblockの詳細な作り方については,Instructablesで公開しています.ただし当社は,これらの内容によって生じるいかなる損害についても責任を負いません.興味がわいた方はあくまで自己責任で,チャレンジしてくださいね.
前回紹介したRoomblockに使えるルンバは,500, 600, 700, 800 シリーズと呼ばれるものです.これらの機種は,外部と通信するためのシリアルポートを備えています.ただし,現在の最上位機種のルンバ900シリーズは,画像による地図生成までできるすごいものですが,シリアルポートを備えていないのでRoomblockのベースとしては使用できないので注意してください.
ところでそのシリアルポートはルンバのどこにあるのでしょう?シリーズにより位置が異なります.500シリーズ,600シリーズは,上面のカバーを外さなければなりません.このカバーは4か所のツメで固定されていて,最初は少し硬いので外すのに力が必要です.ケガや破損に十分注意してください.
700シリーズ,800シリーズは,ルンバ上面の取っ手の下にROIコネクタがあります.カバーを外す必要はなく,取っ手を持ち上げるだけでアクセスできます.
Roomblockの詳細な作り方については,Instructablesで公開しています.ただし当社は,これらの内容によって生じるいかなる損害についても責任を負いません.興味がわいた方はあくまで自己責任で,チャレンジしてくださいね.
名城大学構内で実験させていただいたデータから,ROSの地図生成パッケージで地図を生成してみました.データはROSのbagファイルとして取得したので,同じデータに対して異なる地図生成パッケージを適用することが可能です.
ROSの地図生成のパッケージとして,
の4つのパッケージを用います.
これまで家屋や廊下など,比較的狭い環境で地図を作ってきました.それらの環境ではどの地図生成パッケージも,(誤差はともかくとして),自律移動に使えないような大きく矛盾する地図を作成することはありませんでした.狭い部屋では,基本的にレーザセンサのデータをずっとつなぎ合わせ続けることで,部屋の地図を作ることが可能です.
しかし,今回のデータは非常に大きな建物の長方形の廊下を一周したものです.廊下を一周回って元の場所に戻ってきた時,それが元の場所であることを認識せず,そのままレーザセンサのデータをつなぎ合わせていくと,最初に作った地図と矛盾したものを上書きし続けてしまいます.これを避けるためには,現在居る場所が以前来たことのある場所であると認識した上で,地図全体を辻褄があうように生成しなければなりません.これは”loop closure”と呼ばれ,地図生成では非常に難しい問題です.
以下の動画は,4つのパッケージで地図を生成した結果をまとめたものです.地図のグリッドサイズは5cmとし,各パッケージのパラメータのほとんどはパッケージの規定値のままで,一部のパラメータのみ少し調整しました.
gmappingは非常に健闘しました.途中の廊下は真っ直ぐになっておらず,地図の形は後半にかけて不正確になっています.これはルンバのあまり正確でないオドメトリを少し信頼しすぎているようです.しかし,一周回ってきた最後に注目してください.以前来たことのある場所だと認識し,辻褄があうように地図全体を変形させました.矛盾のない,ほぼ正しい地図が出来上がりました.
slam_kartoは,今回はloop closureの検出に失敗してしまいました.一周回ってきた後,最初に作った地図を破壊しながら,新しい地図を上書きしていきます.矛盾した地図となってしまいました.
hector_mappingには,じつはloop closureの機能がありません.また,車輪の回転速度(オドメトリ)を使っていません.そのため,この環境ではうまく地図を作ることはできませんでした.
Google cartographerは最後発で,しかもこのような大規模環境の地図を作るために開発されたアルゴリズムです.やはりループを正しく閉じることに成功しました.
最終的に生成された地図(左から,gmapping, slam_karto, hector_slam, cartographer)
以上の結果は,どのパッケージやアルゴリズムが優れているか,どのパッケージを選ぶべきかということを示すものではないことに注意してください.今回,パラメータはほとんどチューニングしなかったので,それぞれのパッケージの最高の性能が出ているわけではありません.また,それぞれのアルゴリズムには得意不得意があるので,課題に対してどれが良いかは,実際に試してみないと分からないことが多いはずです.
現在のところROSはこのような様々な地図生成パッケージを比較検討できる唯一のプラットフォームです.オープンソースの利点を活かし,ぜひご自分の手で確かめてみることをお勧めします.
TORKでは,自律移動編を含むROS初級,中級のワークショップ,企業や大学でのプライベートワークショップのご依頼も承っております.お気軽にお問合せください!
info[at]opensource-robotics.tokyo.jp
弊社のROS中級ワークショップ・自律移動編では,ルンバをベースとした自律移動ロボット”Roomblock”を教材として使用しています.不定期なエントリとして,このRoomblockの内容を紹介していきます.
まず,Roomblockは車輪移動台車として,iRobot社のお掃除ロボット,ルンバ(Roomba)を使用しています.驚かれる方もいるかもしれませんが,ルンバは実は通信用のシリアルポートを持っていて,パソコン等から操作したりセンサ情報を取得することが可能なのです.ルンバのこの機能は,発売当初から一部のエンジニアやホビイストの間で話題になり,ルンバを操作して楽しむ”Roomba Hacking”がブームとなったほどです.ROSが登場するよりもずっと前の話です.
もう壊れてしまいましたが,2007年に私が初めて購入したRoombaです
iRobot社からは,”iRobot Create”という,掃除機能を省いた教育向けのルンバが発売されていたこともありました.ROSでも初期のTurtlebotプラットフォームは,このCreateをベースにしていました.現在はiRobot Createの販売は終了しており,TurtlebotもKobukiを用いたTurtlebot2, そしてRobotis社による独自プラットフォームTurtlebot3へと進化しています.
そんな中,なぜ今お掃除ロボット,ルンバを教材のベースとしたのでしょうか?3つ理由があります.
1つめは,ロボットの全体の価格をできるだけ抑えるためです.発売当初は割高に感じたルンバも,普及が進み今では3万円台から手に入るようになっています.屋内での自律移動に適したサイズ,車輪,センサなどを備えたロボットとしては破格です.
2つめは,ROSのパッケージがすでに存在していることです.それらを利用して,自律移動技術の本来的な目的である,地図生成や経路計画のソフトウェアの学習をすぐに始めることができます.
3つめは,ルンバが掃除をしてくれるからです…当たり前ですね.しかし,余暇にロボティクスを勉強したいエンジニアが,家族に「自律移動ができる10万円のロボットを買いたい」と言って納得してもらえるでしょうか?「ルンバなら掃除もしてくれるよ!」というとみんな喜んでくれます.
最近では「ルンバ対応」のリビングチェアなるものまであります
おっと,つい話が長くなってしまいました.私ルンバが大好きなもので….今回はここまでです.
Roomblockの詳細な作り方については,Instructablesで公開しています.ただし当社は,これらの内容によって生じるいかなる損害についても責任を負いません.興味がわいた方はあくまで自己責任で,チャレンジしてくださいね.
ROS初級と中級・自律移動編を受講頂いた名城大学メカトロニクス工学科様のご好意で,自律移動ロボット”Roomblock”のデモンストレーションをさせていただきました.
ものの数分で部屋の地図を作った後,障害物を避けながら自律的に移動するロボットに,学生さんたちも興味津々でした.
TORKでは,自律移動編を含むROS初級,中級のワークショップ,企業や大学でのプライベートワークショップのご依頼も承っております.お気軽にお問合せください!
info[at]opensource-robotics.tokyo.jp
We had the intermidiate ROS workshop on navigation at Meijo University, Nagoya, Aichi. They learned the navigation features of ROS using simulation and a real robot named “Roomblock”, Roomba based robot. Mapping, localization, control are
Thanks everyone, and well done!!
前回の初級編に続き,名古屋市の名城大学メカトロニクス工学科で,プライベートROSワークショップ中級・自律移動編を開催しました.この自律移動編は今年度から新しく始まったもので,初めての開催となります.
中級・自律移動編では,まずシミュレータを用いた自律移動技術のハンズオンを行います.つぎに,iRobot社の掃除ロボット,ルンバをベースにした自律移動ロボット”Roomblock”を用いて実際に地図生成と自律移動を行います.”Roomblock”はラズベリーパイとLIDAR(レーザ距離スキャナ)を備えた立派な自律移動ロボットで,部屋の地図を作り,目的地を設定してそこに移動することができます.最後に,ROSの自律移動機能の解説(全体の構成,関連するtopic, move_baseの仕組みなど)を受け,ハンズオンで出てくる疑問点を解消していきます.
車輪移動ロボットの操作方法,地図の生成,自律移動を実際にやってみることで,自律移動技術の理解がより深まるものと思います.参加者の皆様方,お疲れ様でした.今後の研究開発の一助となれば幸いです.
このように,TORKでは企業や大学でのプライベートワークショップのご依頼も承っております.また,本年からは中部地区での開催を増やしていこうと考えています.お気軽にお問合せください!
info[at]opensource-robotics.tokyo.jp