ROS入门教程#

ROS参考官方教程,下面的是笔者自己的学习记录。

Note

本文使用的ROS版本是foxy,Ubuntu版本是20.04,foxy是ROS的LTS版本性能稳定,太新的版本可能会出现意想不到的问题。

1. 安装ROS#

请参考:

2. 配置ROS2环境变量#

source /opt/ros/foxy/setup.bash

3. 安装turtlesim#

对于ROS来说turtlesim是一个非常简单的仿真,但是使用它足以向初学者说明ROS底层的运行机制(nodes, topic, services),所以turtlesim通常是ROS入门的第一课。

sudo apt update

sudo apt install ros-foxy-turtlesim
  • 检查下turtlesim包的安装情况
ros2 pkg executables turtlesim

如果安装正确,将会返回如下列表:

turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node

4. 启动turtlesim#

ros2 run turtlesim turtlesim_node

同时在命令行中会打印出如下信息:

# turtlesim_node是ROS的一个node(节点)
[INFO] [turtlesim]: Starting turtlesim with node name /turtlesim

[INFO] [turtlesim]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]

在turtlesim_node中可以生成多只乌龟,启动turtlesim的同时将会自动生成一只乌龟,从上面命令行信息可以看出默认生成的乌龟的名字是turtle1。

5. 使用turtlesim#

  • turtlesim_node其实是ROS的一个节点,该节点可以控制乌龟移动

  • 在这里我们启动另一节点turtle_teleop_key,该节点能够接受键盘(Arrow Keys)信息,并将该信息发送给turtlesim节点

# 启动后使用“上 下 左 右”键即可控制乌龟移动
ros2 run turtlesim turtle_teleop_key
  • turtlesim_node节点接收到按键信息后就会执行相应的动作

使用下面的命令,可以查看节点机器相关的服务,话题,行为等信息:

ros2 node list
ros2 topic list
ros2 service list
ros2 action list

6. 安装rqt#

rqt是ROS2的一个GUI工具,rqt提供能做的事情在命令行中都能做,但是rqt提供的更友好的图形化操作方式。

sudo apt update

sudo apt install ~nros-foxy-rqt*

7. 使用rqt#

7.1 运行rqt#

在命令行使用rqt命令,即可运行rqt:

rqt
  • 首次启动rqt,rqt的窗口将是空白的

  • 在rqt顶部菜单选择 Plugins > Services > Service Caller

点击service对应的下三角将可以看到turtlesim node的所有服务,如果没有显示完整的服务列表,请点击重载(reload)按钮。

7.2 尝试spawn服务#

调用spawn服务将会在turtlesim中新生成一个乌龟。

  • x,y指的是新生成乌龟的坐标位置
  • name string指的是新生成乌龟的名字
  • turtlesim默认生成的乌龟名字是turtle1
  • 名字不能重复,所以这里我们取名为turtle2

参数设置好之后,点击Call按钮,你将会看到在turtlesim界面中新生成了一只乌龟turtle2。

7.3 使用set_pen服务#

小乌龟在移动的同时会绘制出移动轨迹,set_pen服务就是用来设置该轨迹的画笔的参数,比如画笔的颜色、粗细等。

如上图所示,我们来设置turtle1的画笔为纯红色,宽度为5,然后点击Call按钮,然后当我们再次移动turtle1时,将会绘制出红色宽度5的轨迹线。

8. Remapping(重映射)#

上面我们使用rqt的spawn服务新生成了一只乌龟turtle2,那么如何去控制turtle2呢?

使用ROS Remapping机制,将原来发送给turtle1的指令信息全都重映射给turtle2,然后就可以使用键盘(Arrow keys)去控制turtle2了。具体操作如下:

  • 首先重新启动一个终端(记得设置ROS环境变量)

  • Remapping

ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel
  • 现在就可以使用键盘(Arrow keys)去控制turtle2了