3.9.1 使用rqt_rviz在3D世界中实现数据可视化
在roscore运行时,启动rqt_rviz(请注意rviz在ROS hydro中依然有效):
我们将会看到如下图所示的图形化工作界面:
在左边有一个Displays面板,在面板的中间有一个包含了模拟环境下不同参数项的树形列表。在示例中,已经加载了部分参数项。实例中的配置和布局都存储在了config/example9.rviz文件中,可以通过点击File | Open Config加载。
在Displays区域之下有一个Add按钮,允许通过主题或类型添加更多的参数项。同时,注意到这里还有一些全局选项,基本上是用于设定固定坐标系的工具,因为坐标系是可以移动的。其次,还有轴(Axes)和网格(Grid)作为各个参数项的参照物。在示例中,对于example9节点,我们将会看到标记(Marker)和点云(PointCloud2)。
最后,在状态栏上有时间相关的信息提示,以及在右侧有一些菜单。Tools用于配置一些插件参数,如2D Nav Goal和2D Pose Estimate主题名等。在Views目录提供了不同查看类型,一般而言有Orbit和TopDownOrtho就足够了,一个用于3D查看,另一个用于2D俯视查看,其他目录显示了环境中一些可以选择的元素。在顶部,有一个当前操作模式的菜单栏,包括交互(Interact)、移动(Move)、测量(Measure)等,以及一些插件。
现在运行example9节点:
在rqt_rviz中,我们将会把frame_id设置为标记,这个标记是固定坐标系的坐标标记(frame_marker)。我们将会看到红色方块标记在移动,如下图所示:
类似地,如果设置固定坐标系为frame_pc,我们将看到一个200×100像素点平面所组成的点云,如下图所示:
支持的rqt_rviz内置类型的参数列表包括camera和image。它们会在一个类似于image_view的窗口中显示。选择camera的时候,需要对它先进行校准,在使用双目视觉图像的时候,它允许我们覆盖点云。我们同样也可以看到激光雷达的LaserScan数据,红外/声呐(IR/sonar)传感器的锥状距离数据range,以及3D传感器例如Kinect的PointCloud2。
对于导航功能包集,将会在下一章进行详细介绍。我们会使用多种数据类型,例如里程Odometry(画出机器人的里程位姿),路径Path(画出机器人所走过的路径),物体位姿Pose,带有机器人位姿估计的粒子云PoseArray,使用Occupancy Grid Map(OGM)的地图Map,以及costmaps(这是ROS hydro的Map类型,之前是GridCell)。
在这些类型中,需要说明的是机器人的模型RobotModel,它能够展示机器人组件的CAD模型,并将每个组件的坐标系之间的转换考虑进去,甚至还能画出坐标变换(tf)树,并且在仿真环境中为坐标系调试提供非常大的帮助。我们会在下一节展示示例。在RobotModel中,我们用机器人URDF描述中的关节绘制一条轨迹,看它们如何随时间变化移动。
基本元素也可以被表示,例如机器人足迹的Polygon、各种不同的标记Markers通常支持基本几何元素,如立方体、球体、线条等,甚至是交互式标记对象InteractiveMarker。交互式标记对象允许用户设定标记对象在3D环境中的位姿(位置和方向)。使用下面命令,运行example8节点查看简单交互式标记:
你将看到一个标记,可以在rqt_rviz交互模式中移动它。它的位姿可以用于修改系统中另一个参数的位姿,例如机器人关节: