作为尝鲜ROS2个人建议安装最新版本目前虽然Dashing为一个长期支持版本但是发布时间比较早,在最新Eloquent的中新添加的功能还是不少,我最开始装的也是Dashing版本,但是在后面的使用中发现功能还是不如最新版的完善,虽然这个版本只支持到2020年11月但是还是推荐用这个版本,今年5月份应该还会发布一个版本
本文参考 官网教程个人进行翻译,记录安装过程

设置语言环境

首先我们要进行语言环境的设置,确保语言环境为UTF-8。对于一般电脑这一步基本上没有什么问题,但是如果使用的是docker这种,语言环境不是很完善,可能只支持POSIX(通常说的ASCII编码),这就可能造成乱码。

我们可以用过locale查看当前的语言环境
下面是我电脑的输出

LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=zh_CN.UTF-8
LC_TIME=zh_CN.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=zh_CN.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=zh_CN.UTF-8
LC_NAME=zh_CN.UTF-8
LC_ADDRESS=zh_CN.UTF-8
LC_TELEPHONE=zh_CN.UTF-8
LC_MEASUREMENT=zh_CN.UTF-8
LC_IDENTIFICATION=zh_CN.UTF-8
LC_ALL=

只要是出现的是这种UTF-8就可以
关于locale的更多内容大家可以百度,总之一句话ros2需要UTF-8

下面是官方推荐的设置,注意下面的操作会把当前系统的语言改为英文的

# 生成所需的语言环境
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

添加安装源

首先添加秘钥

sudo apt update && sudo apt install curl gnupg2 lsb-release
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

然后把库添加到更新源的列表

sudo sh -c 'echo "deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list'

安装ROS2

更新apt缓存

sudo apt update

和ros1一样有两个版本可以选,根据个人需求选取一个版本进行安装
1.桌面版按照包含: ROS, RViz, demos, tutorials等内容比较全面,推荐按照这个版本

sudo apt install ros-eloquent-desktop

2.基本版本只包含: 通讯库,消息包,命令行工具。此版本没有GUI工具,只使用于资源比较限制的计算机按照

sudo apt install ros-eloquent-ros-base

配置环境

这个操作和ros1一样,我们把这个操作加入到.bashrc或者其他shell的配置文件中

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

如果电脑中存在ros1版本会弹一个下面的警告,我们先暂时忽略

ROS_DISTRO was set to 'melodic' before. Please make sure that the environment does not mix paths from different distributions.

ros2的命令可以通过argcomplete完成自动补全,按照下面软件获得自动补全功能

sudo apt install python3-argcomplete

测试安装

到此就按照完成了,相比ros1安装步骤简单了不少
下面我们通过简单的一个例子进行测试
首先我们打开一个终端运行一个C++的talker如果运行报错记得source一下

ros2 run demo_nodes_cpp talker

我们再打开一个终端运行一个Python的listener如果运行报错记得source一下

ros2 run demo_nodes_py listener

这时候在talker模块会出现

[INFO] [talker]: Publishing: 'Hello World: 1'
[INFO] [talker]: Publishing: 'Hello World: 2'
[INFO] [talker]: Publishing: 'Hello World: 3'

这时候在listener模块会出现

[INFO] [listener]: I heard: [Hello World: 3]
[INFO] [listener]: I heard: [Hello World: 4]
[INFO] [listener]: I heard: [Hello World: 5]

好了到现在就把ros2的C++和Python接口都测试了

安装ros1的桥

按照ros1的桥可以和ros1进行通讯

sudo apt update
sudo apt install ros-eloquent-ros1-bridge

后续

有一个小小的问题,ros1和ros2的会出现一点冲突。最新source的一个版本会覆盖之前的版本。
如果sourceros2之后ros1将无法运行,也不要慌只需要source一下ros1的配置脚本就可以运行ros1了。
具体原因是ROS_PYTHON_VERSION ROS_VERSION ROS_DISTRO这三个变量有冲突。
个人建议把经常使用的一个版本放入.bashrc中,要使用另外一个版本时在使用之前source一下

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐