您的位置:首页 > 其它

ROS学习记录(三)--bag的使用,roswtf

2017-12-30 17:04 281 查看

录制与回放数据

将ROS系统运行过程中的数据录制到一个.bag文件中,然后通过回放数据来重现相似的运行过程

录制数据,通过创建bag文件

执行以下命令:

roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key


以上操作将会启动两个节点——一个turtlesim可视化节点和一个turtlesim键盘控制节点。

在运行turtlesim键盘控制节点的终端窗口中你应该会看到如下类似信息:

Reading from keyboard
---------------------------
Use arrow keys to move the turtle.


这时按下键盘上的方向键应该会让turtle运动起来。

需要注意的是要想控制turtle运动你必须先选中启动turtlesim键盘控制节点时所在的终端窗口而不是显示虚拟turtle所在的窗口

录制所有发布的话题!

首先让我们来检查看当前系统中发布的所有话题。

要完成此操作请打开一个新终端并执行:

rostopic list -v

Published topics:
* /turtle1/color_sensor [turtlesim/Color] 1 publisher
* /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher
* /rosout [rosgraph_msgs/Log] 3 publishers
* /rosout_agg [rosgraph_msgs/Log] 1 publisher
* /turtle1/pose [turtlesim/Pose] 1 publisher

Subscribed topics:
* /turtle1/cmd_vel [geometry_msgs/Twist] 1 subscriber
* /rosout [rosgraph_msgs/Log] 1 subscriber


上面所发布话题部分列出的话题消息是唯一可以被录制保存到文件中的的话题消息,因为只有消息已经发布了才可以被录制

/turtle1/cmd_vel话题是teleop_turtle节点所发布的命令消息并作为turtlesim节点的输入。

而/turtle1/color_sensor和/turtle1/pose是turtlesim节点发布出来的话题消息

现在我们开始录制。

打开一个新的终端窗口,在终端中执行以下命令:

mkdir ~/bagfiles
cd ~/bagfiles
rosbag record -a


建立一个用于录制的临时目录,然后在该目录下运行rosbag record命令,并附加-a选项,该选项表示将当前发布的所有话题数据都录制保存到一个bag文件中。

然后回到turtle_teleop节点所在的终端窗口并控制turtle随处移动10秒钟左右。

在运行rosbag record命令的窗口中按Ctrl-C退出该命令。

现在检查看~/bagfiles目录中的内容,你应该会看到一个以年份、日期和时间命名并以.bag作为后缀的文件。

这个就是bag文件,它包含rosbag record运行期间所有节点发布的话题。

检查并回放bag文件

已经使用rosbag record命令录制了一个bag文件,接下来我们可以使用rosbag info检查看它的内容使用rosbag play命令回放出来

接下来我们首先会看到在bag文件中都录制了哪些东西。

我们可以使用info命令,该命令可以检查看bag文件中的内容而无需回放出来。

在bag文件所在的目录下执行以下命令:

rosbag info 20-12-30-16-48-32.bag


这些信息告诉你bag文件中所包含话题的名称、类型和消息数量

我们可以看到,在之前使用rostopic命令查看到的五个已公告的话题中,其实只有其中的四个在我们录制过程中发布了消息。

因为我们带-a参数选项运行rosbag record命令时系统会录制下所有节点发布的所有消息

回放bag文件

首先在turtle_teleop_key节点运行时所在的终端窗口中按Ctrl+C退出该节点。

让turtlesim节点继续运行。

在终端中bag文件所在目录下运行以下命令:

rosbag play <your bagfile>


等待一会,小乌龟就动起来了!

rosbag play -r 2 <your bagfile>


可以改变消息发布的速率

录制数据子集

rosbag record命令支持只录制某些特别指定的话题到单个bag文件中,这样就允许用户只录制他们感兴趣的话题

如果还有turtlesim节点在运行,先退出他们,然后重新启动(relaunch)键盘控制节点相关的启动文件(launch file):

rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key


在bag文件所在目录下执行以下命令:

rosbag record -O subset /turtle1/cmd_vel /turtle1/pose


上述命令中的-O参数告诉rosbag record将数据记录保存到名为subset.bag的文件中,同时后面的话题参数告诉rosbag record只能录制这两个指定的话题。

然后通过键盘控制turtle随处移动几秒钟,最后按Ctrl+C退出rosbag record命令。

现在检查看bag文件中的内容(rosbag info subset.bag)

你应该会看到只包含录制时指定的话题

rosbag/rosplay局限性

在前述部分中你可能已经注意到了turtle的路径可能并没有完全地映射到原先通过键盘控制时产生的路径上——整体形状应该是差不多的,但没有完全一样。

造成该问题的原因是turtlesim的移动路径对系统定时精度的变化非常敏感。

rosbag受制于其本身的性能无法完全复制录制时的系统运行行为,rosplay也一样

roswtf

ROS入门教程-1.1.18 roswtf入门

接下来做什么?

使用模拟器

即使你有一台真实的机器人,先从模拟器开始学习也是一个不错的选择,这样出问题的时候你不用担心机器人会伤害到你自己或者损坏一台昂贵的机器人。

你可以从PR2 模拟器 或者 Turtlebot 模拟器入手。还可以搜索一台机器人并查看它是否提供了自己的模拟器。

现在你可能会尝试使用’teleop’程序包(package)来控制模拟的机器人(比如:turtlebot_teleop)或者运用你掌握的知识来查看话题(topic),编写程序发布恰当的消息来驱动你的机器人。

使用 RViz

RViz是一款强大的可视化工具,它允许你查看机器人中的传感器和内部状态

rviz用户指南会教你如何使用。

理解 TF

TF
4000
程序包(package)提供在机器人所使用到的各种坐标系之间的变换功能,并保持跟踪这些变换的变化。当你使用任何真实的机器人时理解好TF是必不可少的,所以学习TF相关的教程是值得的。

如果你正在打造一台你自己的机器人,此刻你可能会考虑给你的机器人设计一个URDF 模型。如果你正在用的是一台“标配”的机器人,可能已经有人帮你设计好了。不过,你可能依然值得去简单了解一下URDF程序包(package)。

更进一步

现在,你可能已经准备好开始让你的机器人去执行更复杂的任务,那么下面的链接可能会对你有帮助:

actionlib - actionlib 程序包(package)为可抢占式的任务提供一个标准接口,并广泛应用在ROS中的“高层次”程序包(packages)中。

navigation - 2D 导航: 绘图及路径规划。

MoveIt - 用来控制机器人的手臂.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: