著者アーカイブ Ryosuke Tajima

著者:Ryosuke Tajima

Let’s Bloom! – ROSパッケージをリリースしよう

パッケージビルド,してますか?

ROSはオープンソースのプロジェクトですが,実はソースコードから使っている人はほとんどおらず,皆さんapt install してバイナパッケージをインストールしているのではと思います.先日のROSについてのアンケートでも,パッケージをコードからビルドしているという人の割合は12%ぐらいでした.

このバイナリパッケージ,誰でも自分で作れて配布できることを知っていましたか?

パッケージはどこから来るの?

パッケージの作成と配布のしくみについては,以下のROS Wikiに説明があります.

この公開用ビルドファーム(Jenkinsサーバ)でビルドされます.

build.ros.orgの画面

眺めていると,たくさんのパッケージが次々とビルドされていきます.ほとんどのパッケージはビルド時にテストも実行されるようになっていて,パッケージが(ある程度)正しく動くことを確認しています.新しくパッケージをリリースしたり,バージョンアップした時にはもちろん,依存しているパッケージが更新された時にもビルドしなおされます.ROSパッケージは他のパッケージに依存していることが多いので,他のパッケージが変更された時にもビルドが失敗することがあります.ビルドに失敗した場合にはパッケージメンテナにメールで通知され,解決にあたります.ROSのシステムは非常に大きいので,整合性を取るにはこのような仕組みが不可欠なのです.

ビルドされたパッケージはしばらくShadowレポジトリに置かれ,動作確認などに使われます.

1か月に1回ぐらい,Syncと呼ばれる操作でShadowレポジトリから公開用レポジトリにコピーされ,一般ユーザがaptで取得できるようになります.ROS DiscourseにSyncのお報せが定期的に投稿されるので,見たことがあるかも知れませんね.

リリースされたROSパッケージの状態は,このページを見るのが便利です.パッケージ名や状態で検索することが可能です.

bloom – リリースのためのツール

この仕組みに自分のパッケージを乗せ,バイナリパッケージをみんなに使ってもらうにはどうすれば良いのでしょうか? bloomというツールを使って,実は意外と簡単にできます.bloomの使い方は,ROS Wikiをご覧ください,

今回,bloomのROS Wikiのうち,必要最小限と思われるところを日本語訳してみました.よく読んで,ぜひパッケージのリリースやメンテナンスに挑戦してみてください.現在はとても少ないですが,日本からのROSパッケージの公開やROSメンテナーが増えて欲しいと願っています.

よく分からないことがある場合には,検索したり,ROS Answersで質問しましょう.一つ注意として,ROS Discourse本体は議論のための場なので,質問を投稿してはいけません.ただし,ROS DiscourseのJapan User Groupは例外的に何を投稿してもよいことになっており,そこで質問しても大丈夫です.日本語でOKです.

また,TORKではROSパッケージのリリースやメンテナンスの代行もお請けしています. ご興味のある方は,info [at] opensource-robotics.tokyo.jpまでご相談ください.

著者:Ryosuke Tajima

対決!低価格LIDAR(4) 屋内実験編

データ比較(屋内)

自宅のリビングルームにて計測を行った結果の動画を以下に示します.ロボットでの使用を考えて,センシングの高さは15㎝としました.センサのまわりを一周歩きまわっています.

RPLIDAR A2 (10Hz)

部屋の形がきれいに写っていて,周りを歩く足もちゃんと半円状に見えています.

Sweep (10Hz)

部屋の形はなんとなく分かります.足も写っていますが,形状までは分からないです.

Sweep (3Hz)

RPLIDAR A2とほぼ同じ解像度の点群になり,部屋の形が分かります.足の形状はぼんやりしていて,更新が遅いので分かりにくいです.

屋内まとめ

屋内で使うのであれば,角度分解能と距離の計測精度の点で,RPLIDAR A2が良さそうですね.これまでの使用でも,通常のリビングやオフィスのような屋内のSLAMで,RPLIDAR A2は全く問題なく機能しました.

次回は,屋外での計測結果を見てみます.

著者:Ryosuke Tajima

対決!低価格LIDAR(3) ROS対応

ROS対応

RPLIDAR A2とSweepは,それぞれSDKが公開されているので自作のソフトウェアからデータを使うことが可能です.しかしやはりロボットに使うのであれば,ROSを使わない手はないでしょう.ここではROSの対応状況を見てみます.

RPLIDAR, Sweepともに,ROSドライバのコードがすでに作成されています.

Sweepはまだリリースはされておらず,ソースからのビルドが必要です.

RPLIDARはすでにリリースされているので,aptでインストールすることが可能です.

$ sudo apt install ros-kinetic-rplidar-ros

センサの起動

どちらも付属のlaunchファイルで簡単にデータを取得してrvizで見ることができます.

RPLIDAR A2:

$ roslaunch rplidar_ros view_rplidar.launch

Sweep:

$ roslaunch sweep_ros view_sweep_pc2.launch

メッセージの違い

rolidar_rosは,sensor_msgs/LaserScanメッセージを出力します.

一方sweep_rosは,sensor_msgs/PointCloud2を出力します.これは,前述したように,Sweepの計測が回転と同期していないためだと思われます.ただし,scan_tools/pointcloud_to_laserscanを使うことで,PointCloud2メッセージをLaserScanメッセージに変換することができます.

Rvizで表示

同じ場所でデータを可視化してみました.

RPLIDAR A2(10Hz)

RPLIDAR A2はデフォルトの設定で部屋の形がよく分かります.ロボットの地図生成や自律移動に充分使えることも確認しています.

一方のSweepですが,デフォルトの状態で同じ10Hzで回転させた時のデータがこちらです.

Sweep(10Hz, sample_rate=500Hz)

うーん,やはり同じ速度だとSweepの粗さが目立ちますが,しかし,なんだかさすがに解像度が低すぎないかな?

と思ってチェックしたら,sweep_rosノードのデフォルトのサンプルレートが500Hzで最大仕様(1kHz)の半分になっていることに気づきました.うーんこれはデフォルトで最大性能が出るようにしておいてもらいたいところですが,サンプルレートのパラメータsample_rateを1000に設定して,もう一度データをとってみました.

Sweep (10Hz, sample_rate=1kHz)

だいぶ詳細度が上がりました.しかし,RPLIDAR A2に比べると,部屋の形状がかなり分かりにくいですね.

そのまま,スキャン速度を3Hzに落としてみます.

Sweep (3Hz, sample_rate=1kHz)

このくらいなら部屋の形が分かりますね.回転速度が下がった分,RPLIDAR A2よりも更新周期が3倍程度長くなっています.

次は,動画でデータを比べてみましょう.

著者:Ryosuke Tajima

9/14 ROSCon Japan 開催決定!

ROSの開発者会議 ROSConが,今年は日本でも開催されることになりました!

スペイン・マドリッドで開かれるROSCon2018の前前週の9月14日(金)に,東京・秋葉原での開催となります.ROSの創始者のBrian Gerkey氏も来日して基調講演を行うとのことです.

一般の講演も4月中旬から申し込みが開始されます.この機会にご自身のROSプロジェクトなどを発表してみてはいかがでしょうか.

とても楽しみですね! TORKも一緒になって盛り上げて行きたいと思います.

著者:Ryosuke Tajima

対決!低価格LIDAR(2) 仕様編

製品仕様

今回は,双方の仕様を見ながら比較してみましょう.

大事な注意です!

  • 実際に使う場合には,必ずご自分で仕様を確認してください!
  • この記事に誤りがあったせいであなたのプロジェクトが上手くいかなくても,TORKは責任はとれません!

原理

産業用LIDARはToF(Time of Flight)方式による距離の計測が多く使われています.これは,レーザ光が対象物に反射してセンサに返ってくるまでの時間を計測して,距離を計算する方式です.SweepはToF方式による距離計測を行っています.対して,RPLIDAR A2はToFではなく,三角測量の原理を使っています.これは,発光点,反射点,受光点が三角形を構成するようにしてあって,受光点の変位をセンサで測定することで,反射点までの距離を測る方式(分かりますよね?)です.

一般的には三角測量の方が簡単そうですが,反射点までの距離が大きくなると,たとえ反射光を計測できたとしても距離の分解能は落ちていきます.一方ToFは,反射点までの距離が大きくなっても(反射光を計測出来る限り)分解能が落ちないので,最大計測距離を大きくできます.

もうひとつ大きな違いがあります.RPLIDAR A2は,サンプリングが角度に同期して行われています.つまり,計測が行われるレーザの角度は,回転ごとに(微妙なズレはあるにしても)同じです.一方Sweepは,角度が0の位置にスキャン開始は同期しているものの,各距離計測は角度には同期していません.Sweepの仕様はセンサから得られるデータが角度と距離のセットになっています.Sweepが発光するレーザは単発のパルスではなくパターンをもたせていて,そのためにサンプルレートが一定ではない(デフォルトで500~600Hzと幅がある)ので,このようになっていると思われます.

URGやSICKといったハイエンドの2次元LIDARは,角度に同期した距離が取得できる方式ですので,Sweepの方式はちょっと使いにくい気がします.

角度分解能,計測周期,サンプルレート

LIDARで重要な性能として,角度分解能と計測周期があります.角度分解能は計測点の角度の細かさで,分解能が低いと対象物や環境の計測点が少なすぎて,計測したものの形がよく分からなってしまいます.計測周期は1スキャン(1回転)にかかる時間で,計測周期が大きいと,動くものを計測したり,ロボット自身が動いたりしたときに,正確な計測が難しくなります.

2つのセンサはどちらも,光源と計測部分が一体化した部分を回転させて,周囲の計測を行っています.RPLIDAR A2は5Hzから15Hzまで回転速度が可変なのですが,回転速度によらず計測点の数は同じ(400点)です.

Sweepは,1Hzから10Hzまで回転速度が可変ですが,サンプルレートが最大1000サンプル/秒(正確には1000~1025と幅がある)ので,回転速度が早いほど1回転あたりの計測点の点数は少なくなっていきます.

  • RPLIDAR A2 : 400サンプル/回転
  • Sweep : 1000サンプル/秒

もし両方とも,10Hzで回転している場合には,

  • RPLIDAR a2 : 400サンプル/回転
  • Sweep : 100サンプル/回転

となるので,RPLIDAR A2のほうが角度分解能が4倍高いことになります.Sweepで同じ分解能を得たい場合には,周期を1/4(2.5Hz)で回転させる必要があります.

最大計測距離と距離分解能

最大計測距離も重要な性能です.もちろん遠くまで計測できるに越したことはないですが,たとえば経験上,オフィスのナビゲーションであれば10mもあれば充分ですし,自動運転のような用途であれば100mでも足りないでしょう.

RPLIDAR A2は,ややこしいことに,機種によって計測距離が違います.購入の際には,型番に注意が必要です.今回使ったのは計測距離が最大8mのRPLIDAR A2M8です.

  • RPLIDAR A2M4 最大計測距離 6m
  • RPLIDAR A2M8 最大計測距離 8 m
  • RPLIDAR A2M6 最大計測距離16 m

一方Sweepは,最大計測距離が40mとなっています.

ちなみに,近い側の限界である最小計測距離は,両方とも同じくらいです.

  • RPLIDAR A2M8 最小計測距離 0.15 m
  • Sweep 最小計測距離 0.15 m

距離分解能はどうでしょうか.RPLIDAR A2M8の距離分解能は,

  • 1.5m以下の場合 0.5mm以下
  • それ以上の距離では距離の1%以下

とあり,近い方が分解能が高くなっています.近いと物体の形状がちゃんととれる感じです.かわりに,距離が遠くなると,分解能,精度ともに落ちていくことが予想できます(仕様書には誤差についてはデータがありませんでした).

一方,Sweepの方は,計測距離にかかわらず,

  • Sweep 距離分解能 1cm

となっています.Sweepの仕様書には距離の計測誤差のグラフも掲載されていますが,計測距離が長くなっても,誤差が増えていないことが分かります.ToF方式の特徴と言えます.

Sweepの計測誤差 (Sweepマニュアルより抜粋)

 

外形その他

どちらもかなり小型ですが,上部の部品が回転するので,触ったりしないようにする設置が必要です.

  • RPLIDARa2 : 直径 70mm
  • Sweep: 直径 65 mm

Sweepの方は,ケーブルコネクタが横と下の2つの向きになっていて,配線がしやすい感じです.RPLIDARはケーブルが直出しなのでケーブル長を短くするのがちょとやりにくそうです.

Sweepの裏側のコネクタ

どちらも,USBで接続された場合には,USBバスパワーで動作します.また,マイコンなどのUARTで通信することができますが,その場合には別途電源が必要です.

まとめ

外形が同じように見える2つのセンサですが,実は設計思想が少し違うことが分かります.RPLIDAR A2は近距離,屋内用で,Sweepは遠距離,屋外用の仕様であると言えます.ちょっとSweepの角度分解能が低いのが気になります.

次は,ROSで使う際の比較です.

著者:Ryosuke Tajima

アナログ・デバイセズのIMU用パッケージ”adi_driver”をリリースしました!

新しいROSパッケージ,adi_driverをリリースしました!

これは,ADI(Analog Devices Inc.)のセンサのためのドライバパッケージです.現在は,ADIS16470と,ADXL345(実験的)をサポートしています.

小型で高性能なIMUのブレイクアウトボードです

ADIS16470は3軸のジャイロセンサと3軸の加速度センサを組み込んだIMUの新製品です.特徴は,非常に広い計測レンジを持っている点です.角速度のレンジは±2000 [deg/sec],加速度のレンジは±40 [g] です.これは,車輪移動ロボットやドローン,マニュピレータといった様々なロボットに充分すぎるほどの性能です.
センサ単体の価格は199ドル,ブレークアウトボードの価格は299ドルです.詳しくは,製品のページをご覧ください.

センサのブレイクアウトボードと,USB-SPI変換器(USB-ISS)を用意すれば,このパッケージで簡単に3次元の姿勢情報を利用することができます.詳しいやり方は,githubのドキュメントをご覧ください.もし問題にぶつかった場合は,Issuesで報告をお願いします.

どうぞ,ご利用ください!

著者:Ryosuke Tajima

対決!低価格LIDAR(1) RPLIDAR A2 vs Sweep

ロボットのキーデバイス-LIDAR

自律移動ロボットのキーデバイスといえば,LIDAR(Light Detection and Ranging)です.これは,レーザ光線(通常,赤外線レーザ)を周囲に発光して物体に当たった反射光を検出して,対象物までの距離を測るセンサです.

よく使われるのは,一本のレーザ光を回転させて,平面上のセンサからの距離を測る2次元型の製品です.たとえば,SICK社北陽電機の製品です.

SICK社のLIDAR製品

URGシリーズ (北陽電機)

もともと移動ロボットの研究では,環境を計測して地図を作ったり,自律移動をするためにLIDARが使われてきました.また,2007年のDARPA Urban Challengeでは,Velodyne社が画期的な3次元LIDARソリューションを提供し,自動運転車の一つのブレイクスルーを引き起こしました.

LIDARの破壊的イノベーション?

これらのLIDAR製品はもともと産業用で,たとえば工場の生産装置や安全装置に使われています.そのため,頑丈さや防水などの機能を備え,反面かなり高価なものになります.研究開発の業務ならともかく,個人で簡単に買えるようなものではありません.

しかし最近,低価格なLIDARが一般販売されるようになってきています.これは,産業用には性能や信頼性は足りないけれど,ホビーや研究用には充分かつ簡易な機能を提供しています.個人的見解ですが,もしかしたら「破壊的イノベーション」的な製品で,今後,思ってもみない用途に使われていくのではないかと思っています.

今回は,そのうちの2つ,

RPLIDAR A2 (Slamtec社)

Sweep (Scanse社)

を比較しながら紹介します.

 

著者:Ryosuke Tajima

信州大学 山崎研究室でHiroに会いました!

山崎研究室の皆さん

2月某日,信州大学山崎研究室を訪問させていただきました.TORKの最近の活動や,ROSの最新情報などを紹介して意見交換しました.皆さん熱心に聞きながら,質問もたくさん出ました.

なかなかレアな台車付きHiro

山崎研究室に2台あるHiroも見せていただき,最近追加されたMoveIt!の機能の確認を一緒に行ったり,使用している際に出てきた疑問についても,出来る限りお答えしました.

山崎研究室では,タオルやシャツのように布でできた柔軟物を器用に扱うための研究を行っています.どんどん器用になっていくロボットが楽しみですね.

山崎先生と研究室の学生の皆さん,ありがとうございました!

著者:Ryosuke Tajima

ROSワークショップ中級・自律移動編を2月20日(火)に東京で開催します

来たる2月20日(火)に,ROSワークショップ中級・自律移動編を東京にて開催します.ROSでの自律移動(ナビゲーション)を学びたい方は,これを機会にぜひ受講をご検討ください.

基本的にはROSワークショップ初級編を受講した方を対象としておりますが,それに準ずると思われるROSの経験がある方なら,受講いただけます.お申込みは詳細をご確認の上,ページ内のお申込みフォームよりエントリをお願い致します.なお,参加人数には限りがあり,先着順とさせていただきますのでご了承ください.

シミュレーション環境での自律移動

ワークショップでは,まずシミュレータを動かしながら自律移動の概要を学ぶハンズオンを行います.次に,掃除ロボットRoomba(ルンバ)とラズベリーパイ(Raspberry Pi),低価格なレーザセンサRPLIDARで構成された自律移動ロボット”Roomblock”を用いて,実機の操作,地図の生成,自己位置推定といった自律移動の機能とプログラミング方法を学びます.最後に,ROSの自律移動の構成とその要素について,より詳しく解説していきます.シミュレータと実機を用いた実践的なワークショップとなっています.

自律移動ロボットRoomblock

来年度のロボット開発に向けて,今年度中にROSをマスターするチャンスです.ぜひご検討ください.

著者:Ryosuke Tajima

新型aiboがやってきました!

ソニーのペットロボット”aibo”がTORKにも届きました!

名前は「TORKちゃん(♀)」としてみました.

発表時に,「ROSが搭載されている」ということが明言されていて話題になっていましたが,本当に搭載されているようです.

搭載されているオープンソースソフトウェアの一覧とライセンスは,以下のページで確認することができます.

また,そのうちソースコードの公開が必要なものに関しては,ここからダウンロードできるようになっています.

ちょっと調べた感じでは,ユーザからaiboのシステムにアクセスできそうな手段は見つからないのですが,そのうちSDKなどが公開されるのではないかと期待できます.それまではとりあえず,このかわいいペットロボットを楽しみましょう!

 

著者:Ryosuke Tajima

ROSワークショップ中級・自律移動編を名古屋で開催しました

名古屋伏見でやってます

ROSワークショップ中級・自律移動編を名古屋にて開催しました.中級ともなりますと,ROSをすでにかなり使いこなしている方が参加されていて,非常にスムースにカリキュラムを進めることができました.

自律移動の体験

自律移動編では,シミュレーション上で一通りの機能を試してもらった後,ルンバベースの教材ロボットRoomblockを部屋やオフィスの廊下で動作させて地図を作っていただき,実機での運用を体験していただきます.その後,ROSでの自律移動の構成を説明していきます.カリキュラム以外のROSやロボティクスに関する質問,疑問にも出来る限りお答えします.

自律移動ロボットRoomblock

11月のワークショップ日程を公開中です!

ROSを初めて勉強する人へのブログも公開しています. ご参考になさってください.

プライベートワークショップ,その他OSSに関するご相談も承っております.
お気軽にお問合せください!
info[at]opensource-robotics.tokyo.jp

著者:Ryosuke Tajima

Indigoの開発環境をDockerで構築(1)

Indigo? Kinetic?

ROSはどんどん新しくリリースされていきます.最新バージョンはLunar Loggerhead(Lunar)で,その前が,Kinetic Kame(Kinetic), その前がJade Turtle(Jade)という名前です.伝統的に,亀にちなんだ名前がつけられています.

しかし,実際にはその前のバージョンであるIndigo Igloo(Indigo)を使っている人もまだ多いかと思います.IndigoにはリリースされてるのにKinetic以降にはまだリリースされていないパッケージが数多くあり,移行したくてもできない,という場合が多いようです.同様の理由で,TORKでもワークショップ教材や受託開発には現在もIndigoを用いています.

IndigoはUbuntu14.04ベースですが,KineticとLunarはUbuntu16.04以降がベースで,14.04ではサポートされていません.しかし,Indigoを使うためだけに,いまさらUbuntu14.04をPCにインストールするのもちょっとイマイチです.

VMWareやVirtualBoxなどの仮想マシン(VM)を用いる,という解決策もあります.しかし,ハードウェアを使おうとした時に問題になります.たとえば,USBカメラのパフォーマンスが非常に悪いとか,USB3.0に対応していない,など,デバイスドライバの問題もありがちです.

そこで,最近はやりのDockerを用いると,Ubuntu16.04をインストールしたPC上で,デバイスやGUIも使えるインタラクティブなIndigoの開発環境を簡単に動かすことができます.

Dockerのインストール

まずはDockerのインストールをしておきます.Ubuntuのaptで入るものは用いないで,Dockerのページにある手順に従って最新版をインストールしましょう.Community Edition(CE)というのを使います.

IndigoのDockerイメージの準備

IndigoのDockerコンテナは,まずはOSRFがDockerHubに用意しているものを利用するのが簡単です.

以下のコマンドでIndigoのコンテナを取得します.

$ docker pull osrf/trusty-ros-indigo:desktop

ちなみにこのosrfのコンテナにNextage OpenなどのTORKワークショップに対応したパッケージを追加したものをTORKでも公開しています.必要ツールなどが豊富なので,こちらを使うのもおすすめです.

たとえば取得したDockerコンテナを立ち上げ,コマンド’lsb_release’でバージョンを確認したい場合には,

$ docker run osrf/trusty-ros-indigo:desktop lsb_release -a

No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04
LTSRelease: 14.04
Codename: trusty

のようにします.このとき実行されるコマンドのユーザ権限はデフォルトでrootになります.ユーザ権限やデバイスに対するアクセス権限を変更するには,別途docker runの際のオプションを設定する必要があります.このあたり詳しくは,Docker run referenceを参照してください.

ユーザやホームディレクトリを共有したインタラクティブな起動

ここでやりたいのは,対象のコンテナを立ち上げつつ,自分のユーザ権限でシェルを実行し,ホームディレクトリ内でインタラクティブに作業をすることです.そのために必要ないくつかの設定を行うスクリプトを作成しました.

$ ./docker_shell osrf/trusty-ros-indigo:desktop

とすると,あたかもOSだけがTrusty + ROS Indigoになったかのようなシェルが起動します.

$ . /opt/ros/indigo/setup.bash

とすれば通常のIndigo環境として用いることができます.ただし,ベースシステムでKineticを使っている場合には,ワークスペースをビルドする際にKineticなのかIndigoなのかで混乱してしまいがちなので,注意が必要です.

NVidiaのドライバを使用している場合

PCが特殊なXグラフィクスドライバを用いていない場合には,rvizなどのGUIも使用することができます.しかし例えば,PCがNVidiaのドライバを使用している場合,rvizなどのOpenGLを含むアプリが動作しません.この解決法は次回以降に紹介します.

著者:Ryosuke Tajima

World MoveIt! Day Tokyo ありがとうございました!

 

World MoveIt! Day Tokyo,無事に終了いたしました.当日は30人ほどの方にお越しいただきました.参加していただいた皆様,スポンサーの皆様,開催をサポートしていただいたすべての方々に感謝したいと思います.

Baxter

日本バイナリー様のご協力により,当日の主役はこのロボットでした.オシャレなLEAGUE有楽町のフロアでかなりの存在感を出していました.

JACO2, HEBIアーム

また,同じく日本バイナリー様はJaco2アームとHEBIアームを展示していただきました.HEBIアームをMoveIt!とGazeboで動かそうとチャレンジした上級者もいらっしゃいました.

時差の少ないシンガポールARTCとビデオチャットでつないでご挨拶してみました.

終始なごやかな雰囲気でした

皆さん,軽食を取りながらMoveIt!シミュレータやロボットを試してみていました.インストールや動作のトラブルにはスタッフが出来る限り対応しました.

報告いただいた方にはROSConグッヅをプレゼント!

ほんんどの方が,自分のPCでMoveIt!やシミュレータを動作させることができました.実際にBaxterを動かしたり,moveit_commanderを使ったプログラミングに挑戦したりしている方もおり,それぞれのレベルや関心に応じて有意義な成果が得られました.最後に今日の成果を皆で報告していただきました.

ありがとうございました!

日本でもたくさんの方がMoveIt!に関心を持っていることが分かりました.今後もMoveIt!およびROSをみんなで使って,フィードバックやコミットで改良していきましょう.

著者:Ryosuke Tajima

World MoveIt! Day 2017 Tokyoを開催します!

MoveIt!は主にロボットマニュピレータを対象としたROSの主要パッケージの一つです.MoveIt!の利用者,開発者のための世界的なイベント”World MoveIt! Day 2017″のローカルイベントを,今年は東京でも開催します.

  • 内容: World MoveIt! Day Tokyo
  • 日時: 10月19日(木) 11:00 〜 18:00 (時差で欧米の開催地から1日遅れた開催です)
  • 場所: [LEAGUE有楽町]イベントスペース
  • 参加費: 無料

詳細なプログラムと参加登録は,以下のサイトをご覧ください.なおスケジュール等は予告なく変更される場合があります.

とってもゆるい感じのイベントになると思います.MoveIt!を利用されている方はもちろん,関心はあってもまだ利用していない方,全く聞いたことのない方,どなたでも参加できます.ささやかながら飲み物,食べ物もご用意いたします.

ROSをインストールしたご自分のノートPCを持参していただければ,シミュレータもしくはロボット実機で,MoveIt!を中心としたロボットソフトウェアを体験することができます.弊社スタッフや参加者同士で教えあうことで,使い方を学ぶことができます.

また,MoveIt!自体の機能追加や不具合修正についての情報交換も行われます.みんなでMoveIt!を盛り上げていきましょう!

著者:Ryosuke Tajima

Nextage Openの日本語版チュートリアルを新たに公開しました!

Nextage Open

これまでもNextage OpenのROSパッケージについての包括的なチュートリアルは公開されていましたが,世界中のユーザの利用を前提として英語での提供でした.このたび,日本のユーザからの要望が多かったチュートリアルの日本語版を作成し,公開することができました.

Nextage Open 日本語版チュートリアル

すでにNextage Openをご活用頂いているユーザの皆様には,これまで以上に研究開発のお役に立てることができれば幸いです.また,Nextage Open の導入を検討される方にも,参考になる内容となっていると思います.

もちろん,英語版のチュートリアル(http://wiki.ros.org/rtmros_nextage/Tutorials)もこれまでどおりご利用いただけます(日本語版へのリンクも追加されています).

著者:Ryosuke Tajima

ROSワークショップ中級・自律移動編を10月31日(火)に名古屋で開催します

来る10月31日(火)に,ROSワークショップ中級・自律移動編を名古屋にて開催します.ROSでの自律移動(ナビゲーション)を学びたい方は,これを機会にぜひ受講をご検討ください.

基本的にはROSワークショップ初級編を受講した方を対象としておりますが,それに準ずると思われるROSの経験がある方なら,受講いただけます.お申込みは詳細をご確認の上,ページ内のお申込みフォームよりエントリをお願い致します.

シミュレーション環境での自律移動

ワークショップでは,まずシミュレータを動かしながら自律移動の概要を学ぶハンズオンを行います.次に,掃除ロボットRoomba(ルンバ)とラズベリーパイ(Raspberry Pi),低価格なレーザセンサRPLIDARで構成された自律移動ロボット”Roomblock”を用いて,実機の操作,地図の生成,自己位置推定といった自律移動の機能とプログラミング方法を学びます.最後に,ROSの自律移動の構成とその要素について,より詳しく解説していきます.シミュレータと実機を用いた実践的なワークショップとなっています.

自律移動ロボットRoomblock

上記以外での日程の調整,その他ご相談,開発委託,出張ワークショップ,カスタマイズワークショップも承っております.
お気軽にご相談ください.
info[at]opensource-robotics.tokyo.jp

著者:Ryosuke Tajima

バンクーバーでのROSCon 2017に参加しました!

9月21日,22日にバンクーバーで開催されたROSCon2017に参加しました!

会場のVancouver Convention Centerからの風景

ROSConは年に一回,ユーザ,開発者,企業,大学といった様々な立場でROSに関わる人が集まり,情報交換をするための会議です.

Brian Gerkey氏によるオープニング

TORKは事前に発表を申し込んでいたわけではありませんが,ライトニングトークという3分間の枠で活動内容を報告することができました.

TORKからも新しいパッケージを報告しました

今回のROSConでも,新しいロボット,新しいデバイス,ロボット研究開発の内容など,非常に多様な国と組織からの発表がありました.また,今回はROS2の話題が多く聞かれるようになってきました.

ROSの開発者やユーザにとってはとにかく楽しい会議ですので,今後の参加を検討されてはいかがでしょうか.なお,来年の開催地とスケジュールはまだ決定されていないとのことです.

著者:Ryosuke Tajima

2017年10月の名古屋 ROSワークショップ日程

10月は以下の日程でROSワークショップを行います.

場所: COffice名古屋伏見 (伏見駅,名古屋広小路伏見中駒ビル5F)

ROSの初歩をスピーディに習得したい方,ROSの疑問点を解消したい方,中部地方の方の参加をお待ちしております.

もちろんこれまでどおり東京でもワークショップを開催しておりますので,お選びいただけます.

お申込みは以下より詳細をご確認の上,ページ内のお申込みリンクよりエントリをお願い致します.

また,ROSワークショップ中級編についても名古屋にて開催できるようになりました.ご要望があり次第,日程を調整いたしますのでメイルにてお問い合わせください.ただし,初級編を受講した方を対象としております.

上記以外での日程の調整,その他ご相談,開発委託,出張ワークショップ,カスタマイズワークショップも承っております.お気軽にご相談ください.
info[at]opensource-robotics.tokyo.jp

著者:Ryosuke Tajima

ROS + Snappy Ubuntu Core (4) : Raspberry Pi 3へのUbuntu Coreのインストール

このページの内容に従い,Raspberry Pi 3にUbuntu Coreをインストールしてみます.

以下の作業は,Ubuntu 16.04の環境で行いました.まず,Ubuntu Core imageにある,’Ubuntu Core 16 image for Raspberry Pi 3’のイメージファイルをダウンロードします.320MBありました.

つぎにこれをMicroSDカードにコピーします.手元の環境ではMicroSDカードをカードリーダに挿すと/dev/sdaとして認識されたので,

$ xzcat ubuntu-core-16-pi3.img.xz | sudo dd of=/dev/sda bs=32M
$ sync

としました.

RaspberryPi3を先ほど作成したMicorSDカードで起動します.

Raspberry Pi 3 の起動画面

最初の起動の際には,コンソールからのログインが必要なので,キーボードとディスプレイを接続しておきます.

進むにはubuntu.comのアカウントが必要

いきなり詰まってしまいました.login.ubuntu.comのアカウントのメールアドレスを入力せよ,と言われます.Ubuntu Coreの使用には,ubuntu.comのアカウント登録が必要のようです.インストールにはインターネット接続が前提なので,proxy環境などでは困りそうです.

別のPCからlogin.ubuntu.comにアクセスして,アカウントを作成します.

ubuntu.comのアカウント作成画面

さらに,そのままだとssh keyが無いといわれます.login.ubuntu.comのsshのページでsshの公開鍵を設定しておく必要があるようです.この公開鍵に対応する秘密鍵による認証で,Raspberry Pi 3にsshでログインすることができます.

SSH Keysの設定

自分のマシンがUbuntuの場合,自分のマシン上で

$ ssh-keygen

とコマンドを打ち,パスワード等を設定します.~/.ssh/id_rsa.pubというファイルができるはずなので,その中身をコピーして,SSH Keysのフォームに貼り付けます.

SSH Keysのページでssh keyを設定したマシンからは,Raspberry Piにsshでログインできるようになります.usernameは,ubuntu.comで設定したユーザ名です.Raspberry Pi3のIPアドレスは,DHCPで取得され,コンソール画面に表示されています.

$ ssh username@192.168.0.10

初期状態では,コマンドやアプリはほとんど入っていません.Ubuntuでお馴染みのaptやdpkgと言ったコマンドも使えません.今後,snappyパッケージを入れることで拡張していきますが,まずパッケージ一覧をWebブラウザで見るためのsnapwebパッケージをインストールしてみましょう.

$ sudo snap login username@example_domain.com
$ sudo snap install snapweb
$ snap list
Name        Version       Rev   Developer  Notes
core        16-2          1443  canonical  -
pi2-kernel  4.4.0-1030-3  22    canonical  -
pi3         16.04-0.5     6     canonical  -
snapweb     0.26-10       305   canonical  -

Webブラウザで,”http://192.168.0.10:4200/”にアクセスしてみます.

snapwebの画面

snapwebの画面

今インストールされているパッケージ一覧が見えたりします.ストアもあるようですが,

App storeの画面

App storeの画面

うーん,よくわかりませんが,ほとんどアプリは無いように見えます.

著者:Ryosuke Tajima

名古屋でのROSワークショップ,始めます!

これまで東京都内を中心に開催してきた弊社のROSワークショップですが,
2017年9月から,名古屋でもROSワークショップの開催を始めます!

(受付終了しました) 9月5日(火)13:30~ (名古屋) ROSワークショップ初級編
(受付終了しました) 9月15日(金)13:30~ (名古屋) ROSワークショップ初級編

場所: COffice名古屋伏見 (伏見駅,名古屋広小路伏見中駒ビル5F)

ROSの初歩をスピーディに習得したい方,ROSの疑問点を解消したい方,中部地方の方の参加をお待ちしております.

もちろんこれまでどおり東京でもワークショップを開催しておりますので,お選びいただけます.

お申込みは以下より詳細をご確認の上,ページ内のお申込みリンクよりエントリをお願い致します.

また,ROSワークショップ中級編についても名古屋にて開催できるようになりました.ご要望があり次第,日程を調整いたしますのでメイルにてお問い合わせください.ただし,初級編を受講した方を対象としております.

上記以外での日程の調整,その他ご相談,開発委託,出張ワークショップ,カスタマイズワークショップも承っております.お気軽にご相談ください.
info[at]opensource-robotics.tokyo.jp

著者:Ryosuke Tajima

ROS + Snappy Ubuntu Core (3) : SnappyなROSパッケージの中身

Snappy + ROS, https://www.crowdsupply.com/krtkl/snickerdoodle/updates/1890

作成したSnappyのパッケージはどういう仕組みで動いているのでしょうか?

$ which talker-listener.listener 
/snap/bin/talker-listener.listener
$ ls -l /snap/bin/talker-listener.listener 
lrwxrwxrwx 1 root root 13 Jul 21 16:04 /snap/bin/talker-listener.listener -> /usr/bin/snap

となっています.これは,以下を実行するのと等価になるようです.

$ snap run talker-listener.listener

snapファイルは,単に/snap/に展開されるだけです.currentというのが最新版ですが,これはx1へのシンボリックリンクになっています.容易にロールバックできるようにするためなのでしょう.

$ ls -l /snap/talker-listener/
total 0
lrwxrwxrwx  1 root root   2 Jul 21 16:04 current -> x1
drwxrwxr-x 10 root root 222 Jul 21 16:00 x1
$ ls /snap/talker-listener/current
bin                       command-roscore.wrapper  etc  meta  snap  var
command-listener.wrapper  command-talker.wrapper   lib  opt   usr

command-listener.wrapperというのが目に付きます.中身を見ると,

#!/bin/sh
export PATH="$SNAP/usr/sbin:$SNAP/usr/bin:$SNAP/sbin:$SNAP/bin:$PATH"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$SNAP/lib:$SNAP/usr/lib:$SNAP/lib/x86_64-linux-gnu:$SNAP/usr/lib/x86_64-linux-gnu"
export ROS_MASTER_URI=http://localhost:11311
export ROS_HOME=${SNAP_USER_DATA:-/tmp}/ros
export LC_ALL=C.UTF-8
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SNAP/lib:$SNAP/usr/lib:$SNAP/lib/x86_64-linux-gnu:$SNAP/usr/lib/x86_64-linux-gnu
export PYTHONPATH=$SNAP/usr/lib/python2.7/dist-packages:$PYTHONPATH
export PATH=$PATH:$SNAP/usr/bin


# Shell quote arbitrary string by replacing every occurrence of '
# with '\'', then put ' at the beginning and end of the string.
# Prepare yourself, fun regex ahead.
quote()
{
    for i; do
        printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/"
    done
    echo " "
}

BACKUP_ARGS=$(quote "$@")
set --

if [ -f $SNAP/opt/ros/kinetic/setup.sh ]; then
    _CATKIN_SETUP_DIR=$SNAP/opt/ros/kinetic . $SNAP/opt/ros/kinetic/setup.sh
fi

eval "set -- $BACKUP_ARGS"

export LD_LIBRARY_PATH="$SNAP/opt/ros/kinetic/lib:$SNAP/usr/lib:$SNAP/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH=$SNAP_LIBRARY_PATH:$LD_LIBRARY_PATH
exec "rosrun" roscpp_tutorials listener "$@"

となっており,ROSの環境設定などはこのラッパーファイルで行われた上で,コマンドが実行されるようです.つまり,いつもROSでやっているような”source setup.bash”などは必要ないことになります.楽になりそうですね.

snapパッケージにはほかに何が含まれているのでしょうか.

$ tree -L 3 -d /snap/talker-listener/current/
/snap/talker-listener/current/
├── bin
├── etc
│   ├── ca-certificates
│   │   └── update.d
│   ├── dpkg
│   │   └── dpkg.cfg.d
│   ├── emacs
│   │   └── site-start.d
│   ├── gss
│   │   └── mech.d
│   ├── ldap
│   ├── openmpi
│   ├── perl
│   │   ├── CPAN
│   │   └── Net
│   ├── python2.7
│   ├── python3.5
│   ├── sgml
│   ├── ssl
│   │   ├── certs
│   │   └── private
│   ├── systemd
│   │   └── system
│   └── xml
├── lib
│   └── x86_64-linux-gnu
├── meta
│   └── gui
├── opt
│   └── ros
│       └── kinetic
├── snap
├── usr
│   ├── bin
│   ├── include
│   │   ├── apr-1.0
│   │   ├── arpa
│   │   ├── asm-generic
│   │   ├── boost
│   │   ├── c++
│   │   ├── console_bridge
│   │   ├── drm
│   │   ├── gtest
│   │   ├── hwloc
│   │   ├── infiniband
│   │   ├── libltdl
│   │   ├── linux
│   │   ├── log4cxx
│   │   ├── misc
│   │   ├── mtd
│   │   ├── net
│   │   ├── netash
│   │   ├── netatalk
│   │   ├── netax25
│   │   ├── neteconet
│   │   ├── netinet
│   │   ├── netipx
│   │   ├── netiucv
│   │   ├── netpacket
│   │   ├── netrom
│   │   ├── netrose
│   │   ├── nfs
│   │   ├── numpy -> ../lib/python2.7/dist-packages/numpy/core/include/numpy
│   │   ├── openmpi -> ../lib/openmpi/include
│   │   ├── protocols
│   │   ├── python2.7
│   │   ├── rdma
│   │   ├── rpc
│   │   ├── rpcsvc
│   │   ├── scsi
│   │   ├── sound
│   │   ├── uapi
│   │   ├── uuid
│   │   ├── video
│   │   ├── x86_64-linux-gnu
│   │   └── xen
│   ├── lib
│   │   ├── compat-ld
│   │   ├── dpkg
│   │   ├── emacsen-common
│   │   ├── gcc
│   │   ├── gold-ld
│   │   ├── lapack
│   │   ├── ldscripts
│   │   ├── libblas
│   │   ├── mime
│   │   ├── openmpi
│   │   ├── pkgconfig
│   │   ├── python2.7
│   │   ├── python3
│   │   ├── python3.5
│   │   ├── sasl2
│   │   ├── sbcl
│   │   ├── ssl
│   │   ├── valgrind
│   │   └── x86_64-linux-gnu
│   ├── sbin
│   ├── share
│   │   ├── aclocal
│   │   ├── applications
│   │   ├── apps
│   │   ├── apr-1.0
│   │   ├── bash-completion
│   │   ├── binfmts
│   │   ├── boostbook
│   │   ├── boost-build
│   │   ├── bug
│   │   ├── ca-certificates
│   │   ├── cmake-3.5
│   │   ├── debhelper
│   │   ├── dh-python
│   │   ├── distro-info
│   │   ├── doc
│   │   ├── doc-base
│   │   ├── docutils
│   │   ├── dpkg
│   │   ├── emacs
│   │   ├── glib-2.0
│   │   ├── icu
│   │   ├── libtool
│   │   ├── lintian
│   │   ├── man
│   │   ├── mime
│   │   ├── mpi-default-dev
│   │   ├── numpy
│   │   ├── openmpi
│   │   ├── perl
│   │   ├── perl5
│   │   ├── pixmaps
│   │   ├── pkgconfig
│   │   ├── pyshared
│   │   ├── python
│   │   ├── python3
│   │   ├── sgml
│   │   ├── sgml-base
│   │   ├── xml
│   │   └── xml-core
│   └── src
│       └── gtest
└── var
    └── lib
        ├── sgml-base
        ├── systemd
        └── xml-core

144 directories

ワオ! talker-listenerのsnapパッケージには,ROSはもちろん,必要なLinuxシステムのディレクトリ構造がまるごと含まれています.ちょっと無駄な気がしますね…しかし,これがdockerなどで最近の流行りの,アプリごとに1つのコンテナを持つ(コンテナ仮想化),というやり方なのですね.

ちなみに,生成されたsnapファイルは,

$ ls -sh talker-listener_0.1_amd64.snap 
154M talker-listener_0.1_amd64.snap

なんと154Mbyteもあります.こんなに大きくて,パッケージが増えた時には大丈夫なんでしょうか…どう見ても必要のないファイルがパッケージにたくさん含まれているので,このへんはおそらく解決する方法があるのでしょう.

著者:Ryosuke Tajima

Roomblock(5): 3Dプリンタで出力可能なフレーム構造

ルンバ,ラズベリーパイ,モバイルバッテリ,そしてレーザー距離センサといったRoomblockの部品を紹介しました.これらをルンバの上に載せるための,3Dプリンタで出力できる構造材を紹介します.

Battery stage

Battery stage

棚のような構造で,1番下の段にモバイルバッテリ,2番目の段にラズベリーパイ,1番上の段にRPLIDAR A2を載せます.動作中にモバイルバッテリが落ちてしまうことがあるので,1番下の段にはバッテリー固定用のベルトがつけられるようになっています.

Raspberry Pi stage

Raspberry Pi stage

部品をブロックのように交換したり追加したりして,機能を拡張することを狙っているので,”Roomblock”と名付けました.安直ですね.ラズベリーパイ用のボードカメラを固定するための部品も追加しました.

Roomblock's frame

Roomblock’s frame

ルンバとフレーム部分はベルクロテープで固定されているので,取り外しも簡単です.

この構造材は,比較的安価な3Dプリンタでも出力できるサイズで設計されています.確認には UP! plus2を使いましたが,ワークエリアが15cm x 15cm程度の3Dプリンタであれば,大抵の機種で出力できると思います.3Dデータ(STLファイル)は,Thingiverseからダウンロードすることができます.

Roomblockの詳細な作り方については,Instructablesで公開しています.ただし当社は,これらの内容によって生じるいかなる損害についても責任を負いません.興味がわいた方はあくまで自己責任で,チャレンジしてくださいね.

著者:Ryosuke Tajima

ROS + Snappy Ubuntu Core (2) : SnappyなROSパッケージを作ってみよう

前回はUbuntu Coreについて紹介しましたが,いわゆる”Snappyな”パッケージシステムは,Ubuntu Coreをインストールしなくても試すことができます.Ubuntu CoreはあくまでSnappyをパッケージシステムとして使っているにすぎません.今回は,通常のUbuntuの上で,”Snappyな”ROSパッケージを作ってみようと思います.

Snappy + ROS, https://www.crowdsupply.com/krtkl/snickerdoodle/updates/1890

SnappyなROSパッケージの作り方のチュートリアルは,ここにあります.とりあえずこの通りに従ってみましょう.

ただし,これをやる前に,Snapcraft Tourのチュートリアルを一通り読むことをお勧めします.

以下の手順は,Ubuntu 16.04 + ROS Kineticで試したものです.
まず,SnappyのパッケージングツールであるSnapcraftをインストールします.

$ sudo apt install snapcraft

SnappyパッケージにするためのROSパッケージが必要ですが,自分でコードを打ち込むのはめんどくさいので,githubからros_tutorialのソースコードをcloneします.

$ mkdir -p catkin_ws/src
$ cd ~/catkin_ws/src
$ git clone https://github.com/ros/ros_tutorials.git

snapcraftで初期化します.

$ cd ~/catkin_ws
$ snapcraft init

snapというディレクトリができて,その下にsnapcraft.yamlというファイルができます.このファイルを,roscpp_tutorialsの中のバイナリが含まれるように,書き換えます.書き換え方はチュートリアルに解説があるので参照してみてください.雰囲気でわかると思います.

さて,いよいよパッケージを作成します.

$ cd ~/catkin_ws
$ snapcraft

なにやらネットワークからいろいろとダウンロードし始めました…snapcraftはcatkinワークスペースを理解できるので,package.xmlを見て,rosdepで必要なパッケージをダウンロードしているのです. 「必要なROSのパッケージは全部システム入ってるはずだけど?」と思われるかもしれませんが,Snappyパッケージは,アプリに必要なものを仮想コンテナにすべて含んだ形で持つので,作成の際にいちいちパッケージをダウンロードし,ソースコードならコンパイルして,仮想コンテナ内にインストールします. しばらくすると,処理が終わり,

Snapped talker-listener_0.1_amd64.snap

と,snapファイルが生成されます. これをインストールするには,

$ sudo snap install --dangerous publisher-subscriber_0.1_amd64.snap

とします.インストールされたか確かめて見ましょう.

$ snap list
Name Version Rev Developer Notes
core 16-2.26.9 2381 canonical -
talker-listener 0.1 x1 -

では,ノードを順番に起動してみましょう.

$ talker-listener.roscore
$ talker-listener.talker
$ talker-listener.listener

お馴染みの,talker-listenerのノードが動き始めたと思います.

著者:Ryosuke Tajima

ROS + Snappy Ubuntu Core (1) : いったい何なの?

iPhoneのAppStoreやAndroidのGooglePlayのようなアプリのマーケットインフラを,ロボットの世界にも導入するためにはどのような課題があるでしょうか?ROSはその開発当初から「Robot App Store」を視野に入れてきていますが,まだ実現していません.

その中で,最近のUbuntu Snappy Coreと呼ばれる仕組みの登場は,Robot App Storeの開設に大きく貢献するのではないかと思われます.

Snappy + ROS, https://www.crowdsupply.com/krtkl/snickerdoodle/updates/1890

今後,数回に分けて,Ubuntu Snappy CoreとROSについて書いていきたいと思います.

Ubuntuの事情

ROSがメインのベース・オペレーティング・システムとしているUbuntuは,年に2回のRegularリリースがあり,そのサポート期間は9ヶ月です.また,2年おきにLTS(Long Term Support)と呼ばれるリリースがあり,サポート期間は5年です.実用を求める人は安定なLTSを使いつつ,最新技術の取り入れや新規開発はRegularリリースを使う,というサイクルが続いています.

しかし,Ubuntuが対象とするデバイスは,デスクトップPCやサーバだけでなく,IoTやルータなどのエッジデバイスにも広がりつつあります.残念ながらUbuntu Phoneはついに陽の目を見ないことになるようですが…

これらのデバイスでは,セキュリティの観点から,Ubuntuのような同期的なものではなく,もっと不定期かつ細かい間隔の継続的なアップデートが欠かせません.また,耐障害性,たとえば不具合を含むソフトウェアが配信された際にロールバックする,などの機能が必要になります.

Snappy Ubuntu Core

これらの要求に対して,Ubuntuでは,IoTやエッジデバイス向けに,(Snappy) Ubuntu Coreと呼ばれる仕組みが開発されています.

これは,OSとデバイスドライバの分離,またカーネルとアプリケーションを分離して,それぞれを独立に,細かい周期でアップデートできるような仕組みにしよう,というものです.

ROSの事情

ロボットもまたIoTやエッジデバイスの一種と見ることができるため,今後ROSでも,このSnappyなパッケージシステムが主流になる可能性があります.また,ROSのリリースシステムも,ほころびが目立つようになってきています.

これまでROSはUbuntuと同様に,同期的なリリースを行ってきました.しかし,1年に1回のリリースでは,日進月歩の技術を取り入れるのに遅れが大きすぎる気もします.一方で,ROSを業務に使用する場合には,動作させることが優先され,頻繁にアップデートしない(できない)ようになってしまいがちです.

また,ROSのパッケージは,たくさんの外部ライブラリに依存しています.外部ライブラリのAPIが変更になるたびに,ROSのパッケージもそれに対応させる必要があります.仕様が変わる場合には,パッケージを対応させた上に動作確認も必要です.

そのため,リリースされるたびに,リリースから外れていくパッケージが多くなってきました.必要だしよく使われるパッケージであるにもかかわらず,リリースのために修正が必要だけど修正作業を行うメンテナがいない,という理由でリリースされなかったり,リリースが遅れたりするケースもあります.

もしROSを搭載したロボット製品を販売しようと考えた場合,UbuntuやROSが更新されたタイミングで,どのような仕様変更や不具合が混入するかわからず,それに対応するには膨大なリソースが必要であることが予想されます.

以上のようなことから,今後はSnappyなROSシステムが主流になるのではないかと,勝手ながら予想しています.

Canonicalにお勤めのロボットエンジニアの方(Kyle Fazzari氏)が精力的に情報発信をしているのも頼もしいです.4月に公開された以下の一連のブログと動画も必見です.

著者:Ryosuke Tajima

Roomblock(4): 低価格なレーザ距離計 RPLIDAR A2

今回は,自律移動のためのキーパーツである,レーザ距離センサについて紹介します.レーザースキャナ,LIDAR(Laser Imaging Detection And Ranging)とも呼ばれます.

弱いレーザービームを発光し,物体への反射光を計測して,その時間差により物体までの距離を測ります.計測部分を回転させながら計測(スキャン)すれば,平面内の物体までの距離が計測できます.レーザービームを複数並べたり,細かく向きを変える機構を使うことで,平面内だけでなく3次元的な計測点が得られる3次元レーザ距離センサもあります.

一般的にレーザー距離センサは,2次元のものでも数十万円していたので,そう手軽に使えるものではありませんでした.しかしRoomblockで使っている SlamTech社のRPLIDAR A2 は,なんと5万円程度と破格なのです.

自律移動のキーパーツ,LIDAR

自律移動のキーパーツ,LIDAR

RPLIDAR用のROSドライバが公開されています.

$ sudo apt install ros-kinetic-rplidar-ros

として,

$ roslaunch rplidar_ros view_rplidar.launch

とするだけで,rvizで計測した点が表示されるお手軽さです.

rvizで表示した距離データ

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座標系に一致しています.ただ,レーザのスキャンマッチングでは,フレーム間の移動量を推定してこれを積算するので,長く移動させるとエラーも積算されていきます.これを避けるためには,より高度な自己位置推定のアルゴリズムが必要になります.

Roomblockの詳細な作り方については,Instructablesで公開しています.ただし当社は,これらの内容によって生じるいかなる損害についても責任を負いません.興味がわいた方はあくまで自己責任で,チャレンジしてくださいね.

著者:Ryosuke Tajima

ルンバとラズベリーパイとレーザ距離センサによる自律移動ロボット Roomblock(3)

前回はルンバと通信するためのROIコネクタについて紹介しました.今回はルンバと通信するための計算機として用いている,ラズベリーパイ(Raspberry Pi)について書きます.

ラズベリーパイについては改めて言うまでもないかもしれませんが,低価格なARM搭載のボードコンピュータです.Roomblockで用いているのはラズベリーパイ2です.通常のPCと同じように,Ubuntuをインストールしたあと,ROSをインストールすることができます.

IMG_2457

Raspberry Pi 2

ルンバのROIコネクタとラズベリーパイは,USB-シリアル変換器を使って接続します.変換器を内蔵したケーブル秋月電子で購入できます)を使うと,ミニDINコネクタとはんだ付けするだけで写真のようなケーブルが出来上がります.Roomblockで唯一のはんだ付けが必要な部品ですが,3,4箇所をはんだ付けするだけなのでそれほど難しくないと思います.


IMG_2328IMG_1720 (1)
USB-シリアル変換ケーブル
「ラズベリーパイ自身がシリアルポートを持っているのではなかった?」と思った方,その通りです.工作の手間ができるだけ少なくなるようにUSB-シリアル変換器を使っていますが,おそらくラズパイの内蔵シリアルポートを配線しても動作すると思います.興味のある方は試してみてください.

ラズベリーパイの電源はどうしましょうか?ルンバのROIポートにも電源が出ているのですが,これはルンバのバッテリの電圧がそのまま出ているので,使う場合には電圧の変換が必要になってしまいます.Roomblockでは市販のUSBモバイルバッテリーを別電源として使用することにしました.10000mAのものが3000円程度で購入できる,良い時代になりました…これでラズベリーパイを数時間は動作させることができます.

IMG_1618

USBモバイルバッテリー

今回はここまでです.次はレーザースキャナについて紹介します.

Roomblockの詳細な作り方については,Instructablesで公開しています.ただし当社は,これらの内容によって生じるいかなる損害についても責任を負いません.興味がわいた方はあくまで自己責任で,チャレンジしてくださいね.

著者:Ryosuke Tajima

ルンバとラズベリーパイとレーザ距離センサによる自律移動ロボット Roomblock(2)

Roomblockに使えるルンバは,500, 600, 700, 800 シリーズと呼ばれるものです.これらの機種は,外部と通信するためのシリアルポートを備えています.ただし,現在の最上位機種のルンバ900シリーズは,画像による地図生成までできるすごいものですが,シリアルポートを備えていないのでRoomblockのベースとしては使用できないので注意してください.

ところでそのシリアルポートはルンバのどこにあるのでしょう?シリーズにより位置が異なります.500シリーズ,600シリーズは,上面のカバーを外さなければなりません.このカバーは4か所のツメで固定されていて,最初は少し硬いので外すのに力が必要です.ケガや破損に十分注意してください.


IMG_2455IMG_2453
Roomba 500シリーズのROIコネクタ
カバーを外すと,ミニDIN7ピンのコネクタが現われます.これがROI(Roomba Open Interface)コネクタと呼ばれるものです.

700シリーズ,800シリーズは,ルンバ上面の取っ手の下にROIコネクタがあります.カバーを外す必要はなく,取っ手を持ち上げるだけでアクセスできます.


IMG_2450IMG_2451
Roomba 700シリーズのROIコネクタ
以前は,このROIコネクタをPCと繋げるためのケーブルや,BluetoothWiFiで無線化するモジュールが販売されていましたが,,今は手に入らなくなっています.Roomblockでは,ルンバの上に搭載した計算機(ラズベリーパイ)をROIコネクタに接続しますが,これについては次回紹介します.

Roomblockの詳細な作り方については,Instructablesで公開しています.ただし当社は,これらの内容によって生じるいかなる損害についても責任を負いません.興味がわいた方はあくまで自己責任で,チャレンジしてくださいね.

著者:Ryosuke Tajima

Roomblock: ループを含む大きな建物での地図生成

名城大学構内で実験させていただいたデータから,ROSの地図生成パッケージで地図を生成してみました.データはROSのbagファイルとして取得したので,同じデータに対して異なる地図生成パッケージを適用することが可能です.

ROSの地図生成のパッケージとして,

  •  gmapping
  •  slam_karto
  • hector_slam
  • Google cartographer

の4つのパッケージを用います.

これまで家屋や廊下など,比較的狭い環境で地図を作ってきました.それらの環境ではどの地図生成パッケージも,(誤差はともかくとして),自律移動に使えないような大きく矛盾する地図を作成することはありませんでした.狭い部屋では,基本的にレーザセンサのデータをずっとつなぎ合わせ続けることで,部屋の地図を作ることが可能です.

しかし,今回のデータは非常に大きな建物の長方形の廊下を一周したものです.廊下を一周回って元の場所に戻ってきた時,それが元の場所であることを認識せず,そのままレーザセンサのデータをつなぎ合わせていくと,最初に作った地図と矛盾したものを上書きし続けてしまいます.これを避けるためには,現在居る場所が以前来たことのある場所であると認識した上で,地図全体を辻褄があうように生成しなければなりません.これは”loop closure”と呼ばれ,地図生成では非常に難しい問題です.

以下の動画は,4つのパッケージで地図を生成した結果をまとめたものです.地図のグリッドサイズは5cmとし,各パッケージのパラメータのほとんどはパッケージの規定値のままで,一部のパラメータのみ少し調整しました.

gmappingは非常に健闘しました.途中の廊下は真っ直ぐになっておらず,地図の形は後半にかけて不正確になっています.これはルンバのあまり正確でないオドメトリを少し信頼しすぎているようです.しかし,一周回ってきた最後に注目してください.以前来たことのある場所だと認識し,辻褄があうように地図全体を変形させました.矛盾のない,ほぼ正しい地図が出来上がりました.

slam_kartoは,今回はloop closureの検出に失敗してしまいました.一周回ってきた後,最初に作った地図を破壊しながら,新しい地図を上書きしていきます.矛盾した地図となってしまいました.

hector_mappingには,じつはloop closureの機能がありません.また,車輪の回転速度(オドメトリ)を使っていません.そのため,この環境ではうまく地図を作ることはできませんでした.

Google cartographerは最後発で,しかもこのような大規模環境の地図を作るために開発されたアルゴリズムです.やはりループを正しく閉じることに成功しました.


gmapping_mapkarto_maphector_mapcartographer_map

最終的に生成された地図(左から,gmapping, slam_karto, hector_slam, cartographer)

 

以上の結果は,どのパッケージやアルゴリズムが優れているか,どのパッケージを選ぶべきかということを示すものではないことに注意してください.今回,パラメータはほとんどチューニングしなかったので,それぞれのパッケージの最高の性能が出ているわけではありません.また,それぞれのアルゴリズムには得意不得意があるので,課題に対してどれが良いかは,実際に試してみないと分からないことが多いはずです.

現在のところROSはこのような様々な地図生成パッケージを比較検討できる唯一のプラットフォームです.オープンソースの利点を活かし,ぜひご自分の手で確かめてみることをお勧めします.

TORKでは,自律移動編を含むROS初級,中級のワークショップ,企業や大学でのプライベートワークショップのご依頼も承っております.お気軽にお問合せください!
info[at]opensource-robotics.tokyo.jp

著者:Ryosuke Tajima

ルンバとラズベリーパイとレーザ距離センサによる自律移動ロボット Roomblock(1)

弊社のROS中級ワークショップ・自律移動編では,ルンバをベースとした自律移動ロボット”Roomblock”を教材として使用しています.不定期なエントリとして,このRoomblockの内容を紹介していきます.

まず,Roomblockは車輪移動台車として,iRobot社のお掃除ロボット,ルンバ(Roomba)を使用しています.驚かれる方もいるかもしれませんが,ルンバは実は通信用のシリアルポートを持っていて,パソコン等から操作したりセンサ情報を取得することが可能なのです.ルンバのこの機能は,発売当初から一部のエンジニアやホビイストの間で話題になり,ルンバを操作して楽しむ”Roomba Hacking”がブームとなったほどです.ROSが登場するよりもずっと前の話です.

IMG_1704

もう壊れてしまいましたが,2007年に私が初めて購入したRoombaです

iRobot社からは,”iRobot Create”という,掃除機能を省いた教育向けのルンバが発売されていたこともありました.ROSでも初期のTurtlebotプラットフォームは,このCreateをベースにしていました.現在はiRobot Createの販売は終了しており,TurtlebotもKobukiを用いたTurtlebot2, そしてRobotis社による独自プラットフォームTurtlebot3へと進化しています.

そんな中,なぜ今お掃除ロボット,ルンバを教材のベースとしたのでしょうか?3つ理由があります.

1つめは,ロボットの全体の価格をできるだけ抑えるためです.発売当初は割高に感じたルンバも,普及が進み今では3万円台から手に入るようになっています.屋内での自律移動に適したサイズ,車輪,センサなどを備えたロボットとしては破格です.

2つめは,ROSのパッケージがすでに存在していることです.それらを利用して,自律移動技術の本来的な目的である,地図生成や経路計画のソフトウェアの学習をすぐに始めることができます.

3つめは,ルンバが掃除をしてくれるからです…当たり前ですね.しかし,余暇にロボティクスを勉強したいエンジニアが,家族に「自律移動ができる10万円のロボットを買いたい」と言って納得してもらえるでしょうか?「ルンバなら掃除もしてくれるよ!」というとみんな喜んでくれます.

IMG_2278

最近では「ルンバ対応」のリビングチェアなるものまであります

おっと,つい話が長くなってしまいました.私ルンバが大好きなもので….今回はここまでです.

Roomblockの詳細な作り方については,Instructablesで公開しています.ただし当社は,これらの内容によって生じるいかなる損害についても責任を負いません.興味がわいた方はあくまで自己責任で,チャレンジしてくださいね.

著者:Ryosuke Tajima

名城大学にて自律移動ロボットのデモ&実験をさせていただきました

 
ROS初級と中級・自律移動編を受講頂いた名城大学メカトロニクス工学科様のご好意で,自律移動ロボット”Roomblock”のデモンストレーションをさせていただきました.

ものの数分で部屋の地図を作った後,障害物を避けながら自律的に移動するロボットに,学生さんたちも興味津々でした.

2017-06-28 12.32.23 navigation_stage_3
その後,名城大学の真新しくてモダンな構内で,ロボットを動かしてデータを取る機会をいただきました.大きな長方形の通路を一周し,これまでにない大きなループの経路のデータを取ることができました.果たして,RoomblockとROSの地図生成パッケージはちゃんと地図を作ることができたのか,後ほど報告したいと思います.

IMG_2401 IMG_2414
名城大学の目黒先生,学生の皆様方,ご協力どうもありがとうございました.

TORKでは,自律移動編を含むROS初級,中級のワークショップ,企業や大学でのプライベートワークショップのご依頼も承っております.お気軽にお問合せください!
info[at]opensource-robotics.tokyo.jp

著者:Ryosuke Tajima

ROS Intermidiate (Navigation) Workshop in Nagoya 名古屋にてROSワークショップ中級・自律移動編を開催しました

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

IMG_2340

IMG_2346

IMG_2347

著者:Ryosuke Tajima

ROS Basic Workshop in Nagoya. 名古屋にてROSワークショップ初級編を開催しました

We had ROS Workshop at Meijo University, Nagoya, Aichi. They run through the basic of ROS, such as sensing, actuating and connecting them together. Many questions and answers was made, for comprehensive understanding to use ROS.

Great work, everyone!!

名古屋市の名城大学メカトロニクス工学科で,プライベートROSワークショップ初級編を開催しました.

初級編では環境の構築からセンシングデバイス(LeapMotion),ラジコンサーボ(Dynamixel)をROSで動かすところまでを半日で行いました.その中で出てくる疑問点(たとえばROSの概念的な部分から具体的な操作など)にもお答えいたしました.

これからバリバリ研究して行こうという学生のみなさんに,まずはROSを効率よく使っていくお手伝いができたのではないかと思います.

ROSを初めて勉強する人へのブログも公開しています. 合わせてご参考になさってください.

このように,TORKでは企業や大学でのプライベートワークショップのご依頼も承っております.また,本年からは中部地区での開催を増やしていこうと考えています.お気軽にお問合せください!
info[at]opensource-robotics.tokyo.jp


IMG_2313

IMG_2308

著者:Ryosuke Tajima

ROS Workshop Intermediate Course (Navigation) is coming soonROSワークショップ中級・自律移動編を始めます!

当協会では,

  • ROSワークショップ初級編
  • ROSワークショップ中級・マニピュレーション編
  • ROS ワークショップ初級編・産業用双腕 Baxter

といった,ROSを学習するためのワークショップを開催してまいりました.

2017年度からは新たに,

  • ROSワークショップ中級・自律移動編

の開催を計画しております.

「自律移動編」では,シミュレーションででROSの自律移動を体験していただくハンズオン,ラズベリーパイ(Raspberry Pi)とルンバ(Roomba),RPLIDARを用いた自律移動ロボット“Roomblock”での実際の地図作成,自己位置推定といった自律移動に必要な機能を実践的に学んでいただけます.また,ROSの自律移動機能の全体像や,構成パッケージについても解説いたします.

こちらのセミナーは有償となります.金額については,info[a t]opensource-robotics.tokyo.jp までお問い合わせ下さい.正式な開催日時等決まりましたら,また当ウェブサイトにてお知らせさせて頂きます.出張ワークショップも承っております.お気軽にご相談ください.

引き続き,「初級編」「マニピュレーション編」「Baxter編」の参加者も募集しております.詳細は,上記メールアドレスまでお問い合わせ下さい.

We have been coordinated three workshops for ROS learners:

  • ROS workshop basic course
  • ROS workshop intermediate course (Manipulation)
  • ROS workshop with Baxter

Now, we are pleased to announce a new course will be added soon:

  • ROS workshop intermediate course (Navigation)

This course is focus on the navigation system of ROS. You can learn the advantage of  ROS navigation using simulation. Furthermore, we prepare mobile robot named “Roomblock”, which consists of Roomba, Raspberry Pi and RPLIDAR. The overview of the navigation system and the packages are also lectured.

Same as before we’re coordinating in Japanese language but any interest is appreciated toward info[a t]opensource-robotics.tokyo.jp.