座標管理 - ais-lab/UD_wiki GitHub Wiki

##準備 以下のコマンドを実行する.

roslaunch xxx.launch

各関節の位置姿勢を取得したいならtfをsubscribeすればよい.

##動作確認 以下のコマンドを入力することでrviz上で座標系を確認することが可能である.

roslaunch urdf_tutorial display.launch model:=xxx/xxx.urdf gui:=True

引数gui:=Trueでシークバーを用いて間接を稼働させることが可能となる.

##Dynamixelを用いた動作確認 Dynamixel (パンチルト機構)内に書いてある

roslaunch ubiquitous_display start_dynamixel.launch

でノードを起動した状態で,以下のコマンドを実行することで,rviz上で姿勢が反映されていることが確認できる.

roslaunch ubiquitous_display show_pantilt.launch 

##トラブルシューティング

  • rviz上でaddしたRobotModelが真っ白になる
    • rvizを、rviz設定ファイル無しで起動した場合には、Displays -> Global Options -> Base Frameの一覧から、自分のロボットのリンクを選ぶ必要があります(例えば base_link )。ここで指定したframeが、rvizのframeの原点に配置されるように紐付けられます。 さらに、左下のAddボタンから RobotModel と TF を追加すればロボットのCGと座標系が表示されます。 この状態でrvizの設定ファイルを保存しておけば、上記の設定や視点などを再現することができます。
  • Dynamixelを動かしてもrvizに反映されない
  • Dynamixel (パンチルト機構)のトラブルシューティングを参照
  • 表示自体はうまくいく場合,pantilt.yamlpantilt.urdf.xacroのjoint nameが一致しているか確認

#環境構築法 ##インストールするソフトウェア ありません.tfはROSインストール時に自動でインストールされます. ただし,Dynamixel関連のパッケージについては,インストールする必要があります.

##設定 下記に記載されているソースはあくまでサンプルです.最新版をリポジトリ内で参考にすること

設定ファイルは

  • ~catkin_ws/src/ubiquitous_display/urdf/pantilt.urdf.xacro
  • ~catkin_ws/src/ubiquitous_display/launch/xxxx.launch (TODO そのようなファイルはない)

である.なおこのファイルは,ロボットの高さやパンチルト機構などの物理的な構造が変わらない限り変更する必要はない

###pantilt.urdf.xacro URDF(Unified Robot Description Format)と呼ばれるロボットの座標系と関節の関係を記述するためのxmlを, xacroというマクロ(変数を定義や演算が可能)が使用できるように拡張したもの.

たとえば、UDはパンチルト機構と移動プラットフォームで構成されているので,

<robot name="UbiquitousDisplay">
  <link name="link1" />
  <link name="link2" />
  <link name="link3" />

  <joint name="joint1" type="revolute">
    <parent link="link1"/>
    <child link="link2"/>
    <origin xyz="0 0 0.5" rpy="0 0 0" />
    <axis xyz="0 0 1" />
    <limit lower="0" uppper="2" />
  </joint>

  <joint name="joint2" type="revolute">
    <parent link="link2"/>
    <child link="link3"/>
    <origin xyz="0 0 0" rpy="0 0 0" />
    <axis xyz="0 1 0" />
    <limit lower="0" uppper="2" />
  </joint>

</robot>

と記述できる なお、ROSの座標系は右手系,単位はメートル,角度はラジアン,回転方向は右ねじの方向が正である.

まず,typeはjointの挙動である.UDのパンチルト機構は範囲指定ありの回転機構なのでrevoluteを設定している. また,limitはDynaxmielの回転制限である.特にtiltはロボットを破壊する恐れがあるため,慎重に回転制限を決定すること.

実際に触る可能性が高いのは座標系の設定部分である.<origin>parentから見てchildが位置する座標系である.なおrpyはroll,pitch,yawの略であり回転を表す.

joint nameDynamixel (パンチルト機構)pantilt.yamlのjoint_nameと一致している必要がある.

構文が正しいか確認したい場合は,

check_urdf ud.urdf
urdf_to_graphiz ud.urdf

で確認できる.上が構文確認,下がpdfを生成する.

###xxx.launch (todo そんなファイルがない) joint_state_publisherrobot_state_publisherを起動させるためのlaunchファイル. urdfのパスはここで指定されている

概要としては,joint_state_publisherが各joint(関節)の状態をpublishしており,その情報を基にrobot_state_publisherがtf(つまりlinkの位置姿勢)をpublishしている.

⚠️ **GitHub.com Fallback** ⚠️