2017年9月3日日曜日

URDFのplanarとfloatingの扱い

ROSでロボットの情報をURDFというファイルで記述します。URDFではロボットをLinkという単位で分けて、それをJointでつなげることでロボットを記述します。ROSwikiにあるようにjointには以下の6種類があります。
  • fixed(固定)
    例えばねじ止めをしている部品同士など固定されているものを表すタイプです。
  • revolute(回転1自由度)
    いわゆるヒンジで、回転できるジョイントですが、回転できる範囲に制限があります。
  • continuous(回転1自由度)
    タイヤの軸などを表すもので、回転するジョイントですが回転範囲に制限がありません。
  • prismatic(並進1自由度)
    リニアガイドやピストンなどの直線的に動くジョイントです。
  • planar(並進2自由度、回転1自由度)
    イメージとしては面と面がくっついている物で、上下左右に動けるのと回転が出来ます。例えば移動ロボットが地面に接触しているのを表すのに使えます。
  • floating(並進3自由度、回転3自由度)
    地面とドローンの関係など、いわば何も拘束が無い状態を示します。
自作ロボットのurdfを製作するブログ記事ではロボットのジョイントを動かす簡易的な方法としてjoint state publisherのGUIを使っています。これは記事を見てもらえばわかるのですが、rvizを起動するとスライダーのウィンドウが出てきて、スライダーを動かすとロボットが動くというものです。
またこのGUIを使わずにプログラムからrviz上のロボットを動かすために/joint_statesというROS topicを通じてjoint_state_publisherにデータを投げることが出来ます。
このようにjoint state publisherによって簡単にrvizでロボットを動作させれるのですが実はjoint state publisherは2自由度以上のジョイント(planarとfloating)に対応していません。joint state publisherではこの2つのタイプの関節はfixと同じものとして扱われます(つまり動かせません)。
ではこの2つのジョイントは使えないのかというとそうではなく、直接tfにデータを送れば動いてくれます。tfの使い方についてはまた別に記事を書きます。
ここで注意としてplanarでジョイントを作ってもtfでは初めに居た平面以外のところの座標も指定できます。またrevolute等の1自由度の関節もtfを使えば、本来設定できない位置を指定することも可能で、警告なども出ません。このあたりの拘束はユーザーの責任で満たさないといけないみたいです。

0 件のコメント:

コメントを投稿