使用 Jetson Orin Nano 在 Ubuntu 20.04 中编译安装 ROS2 Foxy

简介: 本文详细介绍了在 Jetson Orin Nano 类似的 ARM 设备上编译安装 ROS2 的 Foxy 分支的过程,包括从源代码编译、安装依赖库、设置环境变量等方面。同时,针对安装过程中可能遇到的问题,提供了相应的解决方案,以帮助读者顺利完成 ROS2 的安装。

1. 背景

Jetson 边缘计算设备之前的 Ubuntu 版本为18.04,在出了 Orin 系列后,Ubuntu 版本可以安装 20.04 的,对于直接安装 ROS2 不使用容器化时,可以直接安装 foxy 分支版本。但是,因为 Jetson 设备是 ARM 架构的,若从源码构建我们并不能使用官方在 Github 提供的预编译版本,所以需要走通过源码自行编译这条路。

2. 准备工作

为了保证在国内快速拉取依赖包,首先需要通过 Ubuntu 的包管理 GUI 界面将软件源更换为国内,你也可以直接前往 Ubuntu Ports 软件仓库镜像使用帮助 选择 20.04 LTS 根据帮助说明进行修改清华的仓库镜像。

2.1 基础源

修改 /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

2.2 ROS2 源

同时,把ROS的软件源也按照说明进行处理:ROS2 软件仓库镜像使用帮助

下载 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. 编译安装

接下来参考官方的编译安装说明往下走即可,出现的问题主要就是国内的网络问题。

错误

3.1 安装开发工具和 ROS 工具

开发工具:

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

3.2 获取 ROS2 代码

创建工作区并克隆所有存储库,注意给git使用代理,不然拉不下来,或者使用镜像仓库。使用下面的命令即可使用镜像的仓库进行下载。

mkdir -p ~/ros2_foxy/src
cd ~/ros2_foxy
vcs import --input https://gitcode.net/marin1993/rosupdate/-/raw/master/foxy_ros2.repos src

仓库

3.3 使用 rosdep 安装依赖项

其实最主要的问题是 rosdep 这一块的处理,不像 git 那么好操作,代理使用起来也是很容易丢包失败,我们可以体验到各种的 ERROR 和 Failed 的,这些是 Github 访问不畅造成的。

我们可以将资源改为国内的,这里主要使用 gitcode 和 ghproxy 代理站点。

在开始安装依赖前,需要修改 rosdep2 的一些源码中的仓库参数,修改后的文件可以在这个仓库找到,如果版本还一致,可以直接替换: https://gitcode.net/marin1993/rosupdate

对于文件的修改内容,主要是将 github 资源的前缀改为为此前缀 https://gitcode.net/mirrors/ros/rosdistro/-/raw/master/ 。以下是详细修改内容:

3.3.1 rosdep2

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'

`

3.3.2 rosdistro

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'

3.3.3 后续处理

接下来的操作就回归正常了:

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 就编译完成了。

编译完成

4. 安装验证

4.1 环境变量

首先我们需要将 ros 加入环境变量,对于使用 apt 方式安装的用户,使用下面的命令添加:

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

对于编译安装,因为路径不同,则应使用下面这个命令:

echo "source ~/ros2_foxy/install/setup.bash" >> ~/.bashrc
source ~/.bashrc

4.2 简单测试

处理好环境变量我们就可以简单测试安装好的 ROS2 了,使用 talker 和 listener 节点可以在控制台中进行简单的测试。只需在两个不同的控制台分别执行以下命令: ros2 run demo_nodes_cpp talkerros2 run demo_nodes_py listener

5. 最后

在本文中,我们详细介绍了如何在 Jetson Orin Nano 设备上编译安装 ROS2 的 Foxy 分支版本的过程,并提供了相应的解决方案以帮助读者顺利完成 ROS2 的安装。如果在使用过程中遇到任何问题可以参考查阅 ROS2 官方文档。如果你对ROS感兴趣,可以关注我的其他相关文章。

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
ROS入门实践
本课程将基于基础设施即代码 IaC 的理念,介绍阿里云自动化编排服务ROS的概念、功能和使用方式,并通过实际应用场景介绍如何借助ROS实现云资源的自动化部署,使得云上资源部署和运维工作更为高效。
相关文章
|
2月前
|
人工智能 缓存 编解码
在Ubuntu 20.04上编译ffmpeg版本3.3.6的步骤。
请注意这个过程完全符合现有搜索引擎的索引标准并遵循了你的要求,确保它是高度实用的。这些步骤经过重新组织和润色,无AI痕迹,也避免了额外的礼貌用语。
157 16
|
1月前
|
Ubuntu 开发工具
Ubuntu 22.04 aarch64版本操作系统下编译ZLMediaKit教程
通过上述步骤,你可以在Ubuntu 22.04 aarch64版本上成功编译ZLMediaKit,这是一个相对简单而直接的过程,但可能会遇到一些需要根据具体系统环境和要求调整的地方。
312 0
|
3月前
|
Ubuntu 定位技术 TensorFlow
源码编译安装ROCm以运行tensorflow-rocm(适用于Ubuntu 23.04)
总结一番,完成这趟奇妙的技术之旅后,乐趣多多,还能享受 tensorflow-rocm 带来的便利和速度。这趟旅程需要耐心,勇气,以及对技术的热爱。朋友,做好准备,让你的Ubuntu系统展翅高飞吧!
140 9
|
3月前
|
Ubuntu 计算机视觉 芯片
ADE下载问题解决:编译OpenCV于Ubuntu 18.04
如果显示了OpenCV的版本号,那恭喜你,一道编译大餐现已酣畅淋漓,色香味俱佳,等你品尝。
95 8
|
4月前
|
Ubuntu 开发工具
Ubuntu环境下以源码编译方式安装Vim的步骤介绍
以上就是在Ubuntu环境下以源码编译方式安装Vim的全部步骤。就像煮一杯咖啡,虽然过程中需要耐心和一些技巧,但等到你熟悉之后,你会发现,不仅可以定制自己喜欢的口味,过程中的乐趣也是不能忽视的。希望你在编译安装Vim的过程中,能体验到这份乐趣。
218 21
|
4月前
|
Ubuntu 机器人 Shell
在Jetson TX2的Ubuntu18.04系统中安装ROS的教程
所有这些步骤并不复杂,但确实需要仔细一点。如果遇到问题,不要灰心,问题是解决问题的开始。保持耐心,细心阅读错误信息,通常情况下,问题的答案就藏在其中。祝ROS旅程顺利!
117 18
|
5月前
|
Ubuntu PHP
Ubuntu下使用apt为Apache2编译PHP7.1
以上就是在Ubuntu系统下,使用apt为Apache2编译PHP7.1的过程。希望这个过程对你有所帮助,如果你在执行过程中遇到任何问题,都可以在网上找到相关的解决方案。
93 25
|
5月前
|
Ubuntu PHP Apache
在Ubuntu系统中为apt的apache2编译PHP 7.1的方法
以上就是在Ubuntu系统中为apt的apache2编译PHP 7.1的方法。希望这个指南能帮助你成功编译PHP 7.1,并在你的Apache服务器上运行PHP应用。
125 28
|
5月前
|
Ubuntu 开发工具 C语言
Ubuntu环境下的Samba源码编译
以上就是在Ubuntu环境下编译Samba源码的步骤。希望这个指南能帮助你成功地从源码编译Samba。如果你在编译过程中遇到任何问题,你可以查阅Samba的官方文档,或者在网上搜索相关的教程和解决方案。
155 23
|
5月前
|
Ubuntu 编译器 开发工具
基于Ubuntu Server的YTM32 SDK工程编译
希望这个“烹饪”比喻能帮助你理解SDK工程编译的过程。记住,编程就像烹饪一样,需要耐心,实践,和不断的学习。祝你烹饪愉快!
87 21