ROS URDF建模,xacro进阶建模,无人驾驶机器人基础建模参照案例,

目录

 

URDF

1.什么是URDF

2.link与joint标签

3.robot标签

4.建模实例

xacro

1.什么是xacro

2.如何使用xacro

3.常量定义与使用

4.数学计算

5.宏定义

6.文件包含

7.xacro转urdf


 

URDF​​​​​​​

1.什么是URDF

URDF(Unified Robot Description Format),统一机器人描述格式,ROS中非常重要的机器人模型描述格式,将真实世界的机器人映射到计算机上。一般使用XML格式来进行表述,ROS对URDF文件的支持非常友好,提供C++解析器,在构建(catkin_make) 项目时完成描述解析。

 

2.link与joint标签

link官方文档:http://wiki.ros.org/urdf/XML/link

用于描述机器人某个刚体部分的外观和物理属性,可以描述其尺寸(size),颜色(color),形状(shape),关系矩阵(inertial matrix),碰撞参数(collision properties)等

参考格式为:


        
            
            
                
            
            
                
            
        
    

:描述机器人的link部分的外观参数,其中用于描述其相对于世界坐标系的位姿,xyz的000代表在世界坐标系的中心,rpy描述为欧拉坐标描述,000代表翻滚角,俯仰角,偏航角都为0。

描述几何形状,cylinder代表为圆柱类型

描述颜色

 

joint官方文档:http://wiki.ros.org/urdf/XML/joint

用于描述机器人关节的运动学和动力学属性,包括关节运动的位置和速度现在,根据关节运动形式,可分为6中类型:

  • revolute - 旋转关节,其极限位置由 upper and lower limits 决定
  • continuous - 旋转关节,无位置限制
  • prismatic - 滑动关节,其极限位置由 upper and lower limits 决定
  • fixed - 虚拟关节,关节不可运动
  • floating - 六自由度关节
  • planar - 平面关节

参考格式:

 
        
        
        
        
    

上面描述了left_wheel_likn对于base_link的joint转换,类型是continuous,旋转关节,旋转关节多用于滚轮或机器臂等非静态刚体,origin描述了相对于base_link的位姿关系,在y轴(即左方)0.19米,z轴(高度)上下降0.05米 ,axis描述了依照什么轴旋转,这里为y轴,标为1。(根据这一段描述很容易看出这是在描述一个轮子的urdf)。

更多的joint参数有:

:关节的参考位置,用来校准关节绝对位置

:描述关节的物理属性,如阻尼值,物理静态摩擦力

:描述运动的极限值,如上下限制,速度限制,力矩限制

:描述关节与已有关节的关系

:描述安全控制器参数

 

参考图形

ROS URDF建模,xacro进阶建模,无人驾驶机器人基础建模参照案例,_第1张图片

 

 

 

 

 

3.robot标签

位于整个urdf的最外层,在其中有一系列标签




  
    ....     
  

  
     ......
  

 
    ....     
 

 
     ......
 
  

 

 

4.建模实例

1)创建工作空间以及功能包

$ source /opt/ros/kinetic/setup.bash
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace
$ cd ~/catkin_ws
$ catkin_make 
$ cd src
$ catkin_create_pkg mbot_description urdf xarco

 

2)创建luach启动文件

$ cd mbot_description
$ mkdir launch config urdf
$ cd launch && touch display_mbot_base_urdf.launch

	

	
	
	
	
	
	
	
	
	
	
	

使用use_gui需安装 apt install ros-kinetic-joint-state-publisher-gui,robot_state_publisher发布车体状态

joint_state_publisher发布关节状态

 

3)创建urdf文件

创建就base_link车体,创建左轮右轮left_wheel_link,right_wheel_link,创建关节信息,特别注意左右轮的物理位置。我们的车体是一个半径为0.2米,高0.16米的圆柱,车轮为半径0.06,高0.025的圆柱,但是他的翻滚角,即r周1.5707即90°,关节joint定义其在和处连接,0 0.19 -0.05,即x轴0方向,y轴(左方)0.19米(车体为0.2,有一部分陷入车体),z轴下方0.05米,这是一个相对合理的位置。




    
        
            
            
                
            
            
                
            
        
    


    
        
            
            
                
            
            
                
            
        
    
 
    
        
        
        
        
    

 

    
        
            
            
                
            
            
                
            
        
    

  
        
        
        
        
    


 

4)启动

$ roslaunch mbot_description display_mbot_base_urdf.launch

可以看到车体与左右轮的样子在rviz上呈现出来,由于我们的节点joint的type类型为 continuous,所以我们可以拖动joint_state_publisher让轮子旋转

ROS URDF建模,xacro进阶建模,无人驾驶机器人基础建模参照案例,_第2张图片

 

5)改造,增加激光雷达,摄像头等设备 

通常来说,一个完整的无人驾驶机器人是需要激光雷达,摄像头等视觉设备的,而且注意到上面的小车只有两个轮子,这是不满足转弯条件的,我们需要给他添加一个前置万向轮,接下来我们添上。

添加很简单,在urdf下添加如下结点即可

 
        
        
        
        
    

    
        
            
            
                
            
            
                
            
        
    


    
		
			
			
				
			
			
		
    

    
        
        
        
    

roslaunch运行

ROS URDF建模,xacro进阶建模,无人驾驶机器人基础建模参照案例,_第3张图片

 

 

xacro

1.什么是xacro

xacro是在urdf的基础上,新增了宏定义与文件包含的功能,提供常量定义,变量定义,数学计算以及程式判断(条件语句)

2.如何使用xacro

使用xacro的第一步是在catkin_create_pkg时导入,如 catkin_create_pkg mbot_description urdf xarco。若功能包已创建,则在CMakelist.txt文件找到find_package,并添加

find_package(catkin REQUIRED COMPONENTS
  ...
  xacro
)

在package.xml中添加:

 xacro
  xacro


3.常量定义与使用

常量的定义格式为: 

如下定义pi,车半径与长度,左右轮半径与长度


    
    

    
    
    
    

     
    

常量的使用也很简单,格式为:${name}

 

4.数学计算

xacro同样提供数学运算,所有的xacro要包含在${}中

如(定义前向轮的坐标系信息,在z轴上等于车体高度的一半加上前向轮的半径也就是让前向轮附着在车体前方,因为在z轴下方所以取负):

 

xacro仅支持加减乘除取余等基础运算

 

5.宏定义

xacro中的宏定义指的是定义一个基础模板,写法同urdf,可任意添加变量从而在调用宏时做动态赋值,不太好理解的话看下面实例。

 在下面这段定义中,除开常量定义外,我添加了两个变量${prefix}与${reflect},为什么这么写,请往下看


        
            
            
            
            
        

        
            
                
                
                    
                
                
            
        
    

我们通过调用宏,为prefix和reflect赋值,左轮为left,右轮为right,注意到reflect分别取到了-1和1,这在宏定义中有描述

 还有一点要注意的是,我们在调用宏时标签名使用的是宏定义的name,上述为wheel所以使用wheel标签

 

6.文件包含

xacro同样提供文件包含功能,想想看,把一整套urdf写在一个文件中好,还是按照功能单独写,最后组装成一个urdf好。答案当然是后者,这样更加有利于查看与维护。

xacro中的文件包含也非常简单,格式为




    
    
    


为被调用xacro中的urdf片段,要求在被调用xacro中创建,如


        
            ...
        

        
           ...
        
        
    

 

7.xacro转urdf

xacro文件是不能被直接使用的,需要转urdf,格式为:

rosrun xacro xacro.py 文件名.xacro > 文件名.urdf

 

xacro同样也支持在launch文件中动态转换,如:

你可能感兴趣的:(ROS)