前言
无论是工程还是科研中,都会涉及到机器人运行状态或者通讯信息的获取,本文主要总结ROS系统中的数据提取与处理的方式。
一、ROS中的数据可视化(rqt)
为了方便可视化调试和显示,ROS提供了一个Qt架构的后台图形工具套件——rqt_common_plugins,其中包含不少实用的工具。
首先需要使用以下命令安装:
$ sudo apt-get install ros-%YOUR_ROS_DISTRO%-rqt
$ sudo apt-get install ros-%YOUR_ROS_DISTRO%-rqt-common-plugins
rqt的运行可以先打开其面板选择对应的插件,也可以直接运行插件,如下命令所示:
# 打开rqt交互界面
$ rqt # 在交互界面可以选择要打开的插件,或者使用以下指令直接运行对应插件
# 直接运行对应插件,常用插件如下:
$ rqt_graph # 图形化显示当前ROS系统中的计算图(所有节点之间的通讯图)
$ rqt_plot # 二维数值曲线绘制工具,可以将需要显示的数据在xy坐标系中使用曲线描绘
如下图所示分别为rqt_graph和rqt_plot的显示案例。
rqt工具在这里的主要作用是对要获取到的数据进行初步的可视化和检查,如果需要绘制更完美的图像,那么最好将数据先提取出来,提取方式如下所示。
二、rostopic直接导出数据
topic是ROS系统中最常用的一种通讯方式,其以发布订阅的方式传递。在调试topic时,有很多指令可以使用,包括发布者、订阅者、发布率和 ROS 消息等。常用的rostopic指令如下,每个指令的使用方法可参考ros官网:http://wiki.ros.org/rostopic。
rostopic bw # display bandwidth used by topic
rostopic delay # display delay for topic which has header
rostopic echo # print messages to screen
rostopic find # find topics by type
rostopic hz # display publishing rate of topic
rostopic info # print information about active topic
rostopic list # print information about active topics
rostopic pub # publish data to topic
rostopic type # print topic type
在这些指令中,rostopic echo可以直接保存消息的内容到制定文件,其运行指令如下所示:
rostopic echo -p /joint_states/position > joint_anglen.txt
此指令的功能是将话题中的消息/joint_states/position保存到joint_anglen.txt文件中。
-p
选项为输出为画图的格式,其输出数据会自动用逗号隔开;
符号>
是清空文本内容,重新写入。符号>>
是接着末尾开始写入,不清空文件。
三、rosbag数据录制/回放/导出
ROS提供了数据记录与回放的功能包——rosbag,可以帮助开发者收集消息数据,然后再离线状态下回放。
3.1 录制数据
录制所有话题的指令如下:
rosbag record -a
选项-a
表明所有发布的话题都应该积累在一个bag文件中。
当运行一个复杂的系统时,可能会有几百个话题被发布。在这种系统中,我们可以只录制感兴趣的话题,rosbag record命令也支持只录制特定的话题到bag文件中。指令如下:
rosbag record -O subset /turtle1/cmd_vel /turtle1/pose
上述命令中的-O
参数告诉rosbag record将数据记录到名为subset.bag的文件中,而后面的topic参数告诉rosbag record只能订阅这两个指定的话题。
3.2 回放并提取信息
在实验阶段录制完数据之后,可以在后续的数据处理阶段回放并提取数据。
rosbag文件的回放指令如下:
rosbag play <your bagfile>
对于数据的提取,可以使用前述的rostopic echo指令将某个话题的信息存储在txt文件中,用来绘图。
rostopic echo -p /joint_states/position > joint_anglen.txt
温馨提示:
1 在回放和提取数据之前,先运行roscore;
2 在回放数据之前先运行rostopic echo相关指令等待数据回放,避免遗漏数据;(即数据回放指令是最后执行的)
本文的一个典型应用可以参考博客机械臂末端位姿和力传感器数据的提取与绘制,该博客记录了基于ROS的机器人系统的数据提取,处理与绘制的全过程。
总结
以上就是今天要讲的内容,总结了ROS系统重的数据可视化,录制,回放和提取等方法,最后完成数据提取之后,就可以用相关绘图软件或者代码读取和绘制提取出的txt文件。