【ROS】中级操作学习整理-gazebo机器人仿真

系列文章目录

·【ROS】中级操作学习整理-gazebo机器人仿真

·【ROS】中级操作学习整理-TF坐标变换

·【ROS】中级操作学习整理-传感器建模

·【ROS】中级操作学习整理-激光SLAM

目录

系列文章目录

文章目录

前言

一、gazebo介绍

二、机器人模型描述

1.运动学模型

2.视觉模型

3.动力学模型

4.碰撞模型

5.模型优化

6.物理引擎

三、话题使用

总结


前言

对于ROS的学习,其实我很早就开始了,先是跟着古月居老师的【ROS入门21讲】学了一遍,对ROS有了一个大概的认识,但是当时学完的感觉就是很懵逼,只知道跟着写代码,一些概念和程序多半是死记硬背,一遍学下来感觉什么也记不住,主要原因可能是当时刚上大二,C++基础一般,学习能力也比较弱(大一摸鱼混了一年),自己的理解能力很差,学完一遍后也没及时应用(没加实验室是我很后悔的),导致我学玩一边只记得一些很寻常的概念。

现在在做SLAM方向,要把ROS捡起来再学一遍了,对于前面的基础课程,可以看入门21讲,个人感觉中科院的ROS讲的也很不错,当然,最经典的还是roswiki的入门教程,我感觉很足够了,这里就不介绍初级教程了,直接进入中级篇。

对于一些ROS学习方法和路线,我整理在了这篇文章中。

一、gazebo介绍

 gazebo是ROS的常用组件之一,是用来进行机器人仿真的平台,采用统一的机器人描述格式,可以对机器人的物理力学性能进行仿真,另外gazebo还提供了插件,可以在仿真环境中,通过我们自己编写的程序对机器人进行控制,也可以对机器人的传感器进行仿真,反正就是很方便,具体的介绍很多教程都有,我就不说了,直接开始正题。

打开gazebo的语句:

roslaunch gazebo_ros empty_world.launch

二、机器人模型描述

要实现物理上逼真的动力学仿真,必须足够详细的描述对象,一般详细的建模分为三部分:动力学模型、碰撞模型和视觉模型,对于有控制关节的机器人,还需要指定运动学模型。

1.运动学模型

gazebo中的机器人认为是由一系列的连杆和关节组成的,这与机器人学中的机器人描述相同,建模方法有DH法和改进DH法,在gazebo中使用的机器人描述格式为urdf格式,它使用xml语言,采用标签的方法进行书写,下面这段例子:






            
    
    



    

    

定义了两个连杆(base_footprint个base_link)之间用一个关节(base_footprint_joint)连接,link标签中,没有定义任何其他属性,只说了连杆的名字,关节标签中说明了连杆的名字和关节类型(比如平动、转动、浮动等),origin标签说明了关节坐标系的位姿(平移和旋转),parent标签说明了父关节,child标签说明了子关节。

下面我们为其中的连杆添加更多的信息。

2.视觉模型

这个很好理解,就是用于图形显示,视觉模型通常和碰撞模型相同,但是视觉模型有更高的保真度,在视觉模型部分,我们可以为机器人添加颜色、反射率、透明度、材料等描述,一般用的比较多的参数是材料、颜色和形状


        
            
                
                
                    
                
            
        

        
                    
            
            
        

        
            
                
                
                    
                
                
            
        

在这段代码中,我们为关节添加了一个视觉模型标签visual,这个标签中有一些参数:

  • origin:视觉模型的坐标系位姿
  • geometry:连杆形状,这里只有一些简单的模型,比如圆柱(cylinder)、立方体(box),如果想要更逼真的效果,可以使用mesh标签进行渲染
  • material:材料、颜色、透明度等,这里我直接写的name=,是因为我在上面自定义了yellow的内容(RGB数值)

经过视觉模型的定义,我们的小车加载到gazebo环境中就可以看到它的样子了。

 图片是我定义了更多的参数,包括摄像头,这只是说明一下效果。

【ROS】中级操作学习整理-gazebo机器人仿真_第1张图片

3.动力学模型

动力学模型主要定义每个连杆的质量属性和惯性,相当于对连杆本身特性的一个描述,常用的参数是质量和惯性矩阵


        
            
                
            
            
        
        
            
            
            
        
    

这里我为小车定义了动力学模型,它的主要参数就是质量mass和惯性矩阵inertia,关于关联矩阵的知识可以看机器人学。

4.碰撞模型

碰撞模型主要用来规定两个物体相互作用时的处理方法,主要参数是形状


        
            
                
            
            
        
        
            
                
            
            
        
        
            
            
            
        
    

最后再为小车添加碰撞模型,使用collision标签,它的主要参数是坐标系位姿origin和形状geometry,它和视觉模型很像,你可以把它想象成透明度视觉模型,当有物体碰到这个模型时会发生碰撞。

在构建完机器人模型后,我们可以使用下面的代码,来检查我们的机器人模型是否正确

check_urdf mbot_with_camera_gazebo.urdf

显示结果如下:

【ROS】中级操作学习整理-gazebo机器人仿真_第2张图片

 也可以使用下面的代码,直接生成更直观的pdf图:

urdf_to_graphiz mbot_with_camera_gazebo.urdf 

在当前目录下生成了一个pdf文件,如下图:

【ROS】中级操作学习整理-gazebo机器人仿真_第3张图片

5.模型优化

除了urdf格式,ros提供了一种更加简便的方式去方便用户书写机器人模型,那就是xacro格式,这种格式可以使机器人模型更加模块化,可以定义通用参数、可以调用其他xacro文件、可以进行代数运算等等,最好的是其中描述机器人的格式和urdf一样,只是增加了简单的语法,方便我们使用,可以说很友好了。

下面是一些xacro文件语句的介绍:

【ROS】中级操作学习整理-gazebo机器人仿真_第4张图片

【ROS】中级操作学习整理-gazebo机器人仿真_第5张图片

 忘了说了,最上面的两行是用来说明xml的版本要求和机器人模型标签,这块学别人的写就行,不用记。

定义了xacro模型后,可以使用下面的语句将xacro格式转换为urdf格式,因为gazebo只认urdf格式

rosrun xacro xacro 你的xacro文件名.xacro > 生成的urdf文件名.urdf

也可以在launch文件中,直接写代码将xacro文件加入到gazebo环境中:


     

6.物理引擎

gazebo的另一个强大之处在于它支持各种各样的插件,这些插件包括传感器插件、关节控制插件等等,它们的存在可以方便用户便捷的对其进行可视化操作、获取其中关节的状态等,它们在xacro文件中一般是这样描述的:

【ROS】中级操作学习整理-gazebo机器人仿真_第6张图片

 它是在gazebo标签下,使用plugin标签进行描述的,其中filename是指定使用到的插件静态库,下面设置了一些参数,比如移动控制的话题(commandTopic)、里程计坐标系(odometryFrame)具体更多插件的细节就不展开了,可以去roswiki查看。

我们也可以在gazebo标签下直接设置关于gazebo的各种参数,这里也不详细说,可以查看roswiki

三、话题使用

建立好机器人模型后,我们就可以在gazebo中把模型加载进来,然后根据它发布的一些话题对他进行一些操作了,写写好launch文件,将小车加载进gazebo环境:



    
    
    
    
    
    

    
    
        
        
        
        
        
    

    
     

    
     

    
    
        
    

    
     

执行代码:

roslaunch mbot_gazebo view_mbot_gazebo_empty_world.lanch

【ROS】中级操作学习整理-gazebo机器人仿真_第7张图片

 然后我们查看一下有哪些话题,我们可以操作:

rostopic list

【ROS】中级操作学习整理-gazebo机器人仿真_第8张图片

 有着一些列话题,其中有控制速度的/cmd_vel,摄像头拍摄的图像话题/camera/image_raw

我们可以使用键盘控制器来控制小车运动:

【ROS】中级操作学习整理-gazebo机器人仿真_第9张图片

 也可以打开一个rviz或者qt,订阅一下摄像头的画面看一下:

打开rviz:

rosrun rviz rviz

打开rqt:

rqt_image_view

【ROS】中级操作学习整理-gazebo机器人仿真_第10张图片

【ROS】中级操作学习整理-gazebo机器人仿真_第11张图片


总结

大概就这样吧,这只是仿真中比较基础的一些操作,基本可以满足日常使用了,我们可以多看别人的文件,学习更多使用,平时能看懂就行,平时项目需要我们自己建模的场合也不多,另外也可以使用SolidWorks建模,然后转换成urdf格式,这样更加简便了。

你可能感兴趣的:(ROS,bash,linux)