Closed6

Mac で .xacro から .urdf を生成する

Nishizaka NaotoNishizaka Naoto

このライブラリを使ってFusion360から出力したCADモデルは .xacro 形式になっています。
https://github.com/SpaceMaster85/fusion2urdf

MuJoCoでモデルをインポートしたかったのですが .xacro は対応しておらず .urdf に変換が必要でした。

xacro コマンドで.urdfは生成できそうですが、Macでサクッとインストールする方法が見つからず。
ROSのDockerコンテナを立ち上げ、その中でコマンドを実行しました。

Nishizaka NaotoNishizaka Naoto

.urdfと.xacroはどちらもXMLベースだけど、そもそも2つはどんな関係性?

xacroはURDFファイルの生成を簡便にするためのツールであり、実際にロボットモデルをロードする際には、xacroファイルが処理されて最終的にURDF形式のファイルが生成されます。つまり、xacroファイルはURDFファイルを出力するためのテンプレートのような役割を果たしており、ユーザーがxacroファイルで記述したモデルが、URDF形式として解釈されてロボットシミュレーションや制御に使用されることになります。

Nishizaka NaotoNishizaka Naoto

事前準備

変換するデータとDockerfileを用意します。

.
├── data/
│   └── xxx_discription/
│       ├── CMakeLists.txt
│       ├── launch/
│       ├── meshes/
│       ├── package.xml
│       └── urdf/
└── Dockerfile
Nishizaka NaotoNishizaka Naoto

変換方法(ROS2 w/ colcon)

  1. Dockerfileの作成
Dockerfile
FROM ros:jazzy

# install ros package
RUN apt-get update \
  && apt-get install -y \
  ros-${ROS_DISTRO}-xacro
  1. Dockerコンテナの起動
docker build . -t ros2-urdf-exporter
docker run --rm -v ./data:/app -it ros2-urdf-exporter bash
  1. コンテナの中で .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
Nishizaka NaotoNishizaka Naoto

変換方法(ROS1 w/ catkin)

  1. Dockerfileの作成
Dockerfile
FROM ros:noetic

# install ros package
RUN apt-get update \
  && apt-get install -y \
  ros-${ROS_DISTRO}-xacro \
  python3-catkin-tools
  1. Dockerコンテナの起動
docker build . -t ros1-urdf-exporter
docker run --rm -v ./data:/app/src -it ros1-urdf-exporter bash
  1. コンテナの中で .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
Nishizaka NaotoNishizaka Naoto

(任意)MuJoCoシミュレータ利用時のパス指定

xxx.urdf
<robot name="xxx">
  <mujoco>
    <compiler meshdir="xxx_description/meshes" />
  </mujoco>
 ...
</robot>
このスクラップは12日前にクローズされました