本文为原创博客, 转载请注明出处:https://blog.csdn.net/q_z_r_s
机器感知 一个专注于SLAM、三维重建、机器视觉等相关技术文章分享的公众号 |
参考自:http://wiki.ros.org/ROS/Tutorials
【Beginner Level】ROS入门教程(一)
【Beginner Level】ROS入门教程(二)
【Beginner Level】ROS入门教程(三)
【Beginner Level】ROS入门教程(四)
【Beginner Level】ROS入门教程(五)
本节告诉你如何将来自一个正在运行的ROS系统的数据记录在一个*.bag
文件中. 然后在系统中回放数据, 是系统产生和之前相似的动作. 关键词: data
, rosbag
, record
, play
, info
, bag
.
bag
文件)topic data
将被放在bag file
.
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun turtlesim turtle_teleop_key
$ mkdir ~/bagfiles
$ cd ~/bagfiles
#记录所有`topic`的`messages`
$ rosbag record -a
在记录完数据之后, 通过Ctrl-C
结束rosbag
指令
bag
文件#Usage: 查看*.bag文件信息
$ rosbag info <your bagfile>
#回放数据; `-r 2`两倍回放数据
$ rosbag play <your bagfile>
rosbag play
默认 2 秒延时播放, 因为如果立即进行数据publish
的话, Subscriber
来不及立即接收消息, 因为它被告知有Publisher
需要一定的时间, 这样才能确保它能接收到完整的消息; 加速回放数据的轨迹会跟之前不一样, 这是因为附加的参数把键盘指令加速到了两倍.
#关闭所有的turtlesim节点, 重新运行程序
$ rosrun turtlesim turtlesim_node
$ rosrun turtlesim turtle_teleop_key
$ rosbag record -O subset /turtle1/cmd_vel /turtle1/pose
robag record/play
的局限性从以上实验可以发现, turtle
并不能准确的复现原始键盘输入的轨迹, 大致轮廓是相同的, 其原因是, turtlesim
跟踪的路径对时序上的小小改变很敏感, 切rosbag
准确复制running system
的能力也有限. 对诸如turtlesim
这类的节点, 微小的时序变化就会改变behavior
, 用户不应该期望完美的模仿behavior
.
roswtf
工具本节开始之前, 请确保roscore
没在运行
, 与之前不同, 这里要求roscore
不处于运行状态! 可通过如下指令进行测试:
$ ps -ef | grep -i rosmaster
#1.
$ roscd rosmaster
$ roswtf
#2.
$ roscd
$ roswtf
#3.
$ roscd
$ ROS_PACKAGE_PATH=bad:$ROS_PACKAGE_PATH roswtf
roswtf
可以发现很多其他类型的问题, 当你被编译或通信问题搞得找不到北时, 试试运行roswtf
, 也许它会给你指明方向.
本节讨论 ROS wiki 的布局, 并探讨如何找到你所需要的东西.