ROS入门(六)——仿真机器人二(Xacro+Rviz+Arbotix小车运动)

所用的学习链接:

【奥特学园】ROS机器人入门课程《ROS理论与实践》零基础教程P252-270

【以上视频笔记见http://www.autolabor.com.cn/book/ROSTutorials/】

前文参考ROS入门(五)——仿真机器人一(URDF+Rviz)

一、介绍

1.Xacro作用

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

对于一个机器人,我们往往会有多个相类似的组件,例如车子的左轮和右轮,直接编写URDF文件会导致代码量重复,因此我们需要Xacro来起到一种函数封装的作用。在Xacro中,一些参数可以设置为定量和变量,在创建时传入变量,可以实现相似组件的批量生成。

它也可以实现变量计算和求解,避免一些运算中的人力劳动。

2.目标

1.创建底座和车轮的xacro文件
2.编写摄像头和雷达的 xacro 文件
3.编写一个组合文件,组合底盘、摄像头与雷达
4.通过 launch 文件启动 Rviz 并显示模型

3.Xacro语法

(1)属性

  • 定义属性

即定义一些常量和数值,如小车高度、离地距离,在本次实操中数值固定。例如要定义PI=3.1415927

  •  属性调用
${属性名称}
  • 算术运算
${数学表达式}

 (2)宏

  • 宏定义

即算法中的函数,可以对相同结构和属性进行封装.


 
    .....
  •  宏调用

调用创建好的宏,可以传入一批参数,和宏中定义的参数统一。

(3)计算样例

 实现1+6=7的宏定义和宏调用


    
    
        
    
    
    

(4)组合样例

在完成单独组件的xacro文件编写后,我们会希望将更多组件组合在一起,拼接成一个完整的模型,则需要新生成一个用于组合的xacro文件,运行launch时直接调用该文件。


      
      
      
      ....

二、分别创建车体、摄像头和雷达

1.创建底座和车轮(车体)

在之前文章中生成的xacro文件夹中,我们创建一个表示车体的xacro文件【t1_car.xacro】




    
    
    
    
        
    
    
     
     
     
     

    
    
        
            
                
            
        
    

    
        
            
                
            
            
            
                
            
        
    

    
        
        
        
    

    
    
     
     
    
    
        
            
                
                    
                
                
                
            
        

        
            
            
            
            
        
    
    
    
    

    
    
     
    
    
        
            
                
                    
                
                
                
            
        
        
        
            
            
            
            
        
    
    
    
    

2.创建摄像头

在之前文章中生成的xacro文件夹中,我们创建一个表示摄像头的xacro文件【t2_camera.xacro】



    
     
     
     
     
     
     

    
    
        
            
                
            
            
            
        
    

    
        
        
        
    

3.创建雷达

在之前文章中生成的xacro文件夹中,我们创建一个表示雷达的xacro文件【t3_laser.xacro】




    
     
     
     
     
     

    
        
            
                
            
            
            
                
            
        
    

    
        
        
        
    


    
     
     
     
     
     

    
    
        
            
                
            
            
            
        
    

    
        
        
        
    

三、组件组合

方法一(不推荐):转换成urdf后组合

在xacro文件夹下打开继承终端,运行。

# rosrun xacro xacro xxx.xacro > xxx.urdf
rosrun xacro xacro t1_car.xacro > t1_xacro_car.urdf

此时将xacro转换为urdf文件,后在launch中调用。调用方式可参考ROS入门(五)——仿真机器人一(URDF+Rviz)

方法二(推荐):新建xacro组合文件

在完成单独组件的xacro文件编写后,我们会希望将更多组件组合在一起,拼接成一个完整的模型,则需要新生成一个用于组合的xacro文件,运行launch时直接调用该文件就可以将所有组件一起显示。

需要组合的xacro:

  • t1_car.xacro   【车体+车轮】
  • t2_camera.xacro  【摄像头】
  • t3_laser.xacro  【雷达】

新建一个t4_123combine.xacro文件,组合各个组件



    
    
    

四、launch调用xacro并运行rviz

1.编辑launch文件

在launch文件夹下新建一个launch文件【t4_xacro.launch】


    
    
    
    
    

    
    
    
 
    
    
    

    
    

2.运行launch文件

①ctrl+shift+b编译

②打开新终端1

roscore

③打开新终端2

roslaunch urdf_rviz t4_xacro.launch

正常显示

ROS入门(六)——仿真机器人二(Xacro+Rviz+Arbotix小车运动)_第1张图片

五、小车运动(Arbotix)

1.安装Arbotix

下载源码

git clone https://github.com/vanadiumlabs/arbotix_ros.git

将下载好的文件夹复制到   工作空间/src  下

2.配置

(1)控制文件

src/config 目录下新建一个文件 control.yaml

# 该文件是控制器配置,一个机器人模型可能有多个控制器,比如: 底盘、机械臂、夹持器(机械手)....
# 因此,根 name 是 controller
controllers: {
   # 单控制器设置
   base_controller: {
          #类型: 差速控制器
       type: diff_controller,
       #参考坐标
       base_frame_id: base_footprint, 
       #两个轮子之间的间距
       base_width: 0.2,
       #控制频率
       ticks_meter: 2000, 
       #PID控制参数,使机器人车轮快速达到预期速度
       Kp: 12, 
       Kd: 12, 
       Ki: 0, 
       Ko: 50, 
       #加速限制
       accel_limit: 1.0 
    }
}

(2)launch 文件中配置 arbotix 节点

在launch文件夹中新建一个 t5_arbotix.launch 文件,文件内容:


    
    
    
    
    

    
    
    
 
    
    
    

    
    
        
        
        
   
  • 调用了 arbotix_python 功能包下的 arbotix_driver 节点
  • arbotix 驱动机器人运行时,需要获取机器人信息,可以通过 file 加载配置文件
  • 在仿真环境下,需要配置 sim 为 true

3.启动

1.运行launch,打开rviz

roslaunch urdf_rviz t5_arbotix.launch

2.设置Fixed name为odom

3.Add添加odometry

4.设置odometry的Topic为/odom(展示运动轨迹)

ROS入门(六)——仿真机器人二(Xacro+Rviz+Arbotix小车运动)_第2张图片

5.检验

打开一个终端,输入

rostopic list

发现有一个/cmd_vel,说明发布 cmd_vel 话题消息控制小车运动了

ROS入门(六)——仿真机器人二(Xacro+Rviz+Arbotix小车运动)_第3张图片

6.运动起来

通过自定义线速度角速度,使小车自动运动

rostopic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.2, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.5}}'

ROS入门(六)——仿真机器人二(Xacro+Rviz+Arbotix小车运动)_第4张图片

 ROS入门(六)——仿真机器人二(Xacro+Rviz+Arbotix小车运动)_第5张图片

你可能感兴趣的:(ROS入门,xacro,urdf,ros,rviz,arbotix)