ROS2でurdfを書く最初の一歩


何事もとっかかりが大事

やること

ROS2でヒューマノイドを動かしたいのですが、urdfというロボットの記述方法についてROS2環境でどうすればよいのかわかりません。
ROS1に対応した情報なら書籍もサイトもすぐに見つかりますが、ROS2でゼロからとなるとなかなか情報が見つかりません。
そこでROS2でhrdfを始める場合の最初の一歩のところをメモに残しておきます。
まずは最小限のurdfファイルを書いて、それがrviz2で表示できるかを確かめます。

必要なもの

  • ROS2が使える環境(Ubuntu 20.02 + ROS2/foxy)
  • ROS2の基礎知識(topicの送受信デモを試した程度でよい)
  • rviz2が導入済み

参考

Using URDF with robot_state_publisher
ROS講座13 URDFを記述する1
大変参考になりました。ありがとうございます。

ROS2のパッケージを作る

まず適当なワークスペースに移動して、urdfテスト用のパッケージを作ります。

$ ~/dev_ws/src #ビルド済みで使える状態の適当なワークスペース
$ ros2 pkg create urdf_test --build-type ament_python --dependencies rclpy

新たにワークスペースを作ったという場合は、一応アクティベートもしておきます。

(アクティベートする場合はこちらをクリック)
$ CD ~/dev_ws/
$ source install/local_setup.bash
$ CD ~/dev_ws/src

urdfの空ファイルと格納する場所を準備します

$ cd urdf_test/
$ mkdir urdf
$ cd urdf_test
$ touch test.urdf

urdfを書く

urdfの中身を書いていきます。urdfはxml形式のファイルとなります。

$ nano test.urdf

nanoのところはもちろん vim でも codeでも使いなれたエディタでOKです。

test.urdf
<robot name="test_robot">
  <link name="base_link"/> #基準となる空のリンク

  <joint name="body_joint" type="fixed"> #ジョイントの設定
    <parent link="base_link"/> #ジョイントの親を指定
    <child  link="body_link"/> #ジョイントの子を指定
  </joint>
  <link name="body_link"> #リンクの設定
    <visual>
      <geometry>
        <box size="0.1 0.2 0.4"/> #見た目を長方形に設定
      </geometry>
    </visual>
  </link>
</robot>

urdfはリンク(腕のような部品)とジョイント(関節のような部品)のペアで書き連ねていきます。
上記はおそらくurdfの最小の構成で、ここから何か要素を削除するとRviz2で表示できなくなります。

rviz2でurdfを表示する

rviz2を起動する

$ rviz2

空っぽのrviz2が立ち上がったら左側に「Displays」のウィンドウがあるか確認します。
ない場合は、上のメニューの「Panels」から「Displays」をチェックします。

udrfを適用する

「Displays」のウィンドウの下にある「Add」を押し、「RobotModel」を選択します。

「RobotModel」が追加されたら、
Description Sourceの右側の空欄を選択して「File」を選択します。
さらにDescription Fileの右側の空欄を選択して該当ファイルを指定します。

以下のように画面に白い直方体が表示されたら成功です。

ちなみにRviz2のビュー画面の操作は、

  • 左クリック+移動:回転
  • ホイール押下+移動:移動
  • 右クリック+上下:拡大縮小

となっています。

補足

今回はxmlファイルをrviz2から開いているだけなので、パッケージのビルドは必要ありません。
ワークスペースのアクティベートももちろん必要ありませんでした。
でも今後の実験に必要になってくるのでその準備だけはしておきました。

つづき

このモノリスを次はgazeboに表示させたいと思います。

次回記事: