ROS探索总结(四)(五)(六)——简单的机器人仿真 创建简单的机器人模型smartcar 使用smartcar进行仿真

ROS探索总结(四)——简单的机器人仿真



前边我们已经介绍了ROS的基本情况,以及新手入门ROS的初级教程,现在就要真正的使用ROS进入机器人世界了。接下来我们涉及到的很多例程都是《ROS by Example》这本书的内容,我是和群里的几个人一起从国外的亚马逊上买到的,还是很有参考价值的,不过前提是你已经熟悉之前的新手教程了。

一、ROS by Example

ROS探索总结(四)(五)(六)——简单的机器人仿真 创建简单的机器人模型smartcar 使用smartcar进行仿真_第1张图片
        这本书是关于国外关于ROS出版的第一本书,主要针对Electric和Fuerte版本,使用机器人主要是TurtleBot。书中详细讲解了关于机器人的基本仿真、导航、路径规划、图像处理、语音识别等等,而且在google的svn上发布了所有代码,可以通过以下命令下载、编译:
[plain]  view plain  copy
  1. svn checkout http://ros-by-example.googlecode.com/svn/trunk/rbx_vol_1  
  2. rosmake rbx_vol_1  
  3. rospack profile          //加入ROS package路径  


二、rviz简单机器人模拟

       1、安装机器人模拟器                       

       rviz是一个显示机器人实体的工具,本身不具有模拟的功能,需要安装一个模拟器arbotix。
[plain]  view plain  copy
  1. svn checkout http://vanadium-ros-pkg.googlecode.com/svn/trunk/arbotix  
  2. rosmake arbotix  

       

       2、TurtleBot机器人的模拟

       在书中的rbx_vol_1包里已经为我们写好了模拟的代码,我们先进行实验,完成后再仔细研究代码。
       机器人模拟运行:
[plain]  view plain  copy
  1. roscore  
  2. roslaunch rbx1_bringup fake_pi_robot.launch  

       然后在终端中可以看到,机器人已经开始运行了,打开rviz界面,才能看到机器人实体。
[plain]  view plain  copy
  1. rosrun rviz rviz -d `rospack find rbx1_nav`/sim_fuerte.vcg  

       后面的参数是加载了rviz的配置文件sim_fuerte.vcg。效果如下:
  ROS探索总结(四)(五)(六)——简单的机器人仿真 创建简单的机器人模型smartcar 使用smartcar进行仿真_第2张图片

       此时的机器人是静止的,需要发布一个消息才能让它动起来。
[plain]  view plain  copy
  1. 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探索总结(四)(五)(六)——简单的机器人仿真 创建简单的机器人模型smartcar 使用smartcar进行仿真_第3张图片
       如果要让机器人停下来,需要在中断中按下“Ctrl+c”,然后输入:
[plain]  view plain  copy
  1. rostopic pub -1 /cmd_vel geometry_msgs/Twist '{}'  

       也可以改变发送的topic信息,使机器人走出不同的轨迹。

三、实现分析

       按照上面的仿真过程,我们详细分析每一步的代码实现。   

       1、TurtleBot机器人运行

       机器人运行使用的是launch文件,首先打开fake_turtlebot.launch文件。 
[plain]  view plain  copy
  1.   
  2.     
  3.   
  4.     
  5.     
  6.      
  7.     
  8.       
  9.     
  10.         
  11.         
  12.     
  13.     
  14.     
  15.         
  16.     
  17.     
  18.     
  19.     
  20.     
  21.   
  22.   

        文件可以大概分为四个部分:
        (1) 从指定的包中加载urdf文件
        (2) 启动arbotix模拟器
        (3) 启动状态发布节点
        (4) tf坐标系配置

2、rviz配置文件

       在打开rviz的时候需要加载一个.vcg的配置文件,主要对rviz中的插件选项进行默认的配置。这里打开的是sim_fuerte.vcg文件,由于文件比较长,这里只列举重点的部分。
[plain]  view plain  copy
  1. Background\ ColorB=0.12549  
  2. Background\ ColorG=0.12549  
  3. Background\ ColorR=0.12549  
  4. Camera\ Config=158.108 0.814789 0.619682 -1.57034  
  5. Camera\ Type=rviz::FixedOrientationOrthoViewController  
  6. Fixed\ Frame=/odom  
  7. Grid.Alpha=0.5  
  8. Grid.Cell\ Size=0.5  
  9. Grid.ColorB=0.941176  
  10. Grid.ColorG=0.941176  
  11. Grid.ColorR=0.941176  
  12. Grid.Enabled=1  
  13. Grid.Line\ Style=0  
  14. Grid.Line\ Width=0.03  
  15. Grid.Normal\ Cell\ Count=0  
  16. Grid.OffsetX=0  
  17. Grid.OffsetY=0  
  18. Grid.OffsetZ=0  
  19. Grid.Plane=0  



        上面的代码是配置背景颜色和网格属性的,对应rviz中的选项如下图所示。
ROS探索总结(四)(五)(六)——简单的机器人仿真 创建简单的机器人模型smartcar 使用smartcar进行仿真_第4张图片
        
        其中比较重要的一个选项是Camera的type,这个选项是控制开发者的观察角度的,书中用的是FixedOrientationOrthoViewController的方式,就是上面图中的俯视角度,无法看到机器人的三维全景,所以可以改为OrbitViewController方式,如下图所示:
ROS探索总结(四)(五)(六)——简单的机器人仿真 创建简单的机器人模型smartcar 使用smartcar进行仿真_第5张图片

3、发布topic

        要让机器人动起来,还需要给他一些运动需要的信息,这些信息都是通过topic的方式发布的。
        这里的topic就是速度命令,针对这个topic,我们需要发布速度的信息,在ROS中已经为我们写好了一些可用的数据结构,这里用的是Twist信息的数据结构。在终端中可以看到Twist的结构如下:
              ROS探索总结(四)(五)(六)——简单的机器人仿真 创建简单的机器人模型smartcar 使用smartcar进行仿真_第6张图片
        用下面的命令进行消息的发布,其中主要包括力的大小和方向。
[plain]  view plain  copy
  1. Background\ ColorB=0.12549  
  2. Background\ ColorG=0.12549  
  3. Background\ ColorR=0.12549  
  4. Camera\ Config=158.108 0.814789 0.619682 -1.57034  
  5. Camera\ Type=rviz::FixedOrientationOrthoViewController  
  6. Fixed\ Frame=/odom  
  7. Grid.Alpha=0.5  
  8. Grid.Cell\ Size=0.5  
  9. Grid.ColorB=0.941176  
  10. Grid.ColorG=0.941176  
  11. Grid.ColorR=0.941176  
  12. Grid.Enabled=1  
  13. Grid.Line\ Style=0  
  14. Grid.Line\ Width=0.03  
  15. Grid.Normal\ Cell\ Count=0  
  16. Grid.OffsetX=0  
  17. Grid.OffsetY=0  
  18. Grid.OffsetZ=0  
  19. Grid.Plane=0  



4、节点关系图

ROS探索总结(四)(五)(六)——简单的机器人仿真 创建简单的机器人模型smartcar 使用smartcar进行仿真_第7张图片

----------------------------------------------------------------




ROS探索总结(五)——创建简单的机器人模型smartcar


前面我们使用的是已有的机器人模型进行仿真,这一节我们将建立一个简单的智能车机器人smartcar,为后面建立复杂机器人打下基础。

一、创建硬件描述包

[plain]  view plain  copy
  1. roscreat-pkg  smartcar_description  urdf  


二、智能车尺寸数据

        因为建立的是一个非常简单的机器人,所以我们尽量使用简单的元素:使用长方体代替车模,使用圆柱代替车轮,具体尺寸如下:
ROS探索总结(四)(五)(六)——简单的机器人仿真 创建简单的机器人模型smartcar 使用smartcar进行仿真_第8张图片

三、建立urdf文件

        在smartcar_description文件夹下建立urdf文件夹,创建智能车的描述文件smartcar.urdf,描述代码如下:
[plain]  view plain  copy
  1.   
  2.   
  3.     
  4.       
  5.         
  6.           
  7.       
  8.       
  9.       
  10.           
  11.       
  12.       
  13.    
  14.   
  15.    
  16.       
  17.         
  18.           
  19.         
  20.         
  21.           
  22.         
  23.       
  24.     
  25.   
  26.     
  27.       
  28.       
  29.       
  30.       
  31.       
  32.       
  33.     
  34.   
  35.     
  36.       
  37.         
  38.           
  39.         
  40.         
  41.           
  42.         
  43.       
  44.     
  45.   
  46.     
  47.       
  48.       
  49.       
  50.       
  51.       
  52.       
  53.    
  54.   
  55.    
  56.       
  57.         
  58.           
  59.         
  60.         
  61.           
  62.         
  63.       
  64.     
  65.   
  66.     
  67.       
  68.       
  69.       
  70.       
  71.       
  72.       
  73.     
  74.   
  75.     
  76.       
  77.         
  78.           
  79.         
  80.         
  81.           
  82.         
  83.       
  84.     
  85.   
  86.     
  87.       
  88.       
  89.       
  90.       
  91.       
  92.       
  93.     
  94.   
  95.     
  96.       
  97.         
  98.           
  99.         
  100.         
  101.             
  102.         
  103.       
  104.     
  105.   
  106.     
  107.       
  108.       
  109.       
  110.     
  111.   

四、建立launch命令文件

        在smartcar_description文件夹下建立launch文件夹,创建智能车的描述文件 base.urdf.rviz.launch,描述代码如下:
[plain]  view plain  copy
  1.   
  2.       
  3.       
  4.       
  5.       
  6.       
  7.       
  8.       
  9.   

五、效果演示

        在终端中输入显示命令:
[plain]  view plain  copy
  1. roslaunch  smartcar_description  base.urdf.rviz.launch  gui:=true  


        显示效果如下图所示,使用gui中的控制bar可以控制四个轮子单独旋转。
ROS探索总结(四)(五)(六)——简单的机器人仿真 创建简单的机器人模型smartcar 使用smartcar进行仿真_第9张图片

----------------------------------------------------------------






ROS探索总结(六)——使用smartcar进行仿真



之前的博客中,我们使用rviz进行了TurtleBot的仿真,而且使用urdf文件建立了自己的机器人smartcar,本篇博客是将两者进行结合,使用smartcar机器人在rviz中进行仿真。

一、模型完善

        之前我们使用的都是urdf文件格式的模型,在很多情况下,ROS对urdf文件的支持并不是很好,使用宏定义的.xacro文件兼容性更好,扩展性也更好。所以我们把之前的urdf文件重新整理编写成.xacro文件。
        .xacro文件主要分为三部分:

1、机器人主体

[plain]  view plain  copy
  1.   
  2.   
  3.     
  4.   
  5.     
  6.     
  7.   
  8.     
  9.     
  10.   
  11.     
  12.   
  13.   
  14.       
  15.       
  16.         
  17.         
  18.         
  19.       
  20.       
  21.         
  22.           
  23.         
  24.         
  25.         
  26.         
  27.         
  28.      
  29.      
  30.         
  31.         
  32.           
  33.         
  34.       
  35.     
  36.   
  37.   
  38.    
  39.       
  40.         
  41.         
  42.          
  43.       
  44.       
  45.         
  46.           
  47.         
  48.         
  49.           
  50.         
  51.       
  52.       
  53.         
  54.         
  55.            
  56.         
  57.       
  58.     
  59.   
  60.     
  61.       
  62.       
  63.       
  64.       
  65.       
  66.       
  67.     
  68.   
  69.     
  70.       
  71.         
  72.         
  73.          
  74.       
  75.       
  76.         
  77.           
  78.         
  79.         
  80.           
  81.         
  82.       
  83.       
  84.         
  85.         
  86.            
  87.         
  88.       
  89.     
  90.   
  91.     
  92.       
  93.       
  94.       
  95.       
  96.       
  97.       
  98.    
  99.   
  100.    
  101.       
  102.         
  103.         
  104.          
  105.       
  106.       
  107.         
  108.           
  109.         
  110.         
  111.           
  112.         
  113.      
  114.      
  115.          
  116.         
  117.            
  118.         
  119.       
  120.     
  121.   
  122.     
  123.       
  124.       
  125.       
  126.       
  127.       
  128.       
  129.     
  130.   
  131.     
  132.       
  133.          
  134.          
  135.          
  136.       
  137.       
  138.         
  139.           
  140.         
  141.         
  142.           
  143.         
  144.      
  145.      
  146.         
  147.         
  148.            
  149.         
  150.       
  151.     
  152.   
  153.   
  154.     
  155.       
  156.       
  157.       
  158.       
  159.       
  160.       
  161.     
  162.   
  163.     
  164.       
  165.         
  166.         
  167.         
  168.       
  169.       
  170.         
  171.           
  172.         
  173.         
  174.           
  175.         
  176.        
  177.        
  178.         
  179.         
  180.            
  181.         
  182.       
  183.     
  184.   
  185.     
  186.       
  187.       
  188.       
  189.     
  190.     
  191.   
  192.   

2、gazebo属性部分

[plain]  view plain  copy
  1.   
  2.   
  3.     xmlns:interface="http://playerstage.sourceforge.net/gazebo/xmlschema/#interface"   
  4.     xmlns:sensor="http://playerstage.sourceforge.net/gazebo/xmlschema/#sensor"   
  5.     xmlns:xacro="http://ros.org/wiki/xacro"   
  6.     name="smartcar_gazebo">  
  7.   
  8.   
  9.   
  10.   
  11.       
  12.         Gazebo/Blue  
  13.       
  14.   
  15.       
  16.         Gazebo/FlatBlack  
  17.       
  18.   
  19.       
  20.         Gazebo/FlatBlack  
  21.       
  22.   
  23.       
  24.         Gazebo/FlatBlack  
  25.       
  26.   
  27.       
  28.         Gazebo/FlatBlack  
  29.       
  30.   
  31.       
  32.         Gazebo/White  
  33.       
  34.   
  35.   
  36.   
  37.   

3、主文件

[cpp]  view plain  copy
  1. "font-size:14px;">"1.0"?>  
  2.   
  3. "smartcar"    
  4.     xmlns:xi="http://www.w3.org/2001/XInclude"  
  5.     xmlns:gazebo="http://playerstage.sourceforge.net/gazebo/xmlschema/#gz"  
  6.     xmlns:model="http://playerstage.sourceforge.net/gazebo/xmlschema/#model"  
  7.     xmlns:sensor="http://playerstage.sourceforge.net/gazebo/xmlschema/#sensor"  
  8.     xmlns:body="http://playerstage.sourceforge.net/gazebo/xmlschema/#body"  
  9.     xmlns:geom="http://playerstage.sourceforge.net/gazebo/xmlschema/#geom"  
  10.     xmlns:joint="http://playerstage.sourceforge.net/gazebo/xmlschema/#joint"  
  11.     xmlns:controller="http://playerstage.sourceforge.net/gazebo/xmlschema/#controller"  
  12.     xmlns:interface="http://playerstage.sourceforge.net/gazebo/xmlschema/#interface"  
  13.     xmlns:rendering="http://playerstage.sourceforge.net/gazebo/xmlschema/#rendering"  
  14.     xmlns:renderable="http://playerstage.sourceforge.net/gazebo/xmlschema/#renderable"  
  15.     xmlns:physics="http://playerstage.sourceforge.net/gazebo/xmlschema/#physics"  
  16.     xmlns:xacro="http://ros.org/wiki/xacro">  
  17.   
  18.   "$(find smartcar_description)/urdf/smartcar_body.urdf.xacro" />  
  19.   
  20.     
  21.     
  22.   
  23.     
  24.   
  25.   



二、lanuch文件

        在launch文件中要启动节点和模拟器。
[plain]  view plain  copy
  1.   
  2.       
  3.       
  4.       
  5.       
  6.       
  7.   
  8.       
  9.       
  10.   
  11.       
  12.           
  13.           
  14.       
  15.   
  16.       
  17.       
  18.   
  19.       
  20.           
  21.       
  22.   
  23.        
  24.       
  25.       
  26.   
  27.       
  28.   

三、仿真测试

        首先运行lanuch,既可以看到rviz中的机器人:
[plain]  view plain  copy
  1. roslaunch smartcar_description smartcar_display.rviz.launch  

         ROS探索总结(四)(五)(六)——简单的机器人仿真 创建简单的机器人模型smartcar 使用smartcar进行仿真_第10张图片
         发布一条动作的消息。
[plain]  view plain  copy
  1. rostopic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.5, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.5}}'  

ROS探索总结(四)(五)(六)——简单的机器人仿真 创建简单的机器人模型smartcar 使用smartcar进行仿真_第11张图片

四、节点关系

ROS探索总结(四)(五)(六)——简单的机器人仿真 创建简单的机器人模型smartcar 使用smartcar进行仿真_第12张图片

----------------------------------------------------------------



欢迎大家转载我的文章。

转载请注明:转自古-月

http://blog.csdn.net/hcx25909


你可能感兴趣的:(ROS)