在教程之前先闲聊几句,为什么要学习ROS2呢?之前为了研发一款无人驾驶小车,学习了一下ROS平台(以下简称ROS1),在使用过程中出现了一个很不好解决的问题,就是无人驾驶需要车车协同,同时还需要一个全局的控制系统对车进行调度,而在ROS1中多机通信很不好实现,在寻找优化方案的过程中了解到了ROS2,发现ROS2可以完美的解决这个问题,而且还支持跨平台,所以就有了学习ROS2的想法,之前有整理过一些基于ROS1的无人驾驶虚拟仿真资料,接下来的ROS2应用案例也还是基于无人驾驶虚拟仿真环境来完成。

注:以下说明主要以功能实现为主,原理上不做太多说明。

我的系统是64位ubuntu20.04,安装的ROS2版本是Foxy Fitzroy


1、设置语言环境

确保系统语言环境支持UTF-8,可通过locale命令检查语言环境,如果不支持,则通过以下命令设置:

$ sudo apt update && sudo apt install locales
$ sudo locale-gen en_US en_US.UTF-8
$ sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
$ export LANG=en_US.UTF-8

为保证设置没有问题,系统最好不要做任何汉化操作,通过locale命令检查语言环境:

2、设置软件源

我们需要添加ROS2的apt存储库到系统中,首先用apt授权GPG密钥

$ sudo apt update && sudo apt install curl gnupg2 lsb-release
$ sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

注:如果授权失败,请重新授权,无提示即为成功

然后将库添加到源代码列表中:

$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

3、安装ROS2软件包

首先,更新apt存储库缓存:

$ sudo apt update

桌面完全版安装(推荐),包含ROS, RViz,示例,教程等:

$ sudo apt install ros-foxy-desktop -y

也可以安装基础版,通信库,消息包,命令行工具。没有GUI工具:

$ sudo apt install ros-foxy-ros-base -y

注:安装过程中如果有下载失败的,最后安装将无法完成,在安装失败后,再次执行安装命令,直到安装成功。


4、设置环境变量

$ source /opt/ros/foxy/setup.bash

该命令是将ROS环境变量临时添加到系统中,每次新开终端都需要执行该命令,如果系统已经安装ROS1,运行该命令会提示ROS_DISTRO已设置,直接无视即可,使用ROS时切换到ROS的环境变量即可。

为了使用方便,也可以将设置命令写入bashrc文件,这样每次新开终端,系统自动执行该命令:

$ echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
$ source ~/.bashrc

5、测试

注:如果环境变量设置命令写入bashrc中,则无须重复设置环境变量,否则新开终端都需要执行source 命令。

新开一个终端,运行C++的talker节点:

$ ros2 run demo_nodes_cpp talker

再开一个终端,运行python的listener节点:

$ ros2 run demo_nodes_py listener

可以看到talker在发布信息,而listener接受到了talker发布的信息。这就验证了c++和Python api已经可以正常工作。


6、安装自动补全工具

如果在测试时是手动输入命令的话,你应该发现一个问题,就是ros2命令没有自动补全功能,非常的不方便,所以我们还需要再安装一个自动补全工具:

$ sudo apt install python3-argcomplete

安装后重启终端,就可以像ROS1一样有自动补全提醒功能了。


7、卸载

如果您需要卸载ROS2或切换到基于源代码的安装,一旦您已经安装了二进制文件,请执行以下命令:

$ sudo apt remove ~nros-foxy-* && sudo apt autoremove

如果还需要移除存储库,则可以运行以下命令:

$ sudo rm /etc/apt/sources.list.d/ros2.list
$ sudo apt update
$ sudo apt autoremove
$ sudo apt upgrade