ROS2でURDF


urdfモデルのTF配信

robot_state_publisher を使う

$ros2 run robot_state_publisher robot_state_publisher ${path_to_urdf}

RobotModelの表示 in rviz2

  1. rviz2 を起動

  2. 画面左下のbtn:[add]をクリック

  3. menu:By display type[RobotModel > OK] をクリック

ファイルを直接指定

  1. menu:RobotModel[Discription Source > File]を選択

  2. menu:RobotModel[Description File]で表示したいURDFファイルのパスを指定

嬉しいのが,表示のON/OFFの切替時にファイルを読み直してくれるようなので,RobotModelの表示切替のチェックボックスをON→OFF→ON とすると更新されること.

robot_descriptionトピックを購読

  1. robot_state_publisherの実行

  2. menu:RobotModel[Discription Source > Topic]を選択

  3. menu:RobotModel[Description Topic]で /robot_description を指定

ハマりポイント

メッシュが見つからない的なエラーが出る

もう一回 colcon build コマンドを実行する.
以下のような package://${package_name} のパスはinstallディレクトリ内にコピー(シンボリックリンク)されたパスの方を探しに行くため, 一度 colcon build した後に追加したファイルやリネームした場合は見つからないと言われる.

  <!--- ... --->
  <mesh filename="package://d03_description/meshes/wheel_and_hub.stl" scale="0.001 0.001 0.001"/>
  <!--- ... --->
Warning
この辺り, colcon build のオプションの --symlink-install が関係する気がしなくもないので後で調べておく.
rqt_guiが見つからない

起動方法が変わってる. ros2 コマンド経由ではなく,直接バイナリを実行する. https://answers.ros.org/question/314475/how-to-run-rqt_graph-in-ros2/

rqt_graph
joint_state_publisherがいない

dummy_sensor パッケージの dummy_joint_states が代替っぽい
https://index.ros.org/doc/ros2/Tutorials/dummy-robot-demo/

rqt_publisherでJointStateをpublisshできない

name フィールドを埋めようと ['a','b'] 等を打つとエラーになるため,コマンドラインでごまかす.

ros2 topic pub /joint_states -r 1 sensor_msgs/msg/JointState "{ header: {stamp: {sec: 0, nanosec: 0}, frame_id: 'a'}, name: ['wheel_left_joint', 'wheel_right_joint', 'caster_housing_left_joint', 'caster_wheel_left_joint','caster_housing_right_joint', 'caster_wheel_right_joint'], position: [0.0,0, 0,0,0,0]}"
ros2  urdf