安装ROS2

设置语言环境

确保你的语言环境能支持UTF-8。如果你使用的是minimal environment,比如docker的容器,那语言环境可能是类似POSIX之类的。我们需要进行下面的测试。但是,如果你正在使用另外一种支持UTF-8的语言,应该也是可以的。

locale  # check for UTF-8

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  # verify settings

设置源

将ROS2 apt仓库添加到你的系统,具体做法为:

sudo apt install software-properties-common
sudo add-apt-repository universe

添加ROS2安装包源信息:

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

更新系统source.list:

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

安装ROS2的包

更新apt repository。

sudo apt update

升级系统已经安装的packages。

sudo apt upgrade

推荐安装桌面版本: ROS, RViz, demos, tutorials。

sudo apt install ros-foxy-desktop

环境设置

通过sourcing下面的文件设置环境:

source /opt/ros/foxy/setup.bash

安装参数补全

ROS2 命令行工具使用argcomplete进行自动补全。所以,如果你想进行自动补全,需要安装argcomplete。

sudo apt install -y python3-argcomplete 

测试例子

在一个终端A中,source了设置文件之后,运行一个c++的发布消息的应用。

source /opt/ros/foxy/setup.bash 
ros2 run demo_nodes_cpp talker 

在另外一个终端B中,source了设置文件之后,运行一Python的接收消息的应用。

source /opt/ros/foxy/setup.bash 
ros2 run demo_nodes_py listener 

这样就可以看到talker正在发布消息,同时listener打印收到的消息。这个可以验证C++和Python APIs都可以正常工作。

运行结果如下:

终端A

neardi@LPA3588:~$ ros2 run demo_nodes_cpp talker
[INFO] [1672131270.256481314] [talker]: Publishing: 'Hello World: 1'
[INFO] [1672131271.256501645] [talker]: Publishing: 'Hello World: 2'
[INFO] [1672131272.256387812] [talker]: Publishing: 'Hello World: 3'
[INFO] [1672131273.256458682] [talker]: Publishing: 'Hello World: 4'
[INFO] [1672131274.256557592] [talker]: Publishing: 'Hello World: 5'
[INFO] [1672131275.256358218] [talker]: Publishing: 'Hello World: 6'

终端B

neardi@LPA3588:~$ ros2 run demo_nodes_py listener
[INFO] [1672131270.308648992] [listener]: I heard: [Hello World: 1]
[INFO] [1672131271.259757148] [listener]: I heard: [Hello World: 2]
[INFO] [1672131272.259962390] [listener]: I heard: [Hello World: 3]
[INFO] [1672131273.259896764] [listener]: I heard: [Hello World: 4]
[INFO] [1672131274.260288792] [listener]: I heard: [Hello World: 5]
[INFO] [1672131275.262437902] [listener]: I heard: [Hello World: 6]