0%

ROS 2编译与安装

以下内容对应Arch Linux, Debian/Ubuntu系发行版系统的教程,如果是其他系统请酌情按照自己的环境修改。另外,对于Arch Linux,还可参考 ROS - Arch Linux Wiki,我有经常维护该页面。

本安装教程对应ros2.repos,链接版本是Galactic。虽然发行时社区声称Galactic不默认支持Ubuntu 18.04,但经过一番探索,还是可以支持的,只在一些软件的版本上(比如PyQt等)有些许差别,均可通过下述方法修复。

修改字符格式(一般情况不用执行,除非你的locale是其他语言)

1
2
3
4
5
6
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

更新Ubuntu源(只有Ubuntu发行版需要)

注意,这里需要分辨自己的版本。

Ubuntu 18.04:

1
sudo apt install curl gnupg2 lsb-release 
1
2
3
4
5
6
sudo vim /etc/apt/sources.list

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
1
2
3
sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu/ $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo apt update

Ubuntu 20.04:

1
sudo apt install curl gnupg2 lsb-release 
1
2
3
4
5
6
sudo vim /etc/apt/sources.list

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
1
2
3
sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu/ $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo apt update

安装编译所需依赖

对于Arch Linux:
安装ROS 2的相关依赖:
1
yay -S --noconfirm ros-arch-deps

建立Sip所需链接

1
2
3
sudo mkdir -p /usr/share/sip
sudo ln -s /usr/lib/python3.9/site-packages/PyQt5 /usr/share/sip/.
sudo ln -s /usr/lib/python3.9/site-packages/PyQt5/bindings/* /usr/share/sip/PyQt5/.
安装其他依赖:
1
yay -S --noconfirm ompl vtk pcl ceres-solver gazebo
对于Ubuntu系的发行版:
安装ROS 2的依赖

这部分如果全复制可能会失败,如果哪个失败就单独安装哪个,或者一条一条安装。Ubuntu的APT的软件包依赖关系并不够严谨,所以有时候会处理不了这些逻辑。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
sudo apt update && sudo apt install -y \
build-essential \
cmake \
git \
libbullet-dev \
python3-colcon-common-extensions \
python3-flake8 \
python3-pip \
python3-pytest-cov \
python3-rosdep \
python3-setuptools \
python3-vcstool \
python3-lark
python3-lark-parser \
python3-sip \
python3-numpy \
libfreetype-dev \
pyqt5-dev \
wget \
libasio-dev \
libtinyxml2-dev \
libeigen3-dev \
libpcl-dev \
libxrandr-dev \
libxaw7-dev \
liblog4cxx-dev \
libassimp-dev \
libopencv-dev \
python3-testresources \
libgraphicsmagick++1-dev \
libgflags-dev \
libgoogle-glog-dev \
libsuitesparse-dev \
libgles2-mesa-dev \
libxt-dev \
libasio-dev \
libsdl2-dev \
doxygen \
libcurl4-openssl-dev \
libsqlite3-dev \
libbison-dev \
libncurses-dev \
libacl1-dev


//install some pip packages needed for testing
python3 -m pip install -U \
argcomplete \
flake8 \
flake8-blind-except \
flake8-builtins \
flake8-class-newline \
flake8-comprehensions \
flake8-deprecated \
flake8-docstrings \
flake8-import-order \
flake8-quotes \
pytest-repeat \
pytest-rerunfailures \
pytest \
pytest-cov \
pytest-runner \
setuptools \
importlib-metadata \
importlib-resources

安装SIP和PyQT5相关的包

这里提供的是4.19.25版本的sip,由于qt_gui_cpp的限制,只能使用sip4(虽然已经更新到6)。

Arch Linux用户可以直接安装sip4,无需此步骤。

Ubuntu相关用户:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
wget https://www.riverbankcomputing.com/static/Downloads/sip/4.19.25/sip-4.19.25.tar.gz
tar -xvf sip-4.19.25.tar.gz
cd sip-4.19.25
python3 configure.py
make
sudo make install

python3 -m pip install PyQt5
python3 -m pip install PyQt5-sip

# For Ubuntu 18.04
sudo mkdir /usr/share/sip
sudo ln -s ~/.local/lib/python3.6/site-packages/PyQt5 /usr/share/sip/.
sudo ln -s ~/.local/lib/python3.6/site-packages/PyQt5/bindings/* /usr/share/sip/PyQt5/.

# For Ubuntu 20.04
sudo mkdir /usr/share/sip
sudo ln -s ~/.local/lib/python3.8/site-packages/PyQt5 /usr/share/sip/.
sudo ln -s ~/.local/lib/python3.8/site-packages/PyQt5/bindings/* /usr/share/sip/PyQt5/.

编译ROS2源码

1
2
3
sudo mkdir /opt/ros2
sudo chown $USER /opt/ros2
colcon build --merge-install --install-base /opt/ros2/galactic --parallel-workers 20

期间如果发生warning,忽略即可,所以一般需要运行两次。

添加脚本

如果你使用的是zsh,则添加如下脚本到~/.zshrc。

1
2
3
4
5
6
7
ros2_on(){
export ROS_DOMAIN_ID=42
export ROS_VERSION=2
export ROS_PYTHON_VERSION=3
export ROS_DISTRO=galactic
source /opt/ros2/galactic/setup.zsh
}

如果你使用的是bash,则添加如下脚本到~/.bashrc。

1
2
3
4
5
6
7
ros2_on(){
export ROS_DOMAIN_ID=42
export ROS_VERSION=2
export ROS_PYTHON_VERSION=3
export ROS_DISTRO=galactic
source /opt/ros2/galactic/setup.bash
}

对于ROS_DOMAIN_ID的值,可以按照自己的需求去修改。

使用方法

更新环境变量后,运行ros2_on即可部署ROS 2环境