ROS探索总结(五十八)—— Gazebo物理仿真平台

  • 内容
  • 评论
  • 相关

仿真/模拟(Simulation),泛指基于实验或训练的目的,将原本的系统、事务或流程,建立一个模型以表征其关键特性(Key Characteristics)或者行为/功能,予以系统化与公式化,以便对关键特征做出模拟。

当所研究的系统造价昂贵、实验的危险性大或需要很长时间才能了解系统参数变化所引起的后果时,仿真是一种特别有效的研究手段,目前已经广泛应用于电气、机械、化工、水力、热力、社会、经济、生态、管理等领域。

gazebo是一款功能强大的三维物理仿真平台,具备强大的物理引擎、高质量的图形渲染、方便的编程与图形接口,最重要的是其开源免费的特性。gazebo中的机器人模型与rviz使用的模型相同,但是需要在模型中加入机器人和周围环境的物理属性,例如质量、摩擦系数、弹性系数等。机器人的传感器信息也可以通过插件的形式加入仿真环境,以可视化的方式进行显示。

一、gazebo的特点

gazebo是一款优秀的开源物理仿真环境,它具备如下特点:

1. 动力学仿真:支持多种高性能的物理引擎,例如ODE、Bullet、SimBody、DART等。

2. 三维可视化环境:支持显示逼真的三维环境,包括光线、纹理、影子。

3. 传感器仿真:支持传感器数据的仿真,同时可以仿真传感器噪声。

4. 可扩展插件:用户可以定制化开发插件,扩展gazebo的功能,满足个性化的需求。

5. 多种机器人模型:官方提供PR2、Pioneer2 DX、TurtleBot等机器人模型,当然也可以使用自己创建的机器人模型。

6. TCP/IP传输:gazebo可以实现远程仿真,后台仿真和前台显示通过网络通信。

7. 云仿真:gazebo仿真可以在Amazon、Softlayer等云端运行,也可以在自己搭建的云服务器上运行。

8. 终端工具:用户可以使用gazebo提供的命令行工具在终端实现仿真控制。

gazebo的社区维护非常积极,2013年以来几乎每年都会有较大的版本变化,如下图所示,可以看到gazebo的版本迭代,以及近几个ROS版本对应的gazebo版本。

image

gazebo的版本变化虽然较大,但是兼容性保持的比较好,indigo中2.2版本的机器人仿真模型,在Kinetic的7.0版本中运行依然不会有问题。

二、安装并运行gazebo

与rviz一样,如果已经安装了桌面完整版的ROS,那么可以直接跳过这一步,否则,请使用以下命令进行安装:

  1. $ sudo apt-get install ros-kinetic-gazebo-ros-pkgs ros-kinetic-gazebo-ros-control

安装完成后,在终端中使用如下命令启动ROS和gazebo:

  1. $ roscore
  2. $ rosrun gazebo_ros gazebo

gazebo启动成功后的界面如下图所示:

image

主界面中主要包含以下几个部分:

0 :3D视图区

1 :工具栏

2 :模型列表

3 :模型属性项

4 :时间显示区

验证gazebo是否与ROS系统成功连接,可以查看ROS的话题列表:

  1. $ rostopic list

如果连接成功,应该可以看到gazebo发布/订阅的如下话题列表:

  1. /gazebo/link_states
  2. /gazebo/model_states
  3. /gazebo/parameter_descriptions
  4. /gazebo/parameter_updates
  5. /gazebo/set_link_state
  6. /gazebo/set_model_state

当然,还有gazebo提供的服务列表:

  1. $ rosservice list
  2. /gazebo/apply_body_wrench
  3. /gazebo/apply_joint_effort
  4. /gazebo/clear_body_wrenches
  5. /gazebo/clear_joint_forces
  6. /gazebo/delete_model
  7. /gazebo/get_joint_properties
  8. /gazebo/get_link_properties
  9. /gazebo/get_link_state
  10. /gazebo/get_loggers
  11. /gazebo/get_model_properties
  12. /gazebo/get_model_state
  13. /gazebo/get_physics_properties
  14. /gazebo/get_world_properties
  15. /gazebo/pause_physics
  16. /gazebo/reset_simulation
  17. /gazebo/reset_world
  18. /gazebo/set_joint_properties
  19. /gazebo/set_link_properties
  20. /gazebo/set_link_state
  21. /gazebo/set_logger_level
  22. /gazebo/set_model_configuration
  23. /gazebo/set_model_state
  24. /gazebo/set_parameters
  25. /gazebo/set_physics_properties
  26. /gazebo/spawn_gazebo_model
  27. /gazebo/spawn_sdf_model
  28. /gazebo/spawn_urdf_model
  29. /gazebo/unpause_physics
  30. /rosout/get_loggers
  31. /rosout/set_logger_level

三、构建仿真环境

在仿真之前,需要构建一个仿真环境。gazebo中有两种创建仿真环境的方法:

1. 直接插入模型

在gazebo左侧的模型列表中,有一个insert选项,罗列了所有可使用的模型。选择需要使用的模型,放置在主显示区中,就可以在仿真环境中添加机器人和外部物体等仿真实例:

image

模型的加载需要连接国外网站,为了保证模型顺利加载,可以提前将模型文件下载并放置到本地路径~/.gazebo/models下,模型文件的下载地址:

https://bitbucket.org/osrf/gazebo_models/downloads/。

2. Building Editor

第二种方法是使用gazebo提供的Building Editor工具手动绘制地图。

在gazebo菜单栏中选择Edit --> Building Editor,可以打开Building Editor界面。选择左侧的绘制选项,然后在上侧窗口中使用鼠标绘制,下侧窗口中即可实时显示绘制的仿真环境。

image

模型建立完成后就可以加载机器人模型并进行仿真了。


原创文章,转载请注明: 转载自古月居

本文链接地址: ROS探索总结(五十八)—— Gazebo物理仿真平台

微信 OR 支付宝 扫描二维码
为本文作者 打个赏
pay_weixinpay_weixin

评论

43条评论
  1. Gravatar 头像

    烟消云散 回复

    古月老师你好,请问我在solidworks里画的物体,生成stl文件后在gazebo里加载,它的gazebo属性里的visual就是物体本身,但是collision却不是,一般是个比物体要大的正方体,然后这种stl模型又不能编辑我怎样把collision调成和visual一致呢?

  2. Gravatar 头像

    回复

    老师您好,我想用xacro或urdf画一个闭环的机械结构,请问有相应的参考资料吗

  3. Gravatar 头像

    回复

    老师您好,最近在做gazebo仿真的时候,遇到一个摩擦力设置的问题。
    在做的是一个四足机器人模型,躯干下面是四个四肢,然后是四个足,都是用简单的圆柱体和长方体。加载进gazebo后,控制四肢前后摆动的时候,躯干并不移动,足底在平面上前后滑动,类似足底和地面没有摩擦一样,这个摩擦应该怎么设置?
    找了一些资料,比如设置gazebo标签

    500.0
    500.0
    500000.0
    10.0
    0.001
    0.1
    1 0 0
    1
    Gazebo/GreyTransparent

    但这样还是不行

    • 古月

      古月 回复

      @常 可以设置下地面的模型参数试试,比如加入一片草地

      • Gravatar 头像

        Songsama 回复

        @古月 古老师您好!我最近在做双足机器人行走的gazebo仿真,模型和控制器已经加好,初始状态机器人保持直立在地上,仿真环境运行之后机器人双脚会在地面上小幅度碰撞,反复碰撞几次之后机器人就摔倒了。地面模型的参数我没有找到相关的参考,不知道具体怎么设置。所以想请问一下古老师,上面您提到的草地,是否有可以参考的模型。我机器人目标环境是人造草坪,有一定的缓冲作用,不知道在sdf文件中是对应哪个参数。

  4. Gravatar 头像

    Ritchie 回复

    您好,老师,最近在ubuntu18.04的环境下安装使用melodic版本的ROS,发现在gazebo的安装和连接总是不成功,不甘心不明不白地返回教程上版本,想就此问题咨询老师到底是哪里出现了问题,这个问题前后已经纠结一周,苦于找不到解决方法。
    ritchie@think:~$ rosrun gazebo_ros gazebo
    gzclient: symbol lookup error: /usr/lib/x86_64-linux-gnu/libgazebo_common.so.9: undefined symbol: _ZN8ignition10fuel_tools12ClientConfig12SetUserAgentERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
    gzserver: symbol lookup error: /usr/lib/x86_64-linux-gnu/libgazebo_common.so.9: undefined symbol: _ZN8ignition10fuel_tools12ClientConfig12SetUserAgentERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
    敬等老师的解惑!

    • 古月

      古月 回复

      @Ritchie 这个错误我也看不出来什么原因,只能建议多重装几次gazebo试试

  5. Gravatar 头像

    高鑫 回复

    老师您好,最近在学习如何组装自己的机器人时遇到了一个问题,就是订阅的速度信息通过什么公式转换成电机所能识别的pwm信号吗?

    • 古月

      古月 回复

      @高鑫 参考智能车的驱动,一般使用PID闭环控制

  6. Gravatar 头像

    梁同学 回复

    古老师,我自己用solidworks导出一个两轮的机器人的模型,没有支撑轮的一种。但是导出到gazebo中以后,模型会自己摆动,这一般是什么原因呢?

      • Gravatar 头像

        梁同学 回复

        @古月 古老师,我的那个物理参数都是用soildworks画图后,自动生成的,里面含有不规则体,所以有些转动惯量参数自动生成的。

        • 古月

          古月 回复

          @梁同学 个人经验,自动生成的物理参数不一定好用,一般修改成比较小的质量会稳定一写些

  7. Gravatar 头像

    局气 回复

    大神,按照您的方法安装Gazebo,Gazebo启动就闪了一下界面,没有任何报错消息。
    u@u-virtual-machine:~$ gazebo
    u@u-virtual-machine:~$

    我该怎么解决?

    • 古月

      古月 回复

      @局气 你用的虚拟机么?虚拟机显卡支持不好,gazebo经常有问题,rosrun gazebo_ros gazebo试一下,不行的话还是建议装双系统

  8. Gravatar 头像

    回复

    古月老师好,在使用moveIt笛卡尔路径规划时,添加路点waypoints时,依次添加三个点A,B,C。希望末端能从A点直线过渡到B,再从B点直线过渡到C点,plan规划时候很好,可是实际执行时,在moveit和gazebo实际执行机械臂中,从A点直线过渡到B点,然后从B点转个大圈再到B点,然后再直线过渡到C点,这是怎么回事吗?是OMPL原因吗?另外出现了这个错误,ABORTED: Solution found but controller failed during execution, Path computed successfully. Moving the arm.并未标黄。

    • 古月

      古月 回复

      @刘 有可能是ompl导致的,但是不太清楚具体原因,这个问题一般是因为控制器没跟上规划的轨迹时间点导致的

      • Gravatar 头像

        郭雨豪 回复

        @古月 古月老师好,我用笛卡尔路径规划时也出现了这样的问题,rviz中plan规划是挺好的,但是机械臂execute的时候不按照plan的路径走,直接动了一下就回到home姿态了。这个怎么解决呢?

        • Gravatar 头像

          回复

          @郭雨豪 古月老师好,我用笛卡尔路径规划时也出现了这样的问题,rviz中plan规划是挺好的,但是机械臂execute的时候不按照plan的路径走,直接动了一下就回到home姿态了。这个怎么解决呢?
          而且我的也是有这个错误ABORTED: Solution found but controller failed during execution

        • 古月

          古月 回复

          @郭雨豪 这个是机器人控制器执行失败了,路径规划没问题,要看控制端是不是有问题

  9. Gravatar 头像

    小马 回复

    古月大佬你好,我买了你的书ROS机器人开发实践,根据你的书一步步往下学习,但目前有个问题想请教你一下,问题如下:我在第六章机器人建模与仿真中的gazebo模块中启动了装载摄像头的机器人模型,启动后按照您书上所写的启动rqt_image_view选择了仿真摄像头发布的话题后,我并没有得到仿真摄像头所拍摄到的图片。我原本打开launch文件的终端内出现了如下错误:gzserver: /build/ogre-1.9-mqY1wq/ogre-1.9-1.9.0+dfsg1/OgreMain/src/OgreRenderSystem.cpp:546: virtual void Ogre::RenderSystem::setDepthBufferFor(Ogre::RenderTarget*): Assertion `bAttached && "A new DepthBuffer for a RenderTarget was created, but after creation" "it says it's incompatible with that RT"' failed.
    Aborted (core dumped)
    [gazebo-1] process has died [pid 17038, exit code 134, cmd /opt/ros/kinetic/lib/gazebo_ros/gzserver -eode /home/health/catkin_study/src/mrobot_gazebo/worlds/playground.world __name:=gazebo __log:=/home/health/.ros/log/0718acd6-0a90-11e9-919a-000c2938f4a0/gazebo-1.log].
    log file: /home/health/.ros/log/0718acd6-0a90-11e9-919a-000c2938f4a0/gazebo-1*.log

    请问这是什么原因呢?还请古月老师指导一下~

    • 古月

      古月 回复

      @小马 根据以上错误,可能是动力学引擎挂了,重新安装gazebo试下

    • Gravatar 头像

      小唐 回复

      @小马 想问一下这个问题现在已经解决了么,我也遇到这个问题了

  10. Gravatar 头像

    .... 回复

    老师您好,机械臂模型在gazebo内抖动的问题应该如何解决,应该主要配置哪些参数,有这方面的参考例子吗? 谢谢。

    • 古月

      古月 回复

      @.... 主要是物理参数的问题,惯性矩阵、质量等参数,可以参考已有的模型,比如ur

  11. Gravatar 头像

    ... 回复

    老师您好,gazebo可以做自己导入的两个机器人的协同仿真吗?

    • 古月

      古月 回复

      @... 可以的,gazebo支持多机器人仿真,协同算法需要自己做或者找已有的包

  12. Gravatar 头像

    小白 回复

    老师,您好!麻烦问一下,运行roslaunch view_xbot_gazebo_empty_world.launch,显示下面错误是什么原因?
    [urdf_spawner-6] process has died [pid 4273, exit code 1, cmd /opt/ros/kinetic/lib/gazebo_ros/spawn_model -urdf -model mrobot -param robot_description __name:=urdf_spawner __log:=/home/terminal/.ros/log/55c5bbe2-f156-11e8-a639-9c2a7050be79/urdf_spawner-6.log].
    log file: /home/terminal/.ros/log/55c5bbe2-f156-11e8-a639-9c2a7050be79/urdf_spawner-6*.log

    • 古月

      古月 回复

      @小白 这个信息看不出来错误,rviz中可以显示模型么

      • Gravatar 头像

        小白 回复

        @古月 在rviz中可以正常显示,就是在gazebo中打开显示这样的错误
        Traceback (most recent call last):
        File "/opt/ros/kinetic/lib/gazebo_ros/spawn_model", line 26, in
        from gazebo_ros import gazebo_interface
        File "/opt/ros/kinetic/lib/python2.7/dist-packages/gazebo_ros/gazebo_interface.py", line 9, in
        from gazebo_msgs.msg import *
        ImportError: No module named msg
        [urdf_spawner-6] process has died [pid 5748, exit code 1, cmd /opt/ros/kinetic/lib/gazebo_ros/spawn_model -urdf -model mrobot -param robot_description __name:=urdf_spawner __log:=/home/terminal/.ros/log/37dde90c-f3fd-11e8-bf18-9c2a7050be79/urdf_spawner-6.log].
        log file: /home/terminal/.ros/log/37dde90c-f3fd-11e8-bf18-9c2a7050be79/urdf_spawner-6*.log

        • 古月

          古月 回复

          @小白 感觉是gazebo安装包的问题,实现重新安装gazebo包

  13. Gravatar 头像

    nihaonihao 回复

    大神您好! 我仿照UR5机器人的moveit+gazebo仿真, 编写自己机器人的代码, [ WARN] [1542712031.375472683, 544.004000000]: Controller bmiarm_description/arm_joint_controller failed with error code GOAL_TOLERANCE_VIOLATED , 机器人可以规划但是不能动, 求大神解答.

    • Gravatar 头像

      刘月雷 回复

      @nihaonihao 您好,您的问题解决了吗?我遇到了与您一样的问题能提供一下解决方法吗?或者错误所在吗?

    • Gravatar 头像

      456 回复

      @nihaonihao 您好,您的问题解决了吗?我遇到了与您一样的问题能提供一下解决方法吗?或者错误所在吗?

      • Gravatar 头像

        Teng 回复

        @456 gzserver: /build/ogre-1.9-mqY1wq/ogre-1.9-1.9.0+dfsg1/OgreMain/src/OgreRenderSystem.cpp:546: virtual void Ogre::RenderSystem::setDepthBufferFor(Ogre::RenderTarget*): Assertion `bAttached && "A new DepthBuffer for a RenderTarget was created, but after creation" "it says it's incompatible with that RT"' failed.
        Aborted (core dumped) 加载相机会出现上面问题,但是去掉相机可以正常工作,请问怎么解决

        • 古月

          古月 回复

          @Teng 应该是图像渲染出问题了,重装gazebo试下

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据