使用 Jetson Orin Nano 在 Ubuntu 20.04 中编译安装 ROS2 Foxy
本文详细介绍了在 Jetson Orin Nano 类似的 ARM 设备上编译安装 ROS2 的 Foxy 分支的过程,包括从源代码编译、安装依赖库、设置环境变量等方面。同时,针对安装过程中可能遇到的问题,提供了相应的解决方案,以帮助读者顺利完成 ROS2 的安装。
Jetson 边缘计算设备之前的 Ubuntu 版本为18.04,在出了 Orin 系列后,Ubuntu 版本可以安装 20.04 的,对于直接安装 ROS2 不使用容器化时,可以直接安装 foxy 分支版本。但是,因为 Jetson 设备是 ARM 架构的,若从源码构建我们并不能使用官方在 Github 提供的预编译版本,所以需要走通过源码自行编译这条路。
为了保证在国内快速拉取依赖包,首先需要通过 Ubuntu 的包管理 GUI 界面将软件源更换为国内,你也可以直接前往 Ubuntu Ports 软件仓库镜像使用帮助[1] 选择 20.04 LTS 根据帮助说明进行修改清华的仓库镜像。
修改 /etc/apt/sources.list
:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
deb http://ports.ubuntu.com/ubuntu-ports/ focal-security main restricted universe multiverse
# deb-src http://ports.ubuntu.com/ubuntu-ports/ focal-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-proposed main restricted universe multiverse
同时,把ROS的软件源也按照说明进行处理:ROS2 软件仓库镜像使用帮助[2]
下载 ROS 的 GPG Key:
sudo apt install curl gnupg2
sudo curl -sSL https://gitcode.net/marin1993/rosupdate/-/raw/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] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu focal main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update
注意:此时如果你不想折腾,走编译安装的坑,并且不在意安装的是否为最新版本,那么你可以直接使用下面的命令安装,并直接转到最后的安装验证一节。以下的安装命令适用于开发测试阶段:
sudo apt install ros-foxy-desktop python3-argcomplete ros-dev-tools
apt 安装
接下来参考官方的编译安装说明[3]往下走即可,出现的问题主要就是国内的网络问题。
错误
开发工具:
sudo apt update && sudo apt install -y \
libbullet-dev \
python3-pip \
python3-pytest-cov \
ros-dev-tools
安装用于测试等一些 Python 库
python3 -m pip install -U \
argcomplete \
flake8-blind-except \
flake8-builtins \
flake8-class-newline \
flake8-comprehensions \
flake8-deprecated \
flake8-docstrings \
flake8-import-order \
flake8-quotes \
pytest-repeat \
pytest-rerunfailures \
pytest
安装 Fast-RTPS Cyclone DDS 的依赖
sudo apt install --no-install-recommends -y \
libasio-dev \
libtinyxml2-dev \
libcunit1-dev
创建工作区并克隆所有存储库,注意给git使用代理,不然拉不下来,或者使用镜像仓库。使用下面的命令即可使用镜像的仓库进行下载。
mkdir -p ~/ros2_foxy/src
cd ~/ros2_foxy
vcs import --input https://gitcode.net/marin1993/rosupdate/-/raw/master/foxy_ros2.repos src
仓库
其实最主要的问题是 rosdep 这一块的处理,不像 git 那么好操作,代理使用起来也是很容易丢包失败,我们可以体验到各种的 ERROR 和 Failed 的,这些是 Github 访问不畅造成的。
我们可以将资源改为国内的,这里主要使用 gitcode 和 ghproxy 代理站点。
在开始安装依赖前,需要修改 rosdep2 的一些源码中的仓库参数,修改后的文件可以在这个仓库找到,如果版本还一致,可以直接替换: https://gitcode.net/marin1993/rosupdate
对于文件的修改内容,主要是将 github 资源的前缀改为为此前缀 https://gitcode.net/mirrors/ros/rosdistro/-/raw/master/
。以下是详细修改内容:
risdep2 版本 0.22.2,修改此目录下文件 /usr/lib/python3/dist-packages/rosdep2
•sources_list.py 第64行:DEFAULT_SOURCES_LIST_URL = 'https://gitcode.net/marin1993/rosupdate/-/raw/master/20-default.list'
•rep3.py 第36行:REP3_TARGETS_URL = 'https://gitcode.net/mirrors/ros/rosdistro/-/raw/master/releases/targets.yaml'
•gbpdistro_support.py 第34行:FUERTE_GBPDISTRO_URL = 'https://gitcode.net/mirrors/ros/rosdistro/-/raw/' \ 'master/releases/fuerte.yaml'
rosdistro 版本 0.9.0,修改 /usr/lib/python3/dist-packages/rosdistro/__init__.py
。
第68行:DEFAULT_INDEX_URL = 'https://gitcode.net/mirrors/ros/rosdistro/-/raw/master/index-v4.yaml'
接下来的操作就回归正常了:
sudo apt upgrade
sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src -y --skip-keys "fastcdr rti-connext-dds-5.3.1 urdfdom_headers"
成功
当看到 All required rosdeps installed successfully 就代表依赖安装成功了,接下来就是编译了。
cd ~/ros2_foxy/
colcon build --symlink-install
此时只需要等待即可,这边在Jetson Orin Nano设备上用了一个小时多的时间,ros2 就编译完成了。
编译完成
首先我们需要将 ros 加入环境变量,对于使用 apt 方式安装的用户,使用下面的命令添加:
echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
source ~/.bashrc
对于编译安装,因为路径不同,则应使用下面这个命令:
echo "source ~/ros2_foxy/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
处理好环境变量我们就可以简单测试安装好的 ROS2 了,使用 talker 和 listener 节点可以在控制台中进行简单的测试。只需在两个不同的控制台分别执行以下命令: ros2 run demo_nodes_cpp talker
和 ros2 run demo_nodes_py listener
。
在本文中,我们详细介绍了如何在 Jetson Orin Nano 设备上编译安装 ROS2 的 Foxy 分支版本的过程,并提供了相应的解决方案以帮助读者顺利完成 ROS2 的安装。如果在使用过程中遇到任何问题可以参考查阅 ROS2 官方文档。如果你对ROS感兴趣,可以关注我的其他相关文章。
[1]
Ubuntu Ports 软件仓库镜像使用帮助: https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu-ports/
[2]
ROS2 软件仓库镜像使用帮助: https://mirrors.tuna.tsinghua.edu.cn/help/ros2/
[3]
官方的编译安装说明: https://docs.ros.org/en/foxy/Installation/Alternatives/Ubuntu-Development-Setup.html#id9