使用 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使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
27天前
|
Ubuntu 编译器 C语言
Ubuntu 源码编译指定版本 make:神秘代码背后的激情冒险,等你来战!
【9月更文挑战第8天】在Ubuntu中,编译指定版本的源码`make`是一项挑战但也极具价值的任务。它允许我们根据特定需求定制软件,提升性能与功能适配。首先需安装必要工具包如GCC等;接着下载所需源码并阅读相关文档以了解编译要求。通过运行`./configure`、`make`及`sudo make install`命令完成编译安装流程。过程中可能遇到依赖项缺失或编译选项设置不当等问题,需根据错误提示逐一解决。对于大型项目,可利用多核编译加快速度。掌握这一技能有助于更好地探索开源世界。
28 2
|
2月前
|
Ubuntu Shell C++
在Ubuntu18.04上安装ros2的环境,ros2的常用命令:播放包、录制包等
在Ubuntu18.04上安装ros2的环境,ros2的常用命令:播放包、录制包等
43 1
|
2月前
|
Ubuntu Linux
ubuntu源码编译指定版本make
以上内容涵盖了在Ubuntu中编译安装指定版本软件的全过程,这是一个技术性很强的操作,不仅可以带来定制化的安装体验,同时也能增加对系统管理和软件构建流程的理解。遵循以上步骤,任何有一定基础的用户都能够按需编译和安装软件。
44 8
|
2月前
|
Ubuntu Linux Windows
如何在WSL中的ubuntu编译Linux内核并且安装使用ebpf?
请注意,在WSL1中可能会由于内核架构限制而无法成功进行以上过程,WSL2对于Linux内核的完整支持更为合适。此外,部分步骤可能因不同的Linux发行版或内核版本而异。
79 4
|
2月前
|
Ubuntu Apache
Ubuntu20.04下一键安装ROS1 Noetic
本文提供了一个简化在Ubuntu 20.04系统上安装ROS1 Noetic过程的一键安装脚本工具,该脚本通过优化配置和使用清华大学镜像源,加速了国内用户的下载速度,并自动完成环境设置和依赖安装,同时提供了详细的使用说明和源码。
192 0
Ubuntu20.04下一键安装ROS1 Noetic
|
2月前
|
Ubuntu 编译器 C语言
Ubuntu 源码编译指定版本 make:神秘代码背后的激情冒险,等你来战!
【8月更文挑战第19天】在Ubuntu中编译指定版本的`make`工具是一项高级技巧,能让你针对特定需求定制软件。首先确保已安装`build-essential`等必要组件。下载所需版本源码后,遵循README指南配置与编译。使用`./configure`检测环境,`make`编译,最后`sudo make install`安装。面对问题如缺失依赖或编译选项不当,需耐心解决。对于大型项目,可利用多核加速编译,如`make -j 4`。这一过程虽具挑战,却能显著提升软件性能与功能适配。
32 2
|
2月前
|
Ubuntu 机器人 虚拟化
Ubuntu22.04配置ROS2 Humble
这篇文章是关于如何在Ubuntu 22.04系统上配置ROS2 Humble的详细教程,包括虚拟机安装、环境配置、网络设置、软件源更换、ROS1和ROS2的安装步骤。
136 1
|
1月前
|
Ubuntu
编译ubuntu内核
编译ubuntu内核
|
2月前
|
Ubuntu Linux 开发工具
Windows11 WSL2 Ubuntu编译安装perf工具
Windows11 WSL2 Ubuntu编译安装perf工具
53 0
|
2月前
|
Ubuntu 开发工具 Android开发
Repo下载、编译AOSP源码:基于Ubuntu 21.04,android-12.1.0_r27
文章记录了作者在Ubuntu 21.04服务器上配置环境、下载并编译基于Android 12.1.0_r27版本的AOSP源码的过程,包括解决编译过程中遇到的问题和错误处理方法。
56 0
下一篇
无影云桌面