なぜわざわざurdfではなく、xacroを使うのか
urdfでも十分にロボットモデルを記述することができるが、xacroだとモデュール化をすることができる。
例えば、蛇ロボットのような同じ部品が連続するロボットを作る場合、一つの関節ユニットに関してモデルを記述し、これを繰り返す処理を行うことでモデルの記述量の肥大化を防ぐことができる。
環境
項目 | 環境 |
---|---|
CPU | Intel Core Ultra5 125H |
RAM | 16GB |
OS | Ubuntu22.04 |
ROS 2 | Humble |
事前準備
Humble以外なら、"humble"を書き換える。foxyとか。
sudo apt install ros-humble-xacro
URDFを扱えるパッケージを作る
cd ros2_ws/src
ros2 pkg create urdf_test --build-type ament_python --dependencies rclpy
cd urdf_test
mkdir urdf
cd urdf
xacroファイルを作る
urdfディレクトリの下に、次のxacroファイルを作る。
test_xacro.xacro
<robot name="test_robot" xmlns:xacro="http://www.ros.org/wiki/xacro">
<xacro:property name="side" value="0.5" />
<link name="base_link">
<visual>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<box size="${side} ${side} ${side}" />
</geometry>
<material name="red">
<color rgba="1.0 0.0 0.0 1.0"/>
</material>
</visual>
</link>
</robot>
xacroをurdfに変換する
xacro test_xacro.xacro -o test_xacro.urdf
変換でエラーが生じた場合、xacroが間違っている。
変換後は次のurdfファイルができる。
test_xacro.urdf
<?xml version="1.0" ?>
<!-- =================================================================================== -->
<!-- | This document was autogenerated by xacro from test_xacro.xacro | -->
<!-- | EDITING THIS FILE BY HAND IS NOT RECOMMENDED | -->
<!-- =================================================================================== -->
<robot name="test_robot">
<material name="red">
<color rgba="1.0 0.0 0.0 1.0"/>
</material>
<link name="base_link">
<visual>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<box size="0.5 0.5 0.5"/>
</geometry>
<material name="red"/>
</visual>
</link>
</robot>
作成したモデルを確認する
rviz2からファイル指定する
rviz2
rviz2の左下のaddボタンから、RobotModelを選択する。
RobotModelのDescription SourceをFileに変更し、Description Fileから先ほど変換したtest_xacro.urdfを選択する。ここまででモデルが出てくる。
その後、Fixed Frameをmapからbase_linkを選択する。ここまですると色がつく。
urdf_launch display.launch.pyで表示する
パスを正しく指定する必要がある。
cd urdf_test/urdf
ros2 launch urdf_launch display.launch.py urdf_package:=urdf urdf_package_path:=/home/yama/ros2_ws/src/urdf_test/urdf/test_xacro.urdf
参考