ROS xacro URDF优化(十七)

目录

简介 

Xacro_快速体验

Xacro文件编写

具体框架 理解

Xacro文件转换成 urdf 文件

Xacro_语法详解

 

命名空间声明 

 

 属性与算数运算

属性定义

 

 宏

 宏定义

宏调用

文件包含 

Xacro_完整使用流程示例 

 编写 Xacro 文件

 集成launch文件

 方式1:

方式2

 Xacro_实操

实现流程:

摄像头和雷达 Xacro 文件实现 

摄像头 

雷达 xacro 文件:

组合底盘摄像头与雷达的 xacro 文件 

launch 文件 

 运行


简介 

前面 URDF 文件构建机器人模型的过程中,存在若干问题。

问题1:在设计关节的位置时,需要按照一定的公式计算,公式是固定的,但是在 URDF 中依赖于人工计算,存在不便,容易计算失误,且当某些参数发生改变时,还需要重新计算。

问题2:URDF 中的部分内容是高度重复的,驱动轮与支撑轮的设计实现,不同轮子只是部分参数不同,形状、颜色、翻转量都是一致的,在实际应用中,构建复杂的机器人模型时,更是易于出现高度重复的设计,按照一般的编程涉及到重复代码应该考虑封装。

......

如果在编程语言中,可以通过变量结合函数直接解决上述问题,在 ROS 中,已经给出了类似编程的优化方案,称之为:Xacro


概念

Xacro 是 XML Macros 的缩写,Xacro 是一种 XML 宏语言,是可编程的 XML

原理

Xacro 可以声明变量,可以通过数学运算求解,使用流程控制控制执行顺序,还可以通过类似函数的实现,封装固定的逻辑,将逻辑中需要的可变的数据以参数的方式暴露出去,从而提高代码复用率以及程序的安全性。

作用

较之于纯粹的 URDF 实现,可以编写更安全、精简、易读性更强的机器人模型文件,且可以提高编写效率。

另请参考:

  • xacro - ROS Wiki

Xacro_快速体验

目的:简单了解 xacro 的基本语法。

需求描述:

使用xacro优化上一节案例中驱动轮实现,需要使用变量封装底盘的半径、高度,使用数学公式动态计算底盘的关节点坐标,

使用 Xacro 宏封装轮子重复的代码并调用宏创建两个轮子(注意: 在此,演示 Xacro 的基本使用,不必要生成合法的 URDF )。

Xacro文件编写

新建文件

 ROS xacro URDF优化(十七)_第1张图片

编写 Xacro 文件,以变量的方式封装属性(常量半径、高度、车轮半径...),以函数的方式封装重复实现(车轮的添加)。

 复制以下代码


    
    
    
    
    
    

    
    
        
            
                
                    
                

                

                
                    
                
            
        

        
        
            
            
            
            
            
        

    
    
    

上节案例问题:

1.代码复用== Xacro宏(函数)

ROS xacro URDF优化(十七)_第2张图片

这是左右两个轮子共用的参数 

2.参数设计== Xacro变量

 3.调用语法

    
    

具体框架 理解

ROS xacro URDF优化(十七)_第3张图片

 所以实际上就是只写一个轮子的函数并且封装

然后调用两次传入对应不同的参数

就是左右两个轮子了

宏的理解 

ROS xacro URDF优化(十七)_第4张图片

Xacro文件转换成 urdf 文件

命令行进入 xacro文件 所属目录,执行:rosrun xacro xacro xxx.xacro > xxx.urdf

 ROS xacro URDF优化(十七)_第5张图片

会将 xacro 文件解析为 urdf 文件

或是用

rosrun xacro xacro demo01_helloworld.urdf.xacro >demo01_helloworld.urdf

生成对应urdf文件 

 ROS xacro URDF优化(十七)_第6张图片

 ROS xacro URDF优化(十七)_第7张图片

Xacro_语法详解

xacro 提供了可编程接口,类似于计算机语言,包括变量声明调用、函数声明与调用等语法实现。 

命名空间声明 

在使用 xacro 生成 urdf 时,

不声明的话无法运行 

根标签robot中必须包含命名空间声明:xmlns:xacro="http://wiki.ros.org/xacro"

 ROS xacro URDF优化(十七)_第8张图片

 属性与算数运算

用于封装 URDF 中的一些字段,比如: PAI 值,小车的尺寸,轮子半径 ....

ROS xacro URDF优化(十七)_第9张图片

属性定义



ROS xacro URDF优化(十七)_第10张图片

不调用属性的话是不显示结果的

属性调用

${属性名称}

 调用完就可以显示对应结果

算数运算

${数学表达式} 

 ROS xacro URDF优化(十七)_第11张图片

 宏

 类似于函数实现,提高代码复用率,优化代码结构,提高安全性

 宏定义



    .....

    参数调用格式: ${参数名}


ROS xacro URDF优化(十七)_第12张图片

 

    

        


    

 宏定义是不显示的

宏调用



    

 ROS xacro URDF优化(十七)_第13张图片

 只输出了根标签和调用输出部分

文件包含 

 机器人由多部件组成,不同部件可能封装为单独的 xacro 文件,最后再将不同的文件集成,组合为完整机器人,可以使用文件包含实现

文件包含 


      
      
      
      ....

 ROS xacro URDF优化(十七)_第14张图片

 运行

ROS xacro URDF优化(十七)_第15张图片

Xacro_完整使用流程示例 

需求描述:

使用 Xacro 优化 URDF 版的小车底盘模型实现

 编写 Xacro 文件




    
    
    
    
        
    
    
     
     
     
     

    
    
      
        
          
        
      
    

    
      
        
          
        
        
        
          
        
      
    

    
      
      
      
    

    
    
    
    
    
    
      
        
          
            
          
          
          
        
      

      
        
        
        
        
      
    
    
    
    
    
     

    
    
      
        
            
                
            
            
            
        
      

      
          
          
          
          
      
    

    
    


ROS xacro URDF优化(十七)_第16张图片

 实际上就是搭建框架

在框架前封装属性

ROS xacro URDF优化(十七)_第17张图片

对比:

直接写urdf要写两个轮子

xcaro就写一个轮子的框架(调用两次即可)

轮子的框架就是函数的具体内容

然后分成全局变量和局部变量(底盘相关的就是全局、轮子相关的就是局部) 

 ROS xacro URDF优化(十七)_第18张图片

 集成launch文件

 方式1:

先将 xacro 文件转换出 urdf 文件,然后集成

先将 xacro 文件解析成 urdf 文件:rosrun xacro xacro xxx.xacro > xxx.urdf然后再按照之前的集成方式直接整合 launch 文件,内容示例: 


    1.在参数服务器中载入urdf
    
    2.启动rviz
    
    3.添加关节状态发布节点
    
    4.添加机器人状态发布节点
    
    5.关节运动控制节点
    


转换文件 

ROS xacro URDF优化(十七)_第19张图片

 运行

ROS xacro URDF优化(十七)_第20张图片

方式2

在 launch 文件中直接加载 xacro(建议使用)


    

    
    
    
    



ROS xacro URDF优化(十七)_第21张图片

 运行

ROS xacro URDF优化(十七)_第22张图片

 成功

 Xacro_实操

需求描述:

在前面小车底盘基础之上,添加摄像头和雷达传感器。

实现分析:

机器人模型由多部件组成,可以将不同组件设置进单独文件,最终通过文件包含实现组件的拼装。

实现流程:

  1. 首先编写摄像头和雷达的 xacro 文件

  2. 然后再编写一个组合文件,组合底盘、摄像头与雷达

  3. 最后,通过 launch 文件启动 Rviz 并显示模型

新建文件

 ROS xacro URDF优化(十七)_第23张图片

摄像头和雷达 Xacro 文件实现 

摄像头 

复制以下代码



    
     
     
     
     
     
     

    
    
        
            
                
            
            
            
        
    

    
        
        
        
    

ROS xacro URDF优化(十七)_第24张图片

 因为只要一个摄像头无需复用,所以不需要调用宏

雷达 xacro 文件:




    
     
     
     
     
     

    
        
            
                
            
            
            
                
            
        
    

    
        
        
        
    


    
     
     
     
     
     

    
    
        
            
                
            
            
            
        
    

    
        
        
        
    

 一个雷达和一个支架所以无需复用

所以不用宏

组合底盘摄像头与雷达的 xacro 文件 



    
    
    

ROS xacro URDF优化(十七)_第25张图片

launch 文件 


    

    
    
    
    


ROS xacro URDF优化(十七)_第26张图片

 运行

ROS xacro URDF优化(十七)_第27张图片

 ROS xacro URDF优化(十七)_第28张图片

你可能感兴趣的:(#,ros,ros,ubuntu,linux)