前言

内容概括:

本篇文章记录了ros2 humble 在 ubuntu20.04上源码编译过程,以及报错问题解决。
ros2humble源码安装官方文档:源码安装文档地址
根据官方文档进行安装,并解决安装过程中会遇到的问题。

系统要求:
ubuntu 22.04 / ubuntu 20.04
大约20G磁盘空间(20G可以保证编译过程中磁盘不被占满)
有科学上网工具(连接外网,建议整个过程都打开)


第一步、设置locale

确保有一个支持UTF-8的区域设置。官方文档建议设置为英文'en',一般大家正常使用的都是中文'zh',避免后续出错最好按照指令设置为英文。

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 存储库

1.首先确保Ubuntu Universe存储库是启用的

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

2.添加ros2秘钥

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

在执行 sudo apt update时如果有报错,需要手动修改(换源或者把报错的源注释掉)一下系统源 /etc/apt/sources.list。

在执行 sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg 时会报错 : curl:(35) OpenSSL SSL_connect: Connection reset by peer in connection to raw.githubusercontent:433,即使在浏览器可以打开网址,但在终端无法连接

在这里插入图片描述
解决办法:

①使用国内gitee地址
sudo curl -sSL https://gitee.com/JCxiaohu/rosdistro/blob/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg 
②直接添加公匙
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key F42ED6FBAB17C654

3.将存储库添加到源列表中。

sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'

第三步、安装开发工具和ROS工具

1、安装普通功能包

sudo apt update && sudo apt install -y \
  python3-flake8-docstrings \
  python3-pip \
  python3-pytest-cov \
  ros-dev-tools

2、根据系统版本安装功能包

安装过程中可能会有某个功能包报错,需要单独手动安装
ubuntu 22.04:

sudo apt install -y \
   python3-flake8-blind-except \
   python3-flake8-builtins \
   python3-flake8-class-newline \
   python3-flake8-comprehensions \
   python3-flake8-deprecated \
   python3-flake8-import-order \
   python3-flake8-quotes \
   python3-pytest-repeat \
   python3-pytest-rerunfailures

ubuntu 20.04:

python3 -m pip install -U \
   flake8-blind-except \
   flake8-builtins \
   flake8-class-newline \
   flake8-comprehensions \
   flake8-deprecated \
   flake8-import-order \
   flake8-quotes \
   "pytest>=5.3" \
   pytest-repeat \
   pytest-rerunfailures

第四步、获取ros2源码

mkdir -p ~/ros2_humble/src
cd ~/ros2_humble
vcs import --input https://raw.githubusercontent.com/ros2/ros2/humble/ros2.repos src

在使用vsc import拉取 ros2 源码时会报错,是因为这是需要从网站上下载ros2.repos文件,即使在浏览器可以打开网址,但在终端无法连接
解决办法:需要手动下载,先在浏览器打开https://raw.githubusercontent.com/ros2/ros2/humble/ros2.repos,右键保存,注意保存的文件是 ros2.repos,拷贝到~/ros2_humble 目录下与src 同级,再执行命令:

vcs import --input ros2.repos src

如果出现以下报错则说明ros2.repos文件错误,需要重新下载:
在这里插入图片描述
成功拉取源码结果图:可以在~/ros2_humble/src中
在这里插入图片描述

第五步、使用rosdep安装依赖项

ROS 2包构建在经常更新的Ubuntu系统上,在安装新软件包之前确保您的系统是最新的。

sudo apt upgrade
sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src -y --skip-keys "fastcdr rti-connext-dds-6.0.1 urdfdom_headers"

执行 rosdep init 会报错:同样是因为终端运行无法连接到国外源网站
ERROR:cannot download defult sources list from
在这里插入图片描述

治标又治本的解决办法:rosdep init报错解决(注意系统的默认python版本,是python2就在python2.7目录下修改,python3就在python3目录下修改)

执行 rosdep install时会有个别依赖包报错,如下:
在这里插入图片描述
解决办法:手动安装 sudo apt-get install < package_name >, 也可以在命令后添加 --fix-missing
安装完成如下:
在这里插入图片描述

第六步、在工作空间中编译源码

要求:科学上网工具,足够的运行内存(虚拟机需要设置6G以上)

cd ~/ros2_humble/
colcon build --symlink-install

执行colcon build --symlink-install就是对src中所有源码进行编译,会遇到部分功能包报错,如下:

报错一:在编译过程中需要下载内容,但终端无法连接到下载地址

在这里插入图片描述
报错原因:在编译过程中需要下载内容,但终端无法连接到下载地址
解决办法:首先,在浏览器打开报错网址下载文件到本地;然后,根据报错在src目录下搜索找到报错的功能包,修改cmakelists文件,把cmakelists中报错的URL 由 网址 改为所下载文件的 绝对路径,注意要在绝对路径前加file://如下图:
在这里插入图片描述

报错二:可能会遇到系统强制结束编译过程,因为运行内存不够用

在这里插入图片描述
解决办法:要有足够大的运行内存分配,至少6G以上

编译完成

ros2 humble完整版共有345个功能包需要编译,编译完成结果如下:
在这里插入图片描述

第七步、source环境设置、运行ros2 demo

编译完成后需要测试是否能正常使用,设置环境、测试demo
第一个终端:

. ~/ros2_humble/install/local_setup.bash
ros2 run demo_nodes_cpp talker

第二个终端:

. ~/ros2_humble/install/local_setup.bash
ros2 run demo_nodes_py listener

测试结果:
在这里插入图片描述
在这里插入图片描述
至此,ros2 humble源码编译安装就完成了。

总结

总体来说ros2 源码编译安装过程不复杂,就是对系统环境和网络有特殊要求,国外源是安装过程中最大的问题,希望大家遇到问题可以多找、多搜索、多尝试,多试几次就成功了,有没有见过的报错和问题可以交流交流。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐