0基础在ROS系统中实现RRT算法(四)URDF集成gazebo并搭建gazebo仿真环境

小白一枚,毕设突发奇想加入了ROS的内容,不知道自己还能不能毕业。以下均为通过看视频,翻博客等整理而成的笔记,并非我的原创。可能会出现一些报错的修改或者简单的代码是我自己做的。哈哈。

Gazebo是一款3D动态模拟器,用于显示机器人模型并创建仿真环境,能够在复杂的室内和室外环境中准确有效地模拟机器人。与游戏引擎提供高保真度的视觉模拟类似,Gazebo提供高保真度的物理模拟,其提供一整套传感器模型,以及对用户和程序非常友好的交互方式。

这篇主要学习:

  • URDF 与 Gazebo 的基本集成流程;
  • 如果要在 Gazebo 中显示机器人模型,URDF 需要做的一些额外配置;
  • 关于Gazebo仿真环境的搭建。比如建立房子、马路等。

如果 gazebo没有安装,请自行安装:

1.添加源:

sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" 
>
 /etc/apt/sources.list.d/gazebo-stable.list'
wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -

2.安装:

sudo apt update
sudo apt install gazebo11 
sudo apt install libgazebo11-dev

一、URDF与Gazebo基本集成流程与相关设置

URDF 与 Gazebo 集成流程与 Rviz 实现类似,主要步骤如下:

  1. 创建功能包,导入依赖项

  2. 编写 URDF 或 Xacro 文件

  3. 启动 Gazebo 并显示机器人模型

接下来我们以创建盒状机器人显示在gazebo中为例,学习一下URDF集成gazebo。

1.创建功能包

在工作空间的src文件夹下打开终端进行以下操作,新建功能包urdf02_gazebo,并且导入依赖包: urdf、xacro、gazebo_ros、gazebo_ros_control、gazebo_plugins

catkin_create_pkg urdf02_gazebo urdf xacro gazebo_ros gazebo_ros_control gazebo_plugins

0基础在ROS系统中实现RRT算法(四)URDF集成gazebo并搭建gazebo仿真环境_第1张图片

2.编写URDF文件

在urdf02_gazebo文件夹下新建urdf文件夹,在此文件夹下新建demo01_helloworld.urdf:

0基础在ROS系统中实现RRT算法(四)URDF集成gazebo并搭建gazebo仿真环境_第2张图片

 接下来编写urdf文件,完整的文件内容:


    
        
            
                
            
            
            
                
            
        
        
        
            
                
            
            
        
        
            
            
            
        
    
    
        Gazebo/Black
    


接下来对上面的文件内容进行解释:

机器人的可视化部分visual:

盒装机器人,所以几何形状geometry选择为box,它在xyz上的尺寸分别是:0.5 ,0.2,0.1

颜色color为黄色,rgba为0.5 0.3 0,透明度为1

        
            
                
            
            
            
                
            
        

连杆碰撞参数collision:碰撞参数用于检测机器人是否与外界环境发生碰撞。

如果是标准几何体,直接复制visual的geometry和origin即可。

        
            
                
            
            
        

连杆惯性矩阵inertial:小车起步和刹车受到惯性影响,所以要设置一下惯性矩阵。

origin用于设置重心偏移量,如果连杆质量均匀,设置为0 0 0。

mass质量设置为 6 kg

inertial是在不同维度上的坐标值,实际应用时要根据情况进行计算来防止机器人打滑和翻车等,在这里我们先随意设置。

    
        
            
            
            
        

gazebo自己的颜色设置:

    
        Gazebo/Black
    

3.启动Gazebo并显示模型

在/DEMO05_WS/src/urdf02_gazebo目录下新建launch文件夹,在launch文件夹下新建demo01_helloworld.launch

我们要:

  • 将 Urdf 文件的内容加载到参数服务器:调用param标签,name="robot_description",textfile定位到 urdf02_gazebo/urdf/helloworld.urdf
  • 启动 gazebo:gazebo已经内置了launch文件empty_world.launch,是一个空的世界环境,我们在这里包含这个launch文件。
  • 在 gazebo 中显示机器人模型:    在 Gazebo 中加载一个机器人模型,该功能由 gazebo_ros 下的 spawn_model 提供:
        -urdf 加载的是 urdf 文件
        -model car 模型名称是 car
        -param robot_description 从参数 robot_description 中载入模型

launch文件内容:



    

    

    

运行一下launch文件:

milk@milk:~/DEMO05_WS$ roslaunch urdf02_gazebo demo01_helloworld.launch

可以看到gazebo中显示的盒装机器人

0基础在ROS系统中实现RRT算法(四)URDF集成gazebo并搭建gazebo仿真环境_第3张图片

 (不知道为什么我第一次不显示机器人模型,等我放弃了关机之后,再开机启动launch文件就显示出来了……)

二、URDF集成Gazebo实操

需求描述:将之前的机器人模型(xacro版)显示在 gazebo 中

结果演示:

0基础在ROS系统中实现RRT算法(四)URDF集成gazebo并搭建gazebo仿真环境_第4张图片

实现流程:

  1. 需要编写封装惯性矩阵算法的 xacro 文件:我们的车轮、雷达等都要涉及到惯性矩阵的计算。

  2. 为机器人模型中的每一个 link 添加 collision 和 inertial 标签,并且重置颜色属性

  3. 在 launch 文件中启动 gazebo 并添加机器人模型

1.编写封装惯性矩阵算法的 xacro 文件

在/DEMO05_WS/src/urdf02_gazebo/urdf目录下新建用于封装惯性矩阵算法的文件:head.xacro

这个比较复杂,在这里直接复制文件内容:


    
    
        
            
            
        
    

    
        
            
             
        
    

    
       
               
               
       
   

 接下来把之前编写过的小车底盘、雷达、摄像头、汇总文件的xacro文件复制过来:

0基础在ROS系统中实现RRT算法(四)URDF集成gazebo并搭建gazebo仿真环境_第5张图片

 并且在car.urdf.xacro中包含惯性矩阵文件:


    
        

    
    
    

编写launch文件:在/DEMO05_WS/src/urdf02_gazebo/launch目录下新建car.launch



    


    

    

2.复制相关 xacro 文件,并设置 collision inertial 以及 color 等参数

在demo05_car_base.urdf.xacro中

设置底盘相关参数:

连杆:找到连杆相关代码

    
      
        
          
        
        
        
          
        
      
    

添加collision:只要是规则的立方体,collision都和visual中的geometry和origin一样,直接复制。

添加interial:我们前面已经把interial封装成专门的宏。打开head.xacro,由于底盘是圆柱体,我们找到圆柱体的interial宏:cylinder_inertial_matrix

添加颜色

修改完成后的小车主体部分代码如下:


    
      
        
          
        
        
        
          
        
      

      
        
          
        
        
      
  
      
    
    
    
      Gazebo/Yellow
    

保存之后,执行一下代码看一下gazebo中的机器人模型:

milk@milk:~/DEMO05_WS$ source ./devel/setup.bash
milk@milk:~/DEMO05_WS$ roslaunch urdf02_gazebo demo02_car.launch

0基础在ROS系统中实现RRT算法(四)URDF集成gazebo并搭建gazebo仿真环境_第6张图片

 驱动轮:

   
    
    
    
    
      
        
          
            
          
          
          
        
        
            
            
          
                
        
         
      
      
        Gazebo/Red
      

支撑轮

      
        
            
                
            
            
            
        

        
        
                
            
            
        
        
        
      

      
        Gazebo/Black
      

demo05_car_base.urdf.xacro整体代码:



    

    
        
    

     
     
     
         
     

    
    
      
        
          
        
      
    

    
      
        
          
        
        
        
          
        
      

      
        
          
        
        
      
  
      
    

    
      Gazebo/Yellow
    

    
      
      
      
    

    
    
    
    
    
      
        
          
            
          
          
          
        
        
            
            
          
                
        
         
      
      
        Gazebo/Red
      

      
        
        
        
        
      
    
    
    
    
    
    
    
      
        
            
                
            
            
            
        

        
        
                
            
            
        
        
        
      

      
        Gazebo/Black
      

      
          
          
          
          
      
    

    
    


 gazebo:

0基础在ROS系统中实现RRT算法(四)URDF集成gazebo并搭建gazebo仿真环境_第7张图片

 设置摄像头相关参数:demo06_car_camera.urdf.xacro



 
 
 
 



    
            
                    
                             
                    

                    
                                
                    
            
            
                
                             
                    
            
            
    
    
                Gazebo/Blue
    

    
        
        
        
    


设置雷达相关参数:demo07_car_laser.urdf.xacro


	
	
		
	
	
		

	
	
	

	
	
	

	
		
			
				
			
			
				
			
		
		
		
				
			
		
		
	

    
                Gazebo/Gray
    

	
		
		
		
	

	
		
			
				
			
			
				
			
		
		
		
				
			
		
		
	
    
                Gazebo/Black
    

	
		
		
		
	


gazebo:

0基础在ROS系统中实现RRT算法(四)URDF集成gazebo并搭建gazebo仿真环境_第8张图片

三、Gazebo仿真环境搭建

到目前为止,我们已经可以将机器人模型显示在 Gazebo 之中了,但是当前默认情况下,在 Gazebo 中机器人模型是在 empty world 中,并没有类似于房间、家具、道路、树木... 之类的仿真物,如何在 Gazebo 中创建仿真环境呢?

Gazebo 中创建仿真实现方式有两种:

  • 方式1: 直接添加内置组件创建仿真环境

  • 方式2: 手动绘制仿真环境(更为灵活)

也还可以直接下载使用官方或第三方提高的仿真环境插件。

1.创建仿真环境

首先打开新终端,启动roscore

$roscore

然后启动gazebo

$rosrun gazebo_ros gazebo

0基础在ROS系统中实现RRT算法(四)URDF集成gazebo并搭建gazebo仿真环境_第9张图片

 点击上边栏的立方体添加

0基础在ROS系统中实现RRT算法(四)URDF集成gazebo并搭建gazebo仿真环境_第10张图片

 2.自定义仿真环境

启动 gazebo ,打开构建面板,绘制仿真环境

0基础在ROS系统中实现RRT算法(四)URDF集成gazebo并搭建gazebo仿真环境_第11张图片

 0基础在ROS系统中实现RRT算法(四)URDF集成gazebo并搭建gazebo仿真环境_第12张图片

保存构建的环境

点击: 左上角 file ---> Save (保存路径功能包下的: models)

然后 file ---> Exit Building Editor

 保存为 world 文件

可以像方式1一样再添加一些插件,然后保存为 world 文件(保存路径功能包下的: worlds)

3.使用官方提供的插件

 还可以下载官方提供的插件,下载地址:

https://github.com/osrf/gazebo_models

解压后的文件中有大量的模型:

0基础在ROS系统中实现RRT算法(四)URDF集成gazebo并搭建gazebo仿真环境_第13张图片

 这些模型占用空间太大了,我下载后只留下了几个自己需要的模型。

四、启动gazebo并控制机器人运动

1.编写一个单独的 xacro 文件,为机器人模型添加传动装置以及控制器

1.1 为 joint 添加传动装置以及控制器

两轮差速配置



    
    
        
        
            transmission_interface/SimpleTransmission
            
                hardware_interface/VelocityJointInterface
            
            
                hardware_interface/VelocityJointInterface
                1
            
        
    

    
    
    

    
    
        
            Debug
            true
            /
            1
            true
            true
            100.0
            true
            left_wheel2base_link 
            right_wheel2base_link 
            ${base_link_radius * 2} 
            ${wheel_radius * 2} 
            1
            30
            1.8
            cmd_vel 
            odom 
            odom 
            base_footprint 
        
    


1.2 xacro文件集成

最后还需要将上述 xacro 文件集成进总的机器人模型文件,代码示例如下:



    
    
    
    
    

2.编写launch文件:demo03_env.launch


    
    
    
    
        
    
    
    


3.启动 launch 文件

$ source ./devel/setup.bash
$ roslaunch urdf02_gazebo demo03_env.launch

0基础在ROS系统中实现RRT算法(四)URDF集成gazebo并搭建gazebo仿真环境_第14张图片

使用 topic list 查看话题列表:

$ rostopic list

0基础在ROS系统中实现RRT算法(四)URDF集成gazebo并搭建gazebo仿真环境_第15张图片

会发现多了 /cmd_vel 然后发布 vmd_vel 消息控制即可

使用命令控制(或者可以编写单独的节点控制)

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}}'

 机器人开始做圆周运动。

五、rviz查看里程计信息

1.启动 Rviz

launch文件:demo04_sensor.launch


    
    

    
    
    


$ roslaunch urdf02_gazebo demo04_sensor.launch

 2.添加组件

添加robotmodel和odometry组件

0基础在ROS系统中实现RRT算法(四)URDF集成gazebo并搭建gazebo仿真环境_第16张图片

 

你可能感兴趣的:(ROS,自动驾驶,人工智能,机器学习)