welcom ! Handel home

2025年2月5日 星期三

(兩輪小車範例)分析 macros.xacro 和 materials.xacro

 這兩個 Xacro (XML Macro) 文件分別定義了:

macros.xacro:包含機器人模型的 慣性計算巨集,

                             可用來計算不同形狀(圓柱、長方體、球體)的慣性張量。

materials.xacro:定義了一些 材質顏色,用於機器人模型的視覺外觀設定。


1 macros.xacro(巨集函數)

這個文件主要包含用來 計算物理屬性的巨集,適用於機器人不同形狀的零件。


#主要功能

定義不同形狀的慣性 (inertia) 計算方式

使用 Xacro 巨集 (<macro>) 來避免重複編寫慣性張量


#內容解析

<?xml version="1.0"?>

<robot>

  <!-- 圓柱形慣性計算 -->

  <macro name="cylinder_inertia" params="m r h">

<inertia  

  ixx="${m*(3*r*r+h*h)/12}" ixy="0" ixz="0"

  iyy="${m*(3*r*r+h*h)/12}" iyz="0"

  izz="${m*r*r/2}"

/>

  </macro>

  <!-- 長方體慣性計算 -->

  <macro name="box_inertia" params="m x y z">

<inertia  

  ixx="${m*(y*y+z*z)/12}" ixy="0" ixz="0"

  iyy="${m*(x*x+z*z)/12}" iyz="0"

  izz="${m*(x*x+y*y)/12}"

/>

  </macro>

  <!-- 球形慣性計算 -->

  <macro name="sphere_inertia" params="m r">

<inertia  

  ixx="${2*m*r*r/5}" ixy="0" ixz="0"

  iyy="${2*m*r*r/5}" iyz="0"

  izz="${2*m*r*r/5}"

/>

  </macro>


</robot>


#macros.xacro 的作用 避免重複計算慣性張量

直接使用 <xacro:cylinder_inertia>、<xacro:box_inertia>、<xacro:sphere_inertia>,不用每次手動計算。

計算不同形狀的慣性


cylinder_inertia (m, r, h) → 計算圓柱的慣性。

box_inertia (m, x, y, z) → 計算長方體的慣性。

sphere_inertia (m, r) → 計算球體的慣性。


#使用方式

假設有一個長方體底盤,使用巨集來計算慣性:

<link name="chassis">

  <inertial>

<mass value="10.0"/>

<xacro:box_inertia m="10.0" x="0.5" y="0.3" z="0.1"/>

  </inertial>

</link>

這樣就不需要手動寫 <inertia>,提高可讀性與可重用性。



2materials.xacro(機器人材質)

這個文件負責 定義機器人的材質顏色,主要透過 <material> 來指定不同顏色。


#內容解析

<?xml version="1.0"?>

<robot>


  <!-- 定義黑色 -->

  <material name="black">

<color rgba="0.0 0.0 0.0 1.0"/>

  </material>


  <!-- 定義藍色 -->

  <material name="blue">

<color rgba="0.0 0.0 0.8 1.0"/>

  </material>


  <!-- 定義綠色 -->

  <material name="green">

<color rgba="0.0 0.8 0.0 1.0"/>

  </material>


  <!-- 定義灰色 -->

  <material name="grey">

<color rgba="0.2 0.2 0.2 1.0"/>

  </material>


  <!-- 定義橙色 -->

  <material name="orange">

<color rgba="${255/255} ${108/255} ${10/255} 1.0"/>

  </material>


  <!-- 定義棕色 -->

  <material name="brown">

<color rgba="${222/255} ${207/255} ${160/255} 1.0"/>

  </material>


</robot>

#materials.xacro 的作用

統一機器人顏色管理


讓所有機器人的材質都來自 materials.xacro,方便修改顏色。

提高可讀性


透過 <material name="xxx"> 讓 URDF 變得更簡潔。

#使用方式

在 myrobot.xacro 中,可以這樣引用材質:

<visual>

  <geometry>

<box size="0.5 0.3 0.1"/>

  </geometry>

  <material name="blue"/>

</visual>

這樣 chassis 就會變成藍色,而不需要手動寫 RGB 值。


#總結

組件 作用 主要內容

macros.xacro 計算機器人不同形狀的 慣性 提供 cylinder_inertia、box_inertia、sphere_inertia 巨集

materials.xacro 定義機器人的材質顏色 提供 black、blue、green、grey、orange、brown 等材質

這兩個 Xacro 文件 幫助簡化機器人模型的定義,提高可讀性與可重用性。


#你可以這樣做

若要新增新的材質 → 在 materials.xacro 裡加一個 <material>。

若要新增新的幾何形狀 → 在 macros.xacro 裡加一個 <macro>。

這樣未來修改顏色或物理屬性時,只需要改一個地方,不需要到處修改 URDF 文件。

沒有留言: