2010年1月24日日曜日

i-SOBOTをROSノードを使ってPS3コントローラーから動かす(設計)

ROS1.0でましたね。

これでドキュメントも落ち着いてかけます。
この記録でも最初のほうはすでに現状とマッチしない部分がありますから、
バージョンが落ち着くのはありがたいです。

というのは置いておいて、i-SOBOTをROSで動かしましょう。

i-SOBOTはそもそもPCから自由に動かすことはできないのですが、
私は自作でコントローラーを作ったので、関節角度を自由に指定して動かすことができます。
そちらに興味がある人はここに少しヒントを書きましたので参照ください。

1. ノードの設計

i-SOBOTは関節角度を指定して動かすことができて、C++のライブラリとして実現されています。
これを使ってi-SOBOTノードを作ってROSとつなげます。
いったんROSとつないでしまえば、これまでに勉強したライブラリが使い放題になります。
例として前回勉強したPS3のコントローラーとつないでみます。

今回作るのは下の図にある、
iSOBOT_node・・・iSOBOTを動かすためのノード
teleop_iSOBOT_joy・・・iSOBOTとjoyノードをつなぐためのノード
の2つです。

ポイントは
・iSOBOT_nodeのインタフェースを何にするか?
です。

ROSのインタフェースはトピックとサービスの2つに別れ、サービスの場合はさらに、actionlibを使った非同期通信にするかどうかを考えなければいけません。
今回はi-SOBOTの関節を動かすだけの単純な操作だけなので、トピックで関節目標角度を受け取ることにしました。

2.トピックの設計

そしてトピックにするとしても次はどんなメッセージ型にするか、ということを考えます。
PR2がジョイントを動かす・角度を公開するときにどういう型だったかを思い出します。
すると、
sensor_msgs/JointState
という型を使っていましたね。

そこでこのメッセージをそのまま使うことにしました。

3.ノード間アーキテクチャ設計

ということで、大体の概要の設計が終わりました。
トピックの名前(チャネル)を決めて、以下のように設計しました。
楕円がノードで、四角がトピックです。




4.実装

ここまでできてから実装を開始します。
今までやってきたことを思い出しながら、
willowのサンプルを真似しながら実装すればそれほど難しくはありませんでした。

5.ロボットを動かす

次回動画で紹介しますね。


だんだん、ROS勉強記録というより、ROSを楽しむ記録になりつつありますが、
こういうのが一番早く勉強する方法だと思います。

0 件のコメント:

コメントを投稿