zoukankan      html  css  js  c++  java
  • 机器人系统仿真(七)——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>

     
  • 相关阅读:
    ES 分组排序java实现
    java多线程中的死锁、活锁、饥饿、无锁都是什么鬼?
    Java 虚拟机对锁优化所做的努力
    Docker 核心概念、安装、端口映射及常用操作命令,详细到令人发指。
    20条最最常用的Linux命令讲解
    Linux查看系统配置常用命令
    全面认识Docker和基本指令
    25个深度学习开源数据集
    Docker 简单运用
    一小时学会C# 6
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/15044043.html
Copyright © 2011-2022 走看看