機器人系統仿真(七)——xacro語法詳解


參考視頻:【奧特學園】ROS機器人入門課程《ROS理論與實踐》零基礎教程_嗶哩嗶哩_bilibili

參考文檔:http://www.autolabor.com.cn/book/ROSTutorials/

xacro 提供了可編程接口,類似於計算機語言,包括變量聲明調用、函數聲明與調用等語法實現。在使用 xacro 生成 urdf 時,根標簽robot中必須包含命名空間聲明:xmlns:xacro="http://wiki.ros.org/xacro"

1.屬性與算數運算

用於封裝 URDF 中的一些字段,比如: PAI 值,小車的尺寸,輪子半徑 ....

屬性定義

<xacro:property name="xxxx" value="yyyy" />

屬性調用

${屬性名稱}

算數運算

${數學表達式}

例如:新建一個 demo02_field.urdf.xacro ,編寫如下代碼:

<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro" >
    <!--1.屬性定義-->
    <xacro:property name="PI" value="3.1415927" />
    <xacro:property name="radius" value="0.03" />

    <!--2.屬性調用-->
    <myUsePropertyXxx name="${PI}" />
    <myUsePropertyXxx name="${radius}" />
    <!--3.算術運算-->
    <myUsePropertyYyy result="${PI / 2}" />
    <myUsePropertyYyy result="${radius * 2}" />

    

</robot>

運行:

rosrun xacro xacro demo02_field.urdf.xacro 

輸出:

cys@ubuntu:~/demo05_ws/src/urdf01_rviz/urdf/xacro$ rosrun xacro xacro demo02_field.urdf.xacro 
<?xml version="1.0" ?>
<!-- =================================================================================== -->
<!-- |    This document was autogenerated by xacro from demo02_field.urdf.xacro        | -->
<!-- |    EDITING THIS FILE BY HAND IS NOT RECOMMENDED                                 | -->
<!-- =================================================================================== -->
<robot name="mycar">
  <!--2.屬性調用-->
  <myUsePropertyXxx name="3.1415927"/>
  <myUsePropertyXxx name="0.03"/>
  <!--3.算術運算-->
  <myUsePropertyYyy result="1.57079635"/>
  <myUsePropertyYyy result="0.06"/>
</robot>

2.宏

類似於函數實現,提高代碼復用率,優化代碼結構,提高安全性

宏定義

<xacro:macro name="宏名稱" params="參數列表(多參數之間使用空格分隔)">

    .....

    參數調用格式: ${參數名}

</xacro:macro>

宏調用

<xacro:宏名稱 參數1=xxx 參數2=xxx/>

例子:創建求和的宏並調用

<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro" >
    <!--1.宏的定義-->
    <xacro:macro name="getSum" params="num1 num2">
        <result value="${num1 + num2}" />
    </xacro:macro>
    <!--2.宏調用-->
    <xacro:getSum num1="1" num2="2" />
</robot>

輸出:

cys@ubuntu:~/demo05_ws/src/urdf01_rviz/urdf/xacro$ rosrun xacro xacro demo03_macro.urdf.xacro 
<?xml version="1.0" ?>
<!-- =================================================================================== -->
<!-- |    This document was autogenerated by xacro from demo03_macro.urdf.xacro        | -->
<!-- |    EDITING THIS FILE BY HAND IS NOT RECOMMENDED                                 | -->
<!-- =================================================================================== -->
<robot name="mycar">
  <result value="3"/>
</robot>

 

3.文件包含

機器人由多部件組成,不同部件可能封裝為單獨的 xacro 文件,最后再將不同的文件集成,組合為完整機器人,可以使用文件包含實現

文件包含

<robot name="xxx" xmlns:xacro="http://wiki.ros.org/xacro">
      <xacro:include filename="my_base.xacro" />
      <xacro:include filename="my_camera.xacro" />
      <xacro:include filename="my_laser.xacro" />
      ....
</robot>

例子:包含上述兩個例子的xacro

<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro" >
    <!--1.演示文檔包含-->
    <xacro:include filename="demo02_field.urdf.xacro" />
    <xacro:include filename="demo03_macro.urdf.xacro" />
</robot>
    

運行輸出:

cys@ubuntu:~/demo05_ws/src/urdf01_rviz/urdf/xacro$ rosrun xacro xacro demo04_sum.urdf.xacro 
<?xml version="1.0" ?>
<!-- =================================================================================== -->
<!-- |    This document was autogenerated by xacro from demo04_sum.urdf.xacro          | -->
<!-- |    EDITING THIS FILE BY HAND IS NOT RECOMMENDED                                 | -->
<!-- =================================================================================== -->
<robot name="mycar">
  <!--2.屬性調用-->
  <myUsePropertyXxx name="3.1415927"/>
  <myUsePropertyXxx name="0.03"/>
  <!--3.算術運算-->
  <myUsePropertyYyy result="1.57079635"/>
  <myUsePropertyYyy result="0.06"/>
  <result value="3"/>
</robot>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM