2025年6月26日 星期四

ROS2 URDF foramt check_urdf 工具

 要檢查 URDF 是否正確、可以被 ROS 2 使用,有以下幾個工具與方法,你可以根據目前使用的是 .urdf.xacro 選擇適合的方式:


✅ 1. 使用 check_urdf 工具(最直接)

適用於 .urdf 檔案,這是 ROS 的標準工具,可以檢查語法錯誤與顯示結構。

bash
check_urdf roscar.urdf

輸出應該像這樣:

css
robot name is: roscar ---------- Successfully Parsed XML --------------- root Link: base_link has 1 child(ren) child(1): wheel_left ...

若有錯誤,會明確指出哪一行錯。

🔧 如果 check_urdf 找不到,先安裝:

bash
sudo apt install liburdfdom-tools

✅ 2. 如果是 .xacro 檔,先轉換再檢查

bash
xacro roscar.xacro > roscar.urdf check_urdf roscar.urdf

或一行完成:

bash
xacro roscar.xacro | check_urdf

🔧 如果 xacro 沒安裝:

bash
sudo apt install ros-humble-xacro

✅ 3. 視覺檢查(用 RViz 顯示)

bash
ros2 run robot_state_publisher robot_state_publisher \ --ros-args -p robot_description:="$(xacro path/to/roscar.xacro)"

然後開啟 RViz:

bash
ros2 run rviz2 rviz2

並加一個 "RobotModel" 顯示項目 → 能看到機器人模型代表沒問題。


✅ 4. 直接用 Python 檢查是否可 parse

python
import xml.etree.ElementTree as ET with open("roscar.urdf") as f: data = f.read() ET.fromstring(data)

如果失敗會丟出 XML parse 的錯誤訊息,例如:

pgsql
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 42, column 15

🧩 常見 URDF/XACRO 問題

問題原因修正方式
Unicode strings with encoding declaration are not supported開頭有 <?xml version=...?>刪掉第一行
No root link found沒有 <robot name=""> 最外層確認有正確 <robot> 包住
joint/link 結構不完整缺少 parentchild 屬性確認 joint 格式完整
相對路徑失效URDF 引用 mesh 沒寫完整路徑使用 package://roscar4wheel/... 這種方式
RViz 顯示不出模型缺少 robot_state_publisher 或 URDF 錯誤確認啟動時已提供 robot_description

🚀 小結

  • .urdfcheck_urdf

  • .xacroxacro your.xacro | check_urdf

  • ✅ 檢查 mesh 路徑用 package://your_pkg/...

  • ✅ RViz 可視化檢查結構


🔧 如果你願意貼出你的 roscar.urdfroscar.xacro 的前幾十行(或整份),

我可以幫你進行更深入的結構與語法分析。是否需要我幫你逐步 debug?



沒有留言:

張貼留言