rosbag数据记录与回放(以乌龟移动为例)

       为了方便调试,ROS提供了数据记录与回放的功能包:rosbag。该指令记录了ROS系统运行时的消息流,开发者可以在离线状态下回放这些数据。
       以下以ROS小乌龟为例进行实验。

$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun turtlesim turtle_teleop_key
$ mkdir bagfiles && cd bagfiles
$ rosbag record -a
$ rosbag info bagfile.bag
$ rosbag play bagfile.bag

        前面3条指令是启动ROS小乌龟,通过键盘控制小乌龟的移动;

        第4条指令是创建文件夹存放记录的bag包;

        第5条指令是数据记录,-a(all)参数意思是记录所有发布的消息。停止记录在该窗口按下Ctrl+C即可。停止后在bagfiles文件夹内会新生成一个.bag文件,该文件的名称是自动的,以时间进行的命名。这条指令也可以用如下指令:

$ rosbag record -O result /turtle1/cmd_vel /turtle1/pose

        其中,-O参数的含义是指定了我们要保存的bag文件的名字,这里会生成result.bag。后面的/turtle1/cmd_vel/turtle1/pose则指定了我们要记录信息的话题;

        第6条指令是查看bag包的相关信息;

        第7条指令是播放所记录的数据,播放之前需要将turtle_teleop_key这个终端终止,并重启turtlesim_node,否则小乌龟会沿着录制停止时候的位置开始运动。

        注意:在上面第5步记录数据时可能会出现如下的警告提示:

 即:[ WARN] [1576311065.082263288]: /use_sim_time set to true and no clock published.  Still waiting for valid time...

        表现出的现象是:暂停了,并没有进行数据的录制。解决方案如下:

#录制前
$ rosparam set /use_sim_time false
#播放时
$ rosparam set /use_sim_time true

猜你喜欢

转载自blog.csdn.net/JIEJINQUANIL/article/details/103756185