跳到主要内容

ROS1 快速体验(Turtlesim)

使用小海龟 (Turtlesim) 案例快速体验 ROS1 常见基础概念和功能。

提示

该教程基于 ROS1 Noetic 的 Docker 镜像操作,但不局限于 Docker 环境,任何 ROS1 环境都可以操作。

若您是基于 Docker 环境操作,建议您先学习 Docker 的使用。

启动 Docker 脚本

使用以下命令启动 Docker 脚本:ros_noetic.sh 是在ROS1 环境搭建中创建的脚本。

radxa@device$
bash ros_noetic.sh

建议使用多个终端进入同一个 Docker 容器中,方便后续操作。

启动 Master 节点

ROS1 需要先启动 Master 节点,再启动 Turtlesim 节点。

radxa@docker$
roscore

启动 Turtlesim

使用以下命令启动 Turtlesim:

radxa@docker$
rosrun turtlesim turtlesim_node

该命令会创建 /turtlesim 节点和显示一个包含小海龟的窗口。

控制 Turtlesim

使用以下命令控制小海龟移动:

radxa@docker$
rosrun turtlesim turtle_teleop_key

该命令会创建 /teleop_turtle 节点。

提示

鼠标点击并停留在这个键盘控制的终端窗口,我们可以通过键盘上的方向键控制小海龟移动。

ROS1 基础概念

通过 Turtlesim 案例,我们可以进一步了解和使用 ROS1 的基础概念和命令。

提示

关闭正在运行的 ROS1 命令,可以使用 Ctrl + C 组合键。

ROS1 节点

节点是 ROS1 中的基本通信单元,通过发布者(Publisher)和订阅者(Subscriber)与其他节点交互。

提示

关键组成

  • 发布者:向话题(Topic)发布消息的接口
  • 订阅者:从话题接收消息的接口

查看节点

使用 rosnode list 命令查看节点:目前只运行启动 Turtlesim 的命令。

radxa@docker$
rosnode list

ROS1 话题

话题是 ROS1 中的发布/订阅通信机制,实现节点间的异步数据传输。

提示

通信角色

  • 发布者:将消息发送到指定话题
  • 订阅者:订阅话题并接收消息

查看话题

使用 rostopic list 命令查看话题:

radxa@docker$
rostopic list

发布话题

使用 rostopic pub 命令发布速度控制消息,让小乌龟移动:

rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "{linear: {x: 0.5, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.5}}"

该命令会以 10 Hz 的频率让小海龟以线速度 0.5 和角速度 0.5 移动。

订阅话题

使用 rostopic echo 命令订阅话题,查看话题消息:

radxa@docker$
rostopic echo -n 1 /turtle1/pose

该命令会在终端打印一次小海龟的位置。

ROS1 服务

服务是 ROS1 中的请求/响应通信机制,用于节点间的同步调用(如远程函数)。

提示

交互流程

  • 客户端:发送请求(Request)
  • 服务端:处理请求并返回响应(Response)

查看服务

使用 rosservice list 命令查看服务:

radxa@docker$
rosservice list

调用服务

使用 rosservice call 命令调用服务,让小乌龟清屏:

radxa@docker$
rosservice call /clear

该命令会清除Turtlesim窗口中的背景。