Closed6
Mac で .xacro から .urdf を生成する
このライブラリを使ってFusion360から出力したCADモデルは .xacro 形式になっています。
MuJoCoでモデルをインポートしたかったのですが .xacro は対応しておらず .urdf に変換が必要でした。
xacro コマンドで.urdfは生成できそうですが、Macでサクッとインストールする方法が見つからず。
ROSのDockerコンテナを立ち上げ、その中でコマンドを実行しました。
.urdfと.xacroはどちらもXMLベースだけど、そもそも2つはどんな関係性?
xacroはURDFファイルの生成を簡便にするためのツールであり、実際にロボットモデルをロードする際には、xacroファイルが処理されて最終的にURDF形式のファイルが生成されます。つまり、xacroファイルはURDFファイルを出力するためのテンプレートのような役割を果たしており、ユーザーがxacroファイルで記述したモデルが、URDF形式として解釈されてロボットシミュレーションや制御に使用されることになります。
事前準備
変換するデータとDockerfileを用意します。
.
├── data/
│ └── xxx_discription/
│ ├── CMakeLists.txt
│ ├── launch/
│ ├── meshes/
│ ├── package.xml
│ └── urdf/
└── Dockerfile
変換方法(ROS2 w/ colcon)
- Dockerfileの作成
Dockerfile
FROM ros:jazzy
# install ros package
RUN apt-get update \
&& apt-get install -y \
ros-${ROS_DISTRO}-xacro
- Dockerコンテナの起動
docker build . -t ros2-urdf-exporter
docker run --rm -v ./data:/app -it ros2-urdf-exporter bash
- コンテナの中で .urdf を生成
source /opt/ros/jazzy/setup.bash
# パッケージのビルド
colcon build --packages-select xxx_description
source ./install/setup.bash
# パッケージがインストールされているか確認
ros2 pkg list | grep xxx_description
# .xacro から .urdf を生成
ros2 run xacro xacro xxx_description/urdf/robot_urdf.xacro > xxx.urdf
変換方法(ROS1 w/ catkin)
- Dockerfileの作成
Dockerfile
FROM ros:noetic
# install ros package
RUN apt-get update \
&& apt-get install -y \
ros-${ROS_DISTRO}-xacro \
python3-catkin-tools
- Dockerコンテナの起動
docker build . -t ros1-urdf-exporter
docker run --rm -v ./data:/app/src -it ros1-urdf-exporter bash
- コンテナの中で .urdf を生成
source /opt/ros/noetic/setup.bash
# パッケージのビルド
mkdir install logs && catkin config --install
catkin build --start-with xxx_description
source ./install/setup.bash
# パッケージがインストールされているか確認
rospack list | grep xxx_description
# urdf生成に必要なマクロを全てコピー
cp -r ./src/xxx_description/urdf ./install/share/xxx_description
# .xacro から .urdf に変換
rosrun xacro xacro ./install/share/xxx_description/urdf/robot_urdf.xacro > xxx.urdf
(任意)MuJoCoシミュレータ利用時のパス指定
xxx.urdf
<robot name="xxx">
<mujoco>
<compiler meshdir="xxx_description/meshes" />
</mujoco>
...
</robot>
このスクラップは12日前にクローズされました