2025年8月19日 星期二

ROS 2 & URDF 介紹

 

一、ROS 2 介紹

ROS 2 (Robot Operating System 2) 是 ROS 的下一代版本,專門為機器人應用提供:

  • 通訊中介:基於 DDS (Data Distribution Service),支援多平台即時分散式通訊。

  • 跨平台:支援 Linux、Windows、macOS,也能搭配 micro-ROS 在微控制器上運行。

  • 模組化設計:機器人系統可拆分成多個 node(節點),透過 topic/service/action 進行通訊。

  • 常見應用

    • 感測器整合(IMU、LiDAR、Camera)

    • 機器人模擬(Gazebo, Ignition)

    • 移動規劃與導航(Nav2, MoveIt2)

    • 自動化控制(differential drive, manipulator arm)

在 ROS 2 中,機器人的描述通常使用 URDFXacro 檔案來定義機械結構。


二、URDF 介紹

URDF (Unified Robot Description Format) 是一種 XML 格式,用來描述機器人模型,包括:

  1. Link(連桿)

    • 機器人的剛體部分,例如底盤、輪子、手臂。

    • 可以定義質量 (mass)、慣性 (inertia)、外觀 (visual)、碰撞模型 (collision)。

  2. Joint(關節)

    • 定義連接兩個 link 的方式。

    • 類型:revolute(轉動)、prismatic(直線滑動)、continuous(無限制旋轉)、fixed(固定)。

  3. Sensor(感測器)

    • 可以在 URDF 裡嵌入 plugin(例如 camera、LiDAR)。

範例(簡化版四輪車底盤與輪子):

<robot name="four_wheel_bot"> <!-- Base link --> <link name="base_link"> <visual> <geometry> <box size="0.5 0.3 0.1"/> </geometry> <material name="blue"/> </visual> </link> <!-- Left wheel --> <link name="left_wheel"/> <joint name="left_wheel_joint" type="continuous"> <parent link="base_link"/> <child link="left_wheel"/> <origin xyz="0.2 0.15 0"/> <axis xyz="0 1 0"/> </joint> </robot>

三、Xacro 介紹

Xacro (XML Macros) 是一種擴展 URDF 的語法,讓 URDF 更靈活:

  • 可重複使用:用 <xacro:macro> 定義模板。

  • 參數化:用 <xacro:property> 定義可調整的參數。

  • 計算能力:可以用數學運算(*, /, +, -)。

Xacro 檔會在執行時轉換成標準 URDF。

範例(輪子模板):

<xacro:macro name="wheel" params="name x y"> <link name="${name}_wheel"> <visual> <geometry> <cylinder length="0.05" radius="0.1"/> </geometry> <material name="black"/> </visual> </link> <joint name="${name}_joint" type="continuous"> <parent link="base_link"/> <child link="${name}_wheel"/> <origin xyz="${x} ${y} 0"/> <axis xyz="0 1 0"/> </joint> </xacro:macro> <robot name="car" xmlns:xacro="http://ros.org/wiki/xacro"> <link name="base_link"/> <xacro:wheel name="left" x="0.2" y="0.15"/> <xacro:wheel name="right" x="0.2" y="-0.15"/> </robot>

四、ROS 2 中的使用方式

  1. Xacro 轉 URDF

    ros2 run xacro xacro my_robot.xacro -o my_robot.urdf
  2. 啟動 robot_state_publisher(讓 RViz/Gazebo 讀取模型)

    ros2 launch my_robot_description display.launch.py
  3. 整合 Gazebo 模擬

    • 在 URDF/Xacro 中加上 <gazebo> plugin。

    • ros2 launch 啟動 Gazebo 與模型。


要不要我幫你整理一張 URDF vs Xacro 功能比較表(表格形式),讓你一眼就看懂它們的差異?

沒有留言:

張貼留言