ROS2 中級チュートリアル:URDFで可動関節を持つロボットモデルを構築する

目標:URDFで可動関節を定義する方法を学ぶ

チュートリアルレベル:中級

所要時間:10分

目次

  • ヘッド部分
  • グリッパー
  • グリッパーアーム
  • その他の関節タイプ
  • 姿勢の指定
  • 次のステップ

このチュートリアルでは、前回のチュートリアルで作成したR2D2モデルを修正し、可動関節を持たせます。以前のモデルでは、すべての関節は固定されていました。ここでは、連続関節、回転関節、およびプリズム関節という3つの重要な関節タイプを探求します。

続行する前に、必須コンポーネントがすべてインストールされていることを確認してください。必要な情報については、前回のチュートリアルを参照してください。

再度、このチュートリアルで言及されているすべてのロボットモデルは、urdf_tutorialパッケージで見つけることができます。

可動関節付きの新しいURDFはこちらにあります。以前のバージョンと比較してすべての変更点を確認できますが、ここでは3つの例示的な関節に焦点を当てます。

このモデルを視覚化および制御するには、前回のチュートリアルと同じコマンドを実行します:

ros2 launch urdf_tutorial display.launch.py model:=urdf/06-flexible.urdf

しかし、これにより、すべての非固定関節の値を制御できるGUIもポップアップ表示されます。モデルを操作して、どのように動くか確認してみましょう。その後、どのように実現したかを見ていきましょう。

ヘッド部分

<joint name="head_pan" type="continuous">
  <parent link="torso_link"/>
  <child link="head_link"/>
  <axis xyz="0 0 1"/>
  <origin xyz="0 0 0.4"/>
</joint>

胴体とヘッドの間の接続は連続関節です。これは、負の無限大から正の無限大まで任意の角度に回転できることを意味します。車輪も同様にモデル化されており、2方向に永遠に転がることができます。

追加する必要がある唯一の情報は回転軸です。ここではxyzの3つ組で指定され、ヘッドが回転するベクトルを指定します。z軸周りに回転させたいので、ベクトル"0 0 1"を指定します。

グリッパー

<joint name="right_finger_joint" type="revolute">
  <axis xyz="0 1 0"/>
  <limit effort="800.0" lower="-0.3" upper="0.3" velocity="0.8"/>
  <origin rpy="0 0 0" xyz="0.15 -0.02 0.05"/>
  <parent link="palm_link"/>
  <child link="right_finger"/>
</joint>

左右のグリッパー関節は両方とも回転関節としてモデル化されています。これは、連続関節と同じ方法で回転しますが、厳密な制限があります。そのため、関節の上下限(ラジアン単位)を指定するlimitタグを含める必要があります。また、その関節の最大速度と最大力を指定する必要がありますが、実際の値はここでは重要ではありません。

グリッパーアーム

<joint name="arm_slider" type="prismatic">
  <parent link="base_link"/>
  <child link="arm_link"/>
  <limit effort="1200.0" lower="-0.5" upper="0.2" velocity="0.3"/>
  <origin rpy="0 0 0" xyz="0.25 0 0.15"/>
</joint>

グリッパーアームはプリズム関節という異なるタイプの関節です。これは、軸の周りではなく、軸に沿って移動することを意味します。この並進運動により、ロボットモデルはグリッパーアームを伸縮させることができます。

プリズムアームの制限は回転関節の制限と同じですが、単位がラジアンではなくメートルである点が異なります。

その他の関節タイプ

空間内を移動するための他に2種類の関節がありますプリズム関節は1次元に沿ってのみ移動できますが、平面関節は1平面または2次元で移動できます。さらに、フロート関節は制約されず、3次元のどこにでも移動できます。これらの関節は1つの数字だけで指定できないため、このチュートリアルでは含まれていません。

姿勢の指定

GUIでスライダーを移動すると、モデルはRvizで移動します。これがどのように実現されているのでしょうか。まず、GUIがURDFを解析し、すべての非固定関節とその制限を見つけます。次に、スライダーの値を使用してsensor_msgs/msg/JointStateメッセージを発行します。次に、robot_state_publisherがこれらのメッセージを使用して、各部分間のすべての変換を計算します。その後、生成された変換ツリーがRvizでのすべての形状の表示に使用されます。

次のステップ

これで明らかに使用可能なモデルができたので、物理プロパティを追加するか、xacroを使用してコードを簡素化し始めることができます。

タグ: ros2 URDF ロボットモデリング 関節 連続関節

7月12日 19:19 投稿