ubuntu22.04 LTS 从源码安装ROS2

参考官方安装指导:
https://docs.ros.org/en/humble/Installation/Alternatives/Ubuntu-Development-Setup.html

ubuntu22.04对应的ROS2版本为ROS2 humble

下面是参考官方教程的安装过程.

系统设置

设置语言环境

语言环境须支持UTF-8, 最好是英文环境.
首先运行

locale

可查看是否支持UTF-8, 如需要, 可使用下面的命令安装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

添加ROS 2 apt 软件库

首先确保已添加ubuntu universe

apt-cache policy | grep universe

查看是否包括这一行:

500 http://us.archive.ubuntu.com/ubuntu jammy/universe amd64 Packages
    release v=22.04,o=Ubuntu,a=jammy,n=jammy,l=Ubuntu,c=universe,b=amd64

如果没有上面这行,则添加universe软件源:

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

下面添加ROS 2源的GPG密钥

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

下面将repo添加到源列表中:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

安装开发工具与ROS工具

sudo apt update && sudo apt install -y \
  build-essential \
  cmake \
  git \
  python3-colcon-common-extensions \
  python3-flake8 \
  python3-flake8-blind-except \
  python3-flake8-builtins \
  python3-flake8-class-newline \
  python3-flake8-comprehensions \
  python3-flake8-deprecated \
  python3-flake8-docstrings \
  python3-flake8-import-order \
  python3-flake8-quotes \
  python3-pip \
  python3-pytest \
  python3-pytest-cov \
  python3-pytest-repeat \
  python3-pytest-rerunfailures \
  python3-rosdep \
  python3-setuptools \
  python3-vcstool \
  wget

如果这里用apt安装时提示无法连接,问题不大,换源即可.
打开系统软件"软件和更新",在"ubuntu软件"一栏找到"下载自", 下拉选择其他站点,里面有很多腾讯华为阿里之类的源,改了之后,重新输入上面的命令,大概就没问题了.

获取ROS 2 源码

创建工作区并下载所有repo:

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

这里最后一个命令可能会报错, 这是因为网络原因. 有几种解决办法:

  1. 切换网络(手机热点/WiFi/换个时间再试试…)
  2. 手动将这些源码从github下载到本地(比较麻烦)
  3. ~/ros2_humble/ros2.repos中的网址全部改为github的镜像网站
  4. 使用代理+proxychains实现在终端使用代理,可以从根本上解决网络问题.

如果成功,则会显示如下

.......................................................................................................
=== src/ament/ament_cmake (git) ===
Cloning into '.'...
=== src/ament/ament_index (git) ===
Cloning into '.'...
(下面略)

使用rosdep安装依赖

输入以下命令

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 update时,有可能又会遇到前面的网络问题,(如果你比较惨,可能到这里已经牢牢记住raw.githubusercontent.com这个URL了)解决方法同上.

运行最后一行命令之后,会自动安装许多东西,耐心等待.

在工作区build代码

首先要确保你的环境中没有其他安装的ROS2,保证在文件~/.bashrc中没有

source /opt/ros/${ROS_DISTRO}/setup.bash

下一步就要开始build了,输入以下命令

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

这个过程会非常久,可以拿起手机,耐心等(摸)待(鱼),时不时抬头看一下没报错就行.
在这个过程中仍会出现网络问题,比如我这里就遇到了

CMake Error at ext-singleproducerconsumer-stamp/download-ext-singleproducerconsumer.cmake:170 (message):
  Each download failed!

    error: downloading 'https://github.com/cameron314/readerwriterqueue/archive/ef7dfbf553288064347d51b8ac335f1ca489032a.zip' failed
          status_code: 28
          status_string: "Timeout was reached"
          log:
          --- LOG BEGIN ---
            Trying 20.205.243.166:443...

  Connection timed out after 60001 milliseconds

  Closing connection 0

但是不用慌, 再试一次可能就行了, 之前build好的包不会被重新build, 所以屡败屡战就好了.

环境配置

使用配置脚本

通过配置脚本来配置环境

. ~/ros2_humble/install/local_setup.bash

尝试一些例子

在一个终端运行talker

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

在另一个终端运行listener

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

将可以看到talker发送信息,listener接收信息.

环境变量

如果你不希望每次打开新的终端都要输入

. ~/ros2_humble/install/local_setup.bash

那么可以在~/.bashrc文件中添加环境变量
打开该文件并在最后添加

. ~/ros2_humble/install/local_setup.bash

保存后在终端输入

source ~/.bashrc

即可.

下一步

下一步就是学习官方提供的教程和demo了:
https://docs.ros.org/en/humble/Tutorials.html

卸载

如果你是按照上面的步骤安装,所谓的"卸载"就只需要你打开终端时不运行setup文件(如果添加了环境变量,则删掉这一行)即可.这样你的环境和没有安装ROS2 humble是没有区别的.

如果你要删除,则直接把工作区的文件夹删掉就好了

rm -rf ~/ros2_humble

你可能感兴趣的:(ubuntu,linux)