在ROS中,一般会有一个节点用于展示摄像头采集到的图像。这是一个包含复杂数据的topic,一般最好用特殊的工具来显示与分析。因为这里根据摄像头设备的不同需要不同的launch文件来启动摄像头,我这里用的是自己机器人的文件,或者也可以用网上的例程用自己笔记本摄像头实验,用 rostopic hz XXX 可以看到视屏的帧率,其中XXX是topic的名称。
图片的获取不能直接使用 rostopic echo XXX指令来获取,这样得到的图片信息是text格式的,显示出来十分庞大而且我们也无法识别。我们可以用一下指令来获取单张图片
$ rosrun image_view image_view image:=XXX
这个image_view结点是ROS自带用于展示主题中图片。用这种方法我们可以看到发布的主题中的每一张图片,甚至还可以通过网络访问的方式来查看。在打开的窗口上还可以右键来保存当前帧,一般会存储在 ./ros文件夹下。
topic与帧之间有什么关系呢,所有的topic必须有一个帧。一个激光固定的位置代表机器人的base link(一般位于方向轮的中间)。如果我们用激光与扫描与检测障碍物,那必须传递激光与base link的信息。在ROS中信息都会表上一个frame_id的标签,不同于时间戳,它基于每一帧专属的名字。这种类型的帧本身没有什么意义,我们需要对帧做转化,才能被可视化。
那么要怎么才能保存这些数据呢,这里有个强有力的工具可以解决这个问题。ROS可以存储任何发布在topic上的message。它可以建立一个bag文件,这个文件包含于其他节点通讯的m