ros学习笔记2——常用概念

超、凢脫俗 2022-10-06 00:43 280阅读 0赞

一、rosbag

参考:
1、https://blog.csdn.net/weixin_42905141/article/details/100057323
2、https://www.jianshu.com/p/901c2ebb4e7f
3、ROS2入门教程-rosbag简介
4、【课程:古月居】古月·ROS入门21讲 | 一学就会的ROS机器人入门教程

rosbag 既可以指命令行中数据包相关命令,也可以指 c++/python 的 rosbag 库。这里的 rosbag 是指前者。

rosbag 主要用于记录、回放、分析 rostopic 中的数据。它可以将指定 rostopic 中的数据记录到 .bag 后缀的数据包中,便于对其中的数据进行离线分析和处理。

对于 subscribe 某个 topic 的节点来说,它无法区分这个 topic 中的数据到底是实时获取的数据还是从 rosbag 中回放的数据。这就有助于我们基于离线数据快速重现曾经的实际场景,进行可重复、低成本的分析和调试。

二、rostopic: ROS话题

2.1 命令概述










































命令 详细说明
rostopic list 显示活动的话题目录
rostopic echo [话题名称] 实时显示指定话题的消息内容
rostopic find [类型名称] 显示使用指定类型的消息的话题
rostopic type [话题名称] 显示指定话题的消息类型
rostopic bw [话题名称] 显示指定话题的消息带宽(bandwidth)
rostopic hz [话题名称] 显示指定话题的消息数据发布周期
rostopic info [话题名称] 显示指定话题的信息
rostopic pub [话题名称] [消息类型] [参数] 用指定的话题名称发布消息

参考:
1、ROS学习笔记9(了解ROS话题)
2、ROS-ROS命令(四)rostopic: ROS话题

首先确保roscore已经运行, 打开一个新的终端:

  1. roscore

使用命令打开小乌龟

  1. rosrun turtlesim turtlesim_node

通过键盘远程控制turtle的运动

  1. rosrun turtlesim turtle_teleop_key

现在你可以使用键盘上的方向键来控制turtle运动了。如果不能控制,请选中turtle_teleop_key所在的终端窗口以确保你的按键输入能够被捕获。
在这里插入图片描述
现在你可以控制turtle运动了,下面我们一起来看看这背后发生的事。

turtlesim_node节点和turtle_teleop_key节点之间是通过一个ROS话题来互相通信的。

turtle_teleop_key在一个话题上发布按键输入消息,而turtlesim则订阅该话题以接收该消息。

下面让我们使用rqt_graph来显示当前运行的节点和话题。

  1. rosrun rqt_graph rqt_graph

你会看到类似下图所示的图形:
在这里插入图片描述
如果你将鼠标放在/turtle1/command_velocity上方,相应的ROS节点(蓝色和绿色)和话题(红色)就会高亮显示。正如你所看到的,turtlesim_node和turtle_teleop_key节点正通过一个名为 /turtle1/command_velocity的话题来互相通信。

2.2 rostopic介绍

rostopic命令工具能让你获取有关ROS话题的信息。

你可以使用帮助选项查看rostopic的子命令:

  1. rostopic -h

rostopic bw display bandwidth used by topic
rostopic echo print messages to screen
rostopic hz display publishing rate of topic
rostopic list print information about active topics
rostopic pub publish data to topic
rostopic type print topic type

接下来我们将使用其中的一些子命令来查看turtlesim。

2.3 使用 rostopic echo

rostopic echo可以显示在某个话题上发布的数据。

用法:

  1. rostopic echo [topic]

让我们在一个新终端中看一下turtle_teleop_key节点在/turtle1/cmd_vel话题(非hydro版)上发布的数据。请运行:

  1. rostopic echo /turtle1/cmd_vel

你可能看不到任何东西因为现在还没有数据发布到该话题上。接下来我们通过按下方向键使turtle_teleop_key节点发布数据。记住如果turtle没有动起来的话就需要你重新选中turtle_teleop_key节点运行时所在的终端窗口。

现在当你按下向上方向键时应该会看到下面的信息:
在这里插入图片描述
现在让我们再看一下rqt_graph(你可能需要刷新一下ROS graph)。

正如你所看到的,rostopic echo现在也订阅了turtle1/command_velocity话题。
在这里插入图片描述

2.4 使用 rostopic list

rostopic list能够列出所有当前订阅和发布的话题。

让我们查看一下list子命令需要的参数,在一个新终端中运行:

  1. rostopic list -h

在这里插入图片描述
在rostopic list中使用verbose选项:

  1. rostopic list -v

这会显示出有关所发布和订阅的话题及其类型的详细信息。

2.5 ROS Messages

话题之间的通信是通过在节点之间发送ROS消息实现的。

对于发布器(turtle_teleop_key)和订阅器(turtulesim_node)之间的通信,发布器和订阅器之间必须发送和接收相同类型的消息。

这意味着话题的类型是由发布在它上面的消息类型决定的。

使用rostopic type命令可以查看发布在某个话题上的消息类型。

2.6 使用 rostopic type

rostopic type 命令用来查看所发布话题的消息类型。

  1. rostopic type /turtle1/cmd_vel

在这里插入图片描述
我们可以使用rosmsg命令来查看消息的详细情况

  1. rosmsg show geometry_msgs/Twist

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,280人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ROS概念

    节点(Node) 执行单元 执行具体任务进程,独立运行的可执行文件 不同节点可使用不同的编程语言,可分布式运行在不同主机上 节点在系统中的名称必须是