学习大纲:
1. 环境配置 (Setup)
1.1 启动 roscore
在使用 ROS 前,需要先启动 roscore。roscore 是 ROS 系统的核心,它负责节点之间的通信管理。按照教程中的指引,我使用以下命令启动了 roscore:
$ roscore
如果已经有 roscore 实例运行,系统会提示 "roscore cannot run as another roscore/master is already running"。这种情况下,只需保持现有的 roscore 运行即可。
1.2 运行 turtlesim
接下来,我使用 turtlesim 来进行实验,turtlesim 是一个简易的乌龟仿真器,用于演示 ROS 中的主题通信机制。运行命令如下:$ rosrun turtlesim turtlesim_node
这会在屏幕上启动一个简易的乌龟仿真器,接下来我们就可以用键盘来控制乌龟的运动。
1.3 键盘遥控乌龟
为了控制乌龟的运动,我启用了键盘遥控功能。通过以下命令,我可以使用键盘的方向键来操控乌龟的移动:
$ /opt/ros/noetic/share/rosrun turtlesim turtle_teleop_key
这里需要特别注意,当乌龟不响应时,可能是终端窗口没有被激活,这时要确保选择的是 turtle_teleop_key 的窗口。
2. 了解 ROS 主题 (ROS Topics)
通过学习,我了解到在 ROS 中,节点之间的通信是通过“主题”来完成的。每个节点可以发布或订阅某个主题,消息会通过主题在不同节点之间传递。例如,在本实验中,turtlesim_node 和 turtle_teleop_key 节点通过 /turtle1/cmd_vel 主题进行通信。turtle_teleop_key 发布键盘的按键数据,而 turtlesim_node 订阅并接收这些数据以控制乌龟的运动。
3. 使用 rqt_graph 可视化主题关系
rqt_graph 是一个非常有用的工具,它能够帮助我们可视化 ROS 系统中节点与主题之间的关系。在配置好 rqt_graph 后,我通过以下命令启动了它:
$ /opt/ros/noetic/share/rosrun rqt_graph rqt_graph
通过 rqt_graph,我可以清晰地看到 turtlesim_node 和 turtle_teleop_key 通过 /turtle1/cmd_vel 主题进行通信。该工具为我理解 ROS 系统中的通信机制提供了很大的帮助。
4. 使用 rostopic 进行主题操作
在这部分学习中,我主要学习了 rostopic 的几种常用操作。rostopic 是 ROS 系统中一个非常重要的命令行工具,它允许我们查看、发布和监控主题上的消息。以下是我学到的几个 rostopic 的操作命令:
4.1 查看主题数据(rostopic echo)
我通过 rostopic echo 命令查看了 /turtle1/cmd_vel 主题发布的速度命令:
$ rostopic echo /turtle1/cmd_vel
当我按下键盘上的箭头键时,可以看到 ROS 输出的线速度和角速度信息。这让我直观地理解了键盘输入如何转化为乌龟的运动指令。
4.2 列出所有活跃主题(rostopic list)
我使用 rostopic list 列出了所有正在发布和订阅的主题。使用以下命令可以查看详细信息:
$ /opt/ros/noetic/share/rosrun rostopic list -v
通过这个命令,我能够看到每个主题的详细信息,包括其消息类型以及哪些节点在发布和订阅这些主题。
4.3 查看主题的消息类型(rostopic type)
通过 rostopic type,我可以查看某个主题的消息类型。例如,查看 /turtle1/cmd_vel 的消息类型:
$ rostopic type /turtle1/cmd_vel
得知该主题使用的是 geometry_msgs/Twist 类型的消息,我进一步通过 rosmsg show 命令查看了 Twist 消息的结构:
$ /opt/ros/noetic/share/rosrun rosmsg show geometry_msgs/Twist
这帮助我理解了 ROS 消息的具体格式,以及主题之间的通信数据结构。
4.4 发布消息到主题(rostopic pub)
接下来,我学习了如何使用 rostopic pub 命令向某个主题发布消息。我尝试通过以下命令向 /turtle1/cmd_vel 主题发布一条速度指令,控制乌龟移动:
$ /opt/ros/noetic/share/rosrun rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
通过这个命令,我让乌龟以线速度 2.0 和角速度 1.8 旋转。这让我更加清楚地理解了如何通过 ROS 主题发布控制指令。
4.5 检测主题的发布频率(rostopic hz)
最后,我使用 rostopic hz 命令检测了 /turtle1/pose 主题的发布频率:
$ /opt/ros/noetic/share/rosrun rostopic hz /turtle1/pose
我观察到 turtlesim 发布位置信息的频率大约是 60Hz,这让我对节点之间数据发布的实时性有了更清晰的认识。
5. 使用 rqt_plot 绘制数据
为了更直观地理解主题发布的数据,我使用了 rqt_plot 工具。通过以下命令启动 rqt_plot:
$ /opt/ros/noetic/share/rosrun rqt_plot rqt_plot
我在 rqt_plot 中输入 /turtle1/pose/x 和 /turtle1/pose/y,观察到了乌龟在 x 和 y 轴上的位置随时间变化的实时曲线。这一可视化工具让我直观地理解了乌龟的位置信息是如何通过主题持续发布的。