ROS实战(九)安装ROS2
摘要:转眼间三年已经过去,而我也开始面临毕业的问题。由于导师放养式的教学,导致我的论文一直没什么长进。抱怨没有用,一切靠自己。还是得把之前丢下的捡起来。
本文主要介绍如何在Linux平台上安装ROS2。
关键词:ROS2
ROS2安装
ROS2的安装受ubuntu发行版的限制,比如ubuntu 20.04 LTS只能安装foxy这个发行版;
ubuntu 22.04 LTS只能按照ROS2长期支持版humble这个发行版。
本文以ubuntu 20.04 LTS安装foxy发行版为例。
设置编码
1 | sudo apt update && sudo apt install locales |
安装必要软件
1 | sudo apt update && sudo apt install curl gnupg lsb-release software-properties-common |
设置源
此处注意,需要确认你的网络可以连接raw.githubusercontent.com,这里先下载完key然后上传到服务器
1 | curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key |
这里使用清华源
1 | echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null |
安装ROS2
1 | sudo apt update |
注意,如果是嵌入式设备,使用
1 | sudo apt install ros-foxy-ros-base python3-argcomplete -y |
如果需要安装编译的环境
1 | sudo apt install ros-dev-tools -y |
设置环境变量
1 | source /opt/ros/foxy/setup.bash |
ROS2测试
命令行
启动一个终端,允许一个数据的发布者节点:
1 | ros2 run demo_nodes_cpp talker |

启动第二个终端,通过以下命令启动一个数据的订阅者节点:
1 | ros2 run demo_nodes_py listener |

GUI
运行一个ROS的经典实例——小海龟仿真器
启动两个终端,分别执行如下指令:
1 | ros2 run turtlesim turtlesim_node |
第一句指令将启动一个蓝色背景的海龟仿真器,第二局指令将启动一个键盘控制节点,在该终端中点击键盘上的上下左右按键,就可以控制小海龟移动了。
常见的命令行操作
ROS2的命令行的操作机制与Linux相同,不过所有的操作都集中在ros2的总命令中,后面第一个参数表示不同的操作目的,比如node表示对节点的操作,topic表示对话题的操作,后面还可以继续跟参数表示具体操作。

接下来以小乌龟仿真为例,感受下ROS2命令行的主要功能,也对ROS2中的核心概念有一个大体了解。
运行节点程序
想要运行ROS2中的某个节点,可以使用ros2 run命令进行操作。
例如我们要运行海龟仿真节点:
1 | ros2 run turtlesim turtlesim_node |

我们要运行键盘控制节点:
1 | ros2 run turtlesim turtle_teleop_key |

查看节点信息
1 | ros2 node list |

1 | ros2 node info /turtlesim |

查看话题信息
使用以下命令即可查看:
1 | ros2 topic list |

查看指定话题的消息数据
1 | ros2 topic echo /turtle1/pose |
发布话题消息
想让海龟直接动起来,可以直接通过命令行发布话题指令:
1 | ros2 topic pub --rate 1 /turtule1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}" |

发送服务请求
一只小海龟太孤单,仿真器还提供了另外一个服务,产生海龟,我们试一试服务调用,再来一只小海龟,图片也如上图所示
1 | ros2 service call /spawn turtlesim/srv/Spwan "{x: 2, y: 2, theta: 0.2, name:''}"" |
发送动作目标
想让海龟完成一个具体动作,比如转到指定角度,仿真器提供的action可以实现:
1 | ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "theta: 3" |
再继续发布上述话题的基础上,会发现小乌龟在转变了角度以后继续转圈:

录制控制命令
系统中运行的数据有很多,如果想要把某段数据录制下来,然后再复现这段数据。
ros2中的rosbag命令可以实现上面的需求:
1 | ros2 bag record /turtle1/cmd_vel |

以上就是ROS2中的常见命令。