ところでロボットを動かそうとするとき、ロボットのハードウェアとROSのコントローラーがあれば「最低限の」動作は可能だが、このままではちょっと足りない。そう、センサーだ。
完全に人が操作するから必要ないというレアケースを除くと、何らかのセンサーを接続する必要があり、このセンサーもROSでサポートされる。現在サポートされている主要なセンサー一覧はこちらだが、1/2/3次元のレンジファインダーやカメラ、音声認識、環境センサー、圧力/トルク/接触センサー、モーションキャプチャー、姿勢検知、電源、RFIDなどが既に用意されている他、ここにリストアップされていないセンサーを、Arduino経由で取り込むといった事も可能である。
こうしたセンサーでよく使われているのがマイクロソフトのKinectで、安価で性能が良いということで、現在はOpenNIベースのパッケージを利用して簡単に使えるようになっている。ちなみにこのセンサーは、先に環境を整えた、全体を管理するROSに接続することもできるし、ROSが動く別のノードに接続することもできる。
さて、「後はバリバリコードを書くだけだ」……というのは間違ってないのだが、もっとスマートな方法がある。
ROSの場合、既に多数の実装がパッケージの形で入手可能なので、まずは手持ちのハードウェア、あるいはやりたいことに適合したパッケージがあるか探してみるのが良い(Browsing packages for jade:ROS.org)。
パッケージをそのまま使わないにしても、先人のコードを見るだけでもいろいろと役に立つはずだ。突拍子もないハードウェアとか、誰もやってないような事をやりたい、なんていうのでなければ、これらのパッケージを組み合わせるだけで、ある程度の事はできるはずである。
ロボットを動かしたら必ずしも思う様な動きにならない、という事も往々にして起こる。ただ、ある程度複雑な制御アルゴリズムを入れていると、何が悪いのかの切り分けから入らないといけないが、いきなり実機でこれをやるのは大変なことがある。そうした場合に役に立つのがシミュレータである。
Turtlebotならば「Turtlebot_simulator」があるし、ROSとは別に開発されているロボットシミュレータの「Gazebo」をROSから利用するパッケージも提供されている。
シミュレーション、というよりはデバッグツールに近いのが「rviz」である。例えばカメラを使って物体認識を行う場合、「カメラはどこを見たか」「それをどう処理したか」「その結果としてどう物体を認識したか」といった情報を開発者に分かりやすく示してくれる。
内部の座標系の変換を行い、追跡してくれる「tf」というパッケージもある。例えばロボットのタイヤの駆動を管理しているノードにとっては、内部の座標系は前後進の1次元のみである。が、実際にはこれにステアリングやら左右のタイヤの差動やらが加わり、実際は二次元的な動きになる。
あるいは多関節ロボットアームの場合、それぞれの関節は2次元の回転運動であるが、アーム全体としては複雑な3次元運動になる。つまり、個々のノードとロボット全体では異なる座標系が用いられている訳で、何かしら問題があるときには、その解決に際しては座標系の変換を毎回行う必要がある。tfはこれを自動的に行ってくれるもので、rvizと組み合わせて使う事もできる。
Copyright © ITmedia, Inc. All Rights Reserved.