ROS探索总结(五十七)—— Rviz三维可视化平台

12259
23
2018年11月2日 22时45分

机器人系统中存在大量数据,这些数据在计算过程中往往都处于数据形态,比如图像数据中0~255的RGB值。但是这种数据形态的值往往不利于开发者去感受数据所描述的内容,所以常常需要将数据可视化显示,例如机器人模型的可视化、图像数据的可视化、地图数据的可视化等。

image

ROS针对机器人系统的可视化需求,为用户提供了一款显示多种数据的三维可视化平台——rviz。

rviz是一款三维可视化工具,很好的兼容了各种基于ROS软件框架的机器人平台。在rviz中,可以使用XML对机器人、周围物体等任何实物进行尺寸、质量、位置、材质、关节等属性的描述,并且在界面中呈现出来。同时,rviz还可以通过图形化的方式,实时显示机器人传感器的信息、机器人的运动状态、周围环境的变化等。

总而言之,rviz帮助开发者实现所有可监测信息的图形化显示,开发者也可以在rviz的控制界面下,通过按钮、滑动条、数值等方式,控制机器人的行为。

一、安装并运行rviz

rviz已经集成在桌面完整版的ROS系统当中,如果已经成功安装了桌面完整版的ROS,可以直接跳过这一步骤,否则,请使用如下命令进行安装:

$ sudo apt-get install ros-kinetic-rviz

安装完成后,在终端中分别运行如下命令即可启动ROS系统和rviz平台:

$ roscore
$ rosrun rviz rviz

启动成功的rviz主界面如下图所示:

image

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

    • 0 :3D视图区,用于可视化显示数据,目前没有任何数据,所以显示黑色
    • 1 :工具栏,提供视角控制、目标设置、发布地点等工具
    • 2 :显示项列表,用于显示当前选择的显示插件,可以配置每个插件的属性
    • 3 :视角设置区,可以选择多种观测视角
    • 4 :时间显示区,显示当前的系统时间和ROS时间

rviz的运行已经没问题了,那么如何将数据在rviz中可视化显示呢?

二、数据可视化

进行数据可视化的前提当然是要有数据,假设需要可视化的数据以对应的消息类型发布,我们在rviz中使用相应的插件订阅该消息即可实现显示。

首先,需要添加显示数据的插件。点击rviz界面左侧下方的“Add”按键,rviz会将默认支持的所有数据类型的显示插件罗列出来,如下图所示:

image

在列表中选择需要的数据类型插件,然后在“DisplayName”里填入一个唯一的名称,用来识别显示的数据。例如显示两个激光传感器的数据,可以分别添加两个LaserScan类型的插件,命名为Laser_base和Laser_head进行显示。

添加完成后,rviz左侧的Dispaly中会列出已经添加的显示插件;点击插件列表前的加号,可以打开一个属性列表,根据需求设置属性。一般情况下,“Topic”属性较为重要,用来声明该显示插件所订阅的数据来源,如果订阅成功,在中间的显示区应该会出现可视化后的数据。

image

如果显示有问题,请检查属性区域的“Status”状态。Status有四种状态:OK、Warning、Error和Disabled,如果显示的状态不是OK,那么请查看错误信息,并详细检查数据发布是否正常。

image

三、插件扩展机制

rviz是一个三维可视化平台,默认可以显示下表所示的通用类型数据,其中包含坐标轴、摄像头图像、地图、激光等数据。

interface

但作为一个平台,rviz可以显示的数据不仅仅如此。rviz支持插件扩展机制,以上这些数据的显示都基于默认提供的相应插件。如果需要添加其他数据的显示,也可以通过编写插件的形式进行添加。关于rviz插件机制的使用,可参考以下链接:

ROS探索总结(三十四)——rviz plugin

我们甚至可以基于rviz打造一款自己的人机交互软件,例如下图所示是古月君针对机械臂控制开发的一系列基于rviz的插件,可以完成类似工业机器人示教器的功能:

image

发表评论

后才能评论

评论列表(23条)

  • cwbzzz 2019年6月3日 下午4:35

    古月老师 请问这篇文章最后的那张图片,有两个表格,上方有彩色的方框,是如何显示出来的?

    • 古月 回复 cwbzzz 2019年6月4日 上午10:37

      那个是我们自己开发的rviz插件

    • cwbzzz 回复 古月 2019年6月19日 下午2:28

      rviz_plugin 添加panel是吧 谢谢老师

  • 梁同学 2019年2月19日 下午9:53

    古月老师你好,问一下,我用SolidWorks导出的urdf文件中,没有rviz的配置,然后出现Fixed Frame [map] does not exist。网上很多说可以直接roslaunch display.launch显示,试了很多次都不行。

    • 古月 回复 梁同学 2019年2月21日 上午11:48

      把rviz中的fix frame改一下,具体配置需要自己在rviz里Add添加显示插件

    • ysxix 回复 古月 2019年4月11日 下午6:58

      古月老师,我也使用了SolidWorks导出的urdf文件,使用 rviz 打开,修改了Frame 项,
      但现在没有模型显示出来,终端还提示流程已死亡的错误,请问这是什么情况

    • 古月 回复 ysxix 2019年4月15日 下午6:15

      看下错误提示,导出的urdf包里有bug需要修改的

    • ysxix 回复 梁同学 2019年4月11日 下午6:55

      你好,请问您用 用SolidWorks导出的urdf文件 ,使用rviz 显示出来了吗,我这里没有显示出来,提示流程死亡

  • zjy 2019年1月3日 下午8:43

    古月老师,用moveit控制机械臂时,每次Plan,rviz里会有动画效果,有没有办法能去掉这个动画效果呢?

    • zjy 回复 zjy 2019年1月4日 上午10:51

      还有一个问题,有什么办法可以取消机械臂和物体之间的碰撞检测,即让机械臂可以接触物体?

    • 古月 回复 zjy 2019年1月4日 上午11:57

      参考:http://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/planning_scene_ros_api/planning_scene_ros_api_tutorial.html#the-entire-code

    • 古月 回复 zjy 2019年1月4日 上午11:51

      有,rviz左侧motionplanning插件的配置树中有相关的勾选项

    • zjy 回复 古月 2019年1月4日 下午1:39

      不好意思,可能我没有表达清楚我的意思,我知道Moveit里有一个attach函数能将物体附着在机械臂上,表明物体对于某个机械臂是可接触的。我现在是这样的情况,我有多个机械臂,我现在想要取消某个机械臂对环境的碰撞检测,即机械臂在环境中碰到任何物体时他都不会检测到碰撞,或者说我添加一个物体,让任何机械臂都不会将这个物体视为障碍物,有没有办法实现呢?

    • 古月 回复 zjy 2019年1月7日 上午10:01

      这个我不确定,google搜吧

    • 烟消云散 回复 古月 2019年1月7日 下午3:32

      这个问题我也想知道,但是我在左侧motionplanning里没找到呀?请问一下古月大神在哪里呀?

  • 烟消云散 2018年11月15日 上午10:14

    古月老师你好,我打开rviz时终端报错
    [ INFO] [1542248032.223174595]: rviz version 1.12.15
    [ INFO] [1542248032.223223482]: compiled against Qt version 5.5.1
    [ INFO] [1542248032.223250413]: compiled against OGRE version 1.9.0 (Ghadamon)
    [ INFO] [1542248032.681153296]: Stereo is NOT SUPPORTED
    [ INFO] [1542248032.681271480]: OpenGl version: 4.5 (GLSL 4.5).
    段错误 (核心已转储)
    我上网试了各种方法都没有用,包括update,卸载重装rviz等等,请问您见过这种问题吗?

    • 古月 回复 烟消云散 2018年11月20日 下午1:34

      这个问题不太确定,有可能是依赖库的版本问题,可以实现重新安装ros

  • 花酱 2018年11月13日 下午2:48

    古老师您好,想请问您一下机械臂模型在rviz中可以打开,怎么在gazebo中打开呢?

    • 古月 回复 花酱 2018年11月14日 下午8:22

      模型是一样的,使用gazebo的时候有一个功能节点加载一下就行了,可以参考《ROS机器人开发实践》的源码,或者任意一本ROS的书里应该都有相关的内容

  • xiaohong 2018年11月7日 下午4:53

    古月老师您好,想请问一下您基于rviz开发的人机交互软件,有没有更详细的参考资料啊?我现在也需要基于自己机器人模型开发一款仿真展示软件,想基于rviz开发,但是这方面的资料没有找到太多哎~

    • 古月 回复 xiaohong 2018年11月12日 下午8:18

      这方面资料比较少,可以参考:http://www.guyuehome.com/945

  • 2018年11月5日 下午2:42

    古月老师你好,问一下moveit有没有计算机械臂工作空间(机械臂运动范围)的方法并在rviz里显示?

    • 古月 回复 2018年11月6日 下午7:48

      就我已知范围内是没有的