-目录
-背景
-基础准备
-任务
--1 安装turtlesim
--2 启动turtlesim
--3 使用turtlesim
--4 安装 rqt
--5 使用rqt
--6 话题重映射
-总结
背景
Turtlesim是一个用于学习ROS 2的轻量级模拟器。它说明了ROS 2在最基本的层面上是做什么的,让你知道你以后会用一个真正的机器人或机器人仿真做什么。
ros2工具是用户管理、自省和与ROS系统交互的工具。它支持针对系统及其操作的不同方面的多个命令。可以使用它来启动节点、设置参数、收听主题等等。ros2工具是核心ROS 2安装的一部分。
rqt是用于ROS 2的图形用户界面(GUI)工具。在rqt中完成的所有操作都可以在命令行上完成,但是rqt提供了一种更加用户友好的方式来操作ROS 2元素。
基础准备
见前一节环境变量设置。
任务
1 安装turtlesim
根据你的ROS2版本安装turtlesim包:
sudo apt update
sudo apt install ros-humble-turtlesim
检查这个包已经被安装:
ros2 pkg executables turtlesim
上条命令将返回turtlesim可执行文件:
turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node
2 启动turtlesim
在终端中输入如下命令启动turtlesim
ros2 run turtlesim turtlesim_node
将弹出一个窗口,窗口中心随机出现一只海龟。
在终端中将看到来自节点的消息,可以看到默认海龟的名称和它生成的坐标:
[INFO] [turtlesim]: Starting turtlesim with node name /turtlesim
[INFO] [turtlesim]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]
3 使用turtlesim
再新开一个终端并source一下setup.bash文件,运行一个新的节点去控制之前节点产生的乌龟运动:
ros2 run turtlesim turtle_teleop_key
此时,应该打开了三个窗口:一个运行turtlesim_node的终端、一个运行turtle_teleop_key的终端和turtlesim窗口。布置这些窗口,以便可以看到turtlesim窗口,终端运行turtle_teleop_key,以便您可以在turtlesim中控制海龟。
使用键盘上的方向键来控制乌龟。它会在屏幕上移动,用它附带的“笔”画出它到目前为止所遵循的路径。
可以使用相应命令的列表子命令查看节点及其关联的话题、服务和动作:
ros2 node list
ros2 topic list
ros2 service list
ros2 action list
4 安装rqt
打开一个新的终端安装rqt及其插件:
sudo apt update
sudo apt install ~nros-humble-rqt*
运行rqt:
rqt
5 使用rqt
当第一次运行rqt时,窗口将是空白的。只需从顶部的菜单栏中选择Plugins > Services > Service Caller。
注意:rqt可能需要一些时间来定位所有的插件。如果单击Plugins,但没有看到Services或任何其他选项,则应该关闭rqt并在终端中输入命令rqt--force-discover。
使用Service下拉列表左侧的刷新按钮来确保turtlesim节点的所有服务都可用。
单击Service下拉列表查看turtlesim的服务,并选择/spawn服务。
5.1 使用spawn服务
使用rqt来调用/spawn服务,/spawn将在turtlesim窗口中创建另一个海龟。
通过双击Expression列中的空单引号之间,为新海龟指定一个惟一的名称,如turtle2。可以看到,这个表达式对应于name的值,并且是字符串类型。
接下来输入生成新海龟的有效坐标,如x = 1.0和y = 1.0。
如果你试图生成一个与现有海龟同名的新海龟,比如默认的turtle1,你会在运行turtlesim_node的终端中得到一条错误消息:
[ERROR] [turtlesim]: A turtle named [turtle1] already exists
要生成turtle2,需要通过单击rqt窗口右上方的call按钮来调用该服务。
如果服务调用成功,应该看到在你输入的x和y坐标处生成一个新的海龟(同样是随机设计)。
如果你在rqt中刷新服务列表,你还会看到现在有与新龟/turtle2/…相关的服务。,此外还有/turtle1/....
5.2 使用set_pen服务
现在让我们使用/set_pen服务给turtle1一个唯一的笔:
r、g和b的值介于0到255之间,它们设置了turtle1使用的画笔的颜色,width设置了线条的厚度。
要让turtle1绘制一条明显的红线,将r的值更改为255,将width的值更改为5。不要忘记在更新值之后调用服务。
如果您返回到turtle_teleop_key正在运行的终端并按下箭头键,您将看到turtle1的笔已经更改。
当然,由于turtle2没有通信节点,所以无法移动乌龟2。
6 重映射
您需要第二个远程操作节点来控制turtle2。但是,如果您尝试像以前一样运行相同的命令,您会注意到这个命令也控制着turtle1。改变这种行为的方法是重新映射cmd_vel话题。
新开终端source后,运行如下命令:
ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel
现在,可以在这个终端处于激活状态时移动turtle2,在运行turtle_teleop_key的另一个终端处于激活状态时移动turtle1。
7 关闭turtlesim
如果要停止仿真,可以在turtlesim_node终端输入Ctrl + C,在turtle_teleop_key终端输入q。
总结
使用turtlesim和rqt是学习ROS 2核心概念的重要方法。