当前位置: 代码迷 >> 综合 >> ROS2 Dashing源码编译和安装
  详细解决方案

ROS2 Dashing源码编译和安装

热度:68   发布时间:2024-02-10 02:00:22.0

ROS2 Dashing源码编译和安装

 

安装前的准备

1
2
3
4
5

官方教程:
https://index.ros.org/doc/ros2/Installation/Dashing/Linux-Development-Setup/

环境信息:
UBUNTU18.04LTS

可选项:

  1. 安装系统备份和恢复工具timeshift,避免发生灾难性错误后无法恢复,使用方法:链接
  2. 修改DNS(有助于避免安装过程中频繁出现的网络超时,如果你可以科学上网更好),教程链接
  3. 修改apt源(提高其它工具的下载速度)教程链接

搭建编译环境

ROS2在规划之初就约定了各个依赖的版本,具体请到此链接查看:REP 2000
我们使用的环境为18.04,所以对应的各个依赖项的版本如下:

搭建步骤

1. 设置语言环境

1
2
3

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

ROS编译及运行需要将语言编码设置为UTF-8,中文系统可以不需要设置(未测试

2. 添加ROS 2 apt仓库

1
2
3
4
5
6

#首先使用如下所示的apt授权我们的GPG密钥:
sudo apt update && sudo apt install curl gnupg2 lsb-release
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

#然后将存储库添加到您的源列表中:
sudo sh -c 'echo "deb http://packages.ros.org/ros2/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list'

3. 安装开发工具和ROS工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

sudo apt update && sudo apt install -y \
build-essential \
cmake \
git \
python3-colcon-common-extensions \
python3-pip \
python-rosdep \
python3-vcstool \
wget
# install some pip packages needed for testing
python3 -m pip install -U \
argcomplete \
flake8 \
flake8-blind-except \
flake8-builtins \
flake8-class-newline \
flake8-comprehensions \
flake8-deprecated \
flake8-docstrings \
flake8-import-order \
flake8-quotes \
pytest-repeat \
pytest-rerunfailures \
pytest \
pytest-cov \
pytest-runner \
setuptools
# install Fast-RTPS dependencies
sudo apt install --no-install-recommends -y \
libasio-dev \
libtinyxml2-dev
# install CycloneDDS dependencies
sudo apt install --no-install-recommends -y \
libcunit1-dev

 

 

4. 获取ROS 2代码

创建一个工作区并克隆所有存储库:

1
2
3
4

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

注:此步骤可能因为网络原因失败,多试几次
vcs是一个版本管理工具,你可以理解为它为git、svn等做了统一的封装

5. 使用rosdep安装依赖

1
2
3

sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro dashing -y --skip-keys "console_bridge fastcdr fastrtps libopensplice67 libopensplice69 rti-connext-dds-5.3.1 urdfdom_headers"

 

 

注:在执行最后一步时可能会失败,rosdep的本质相当于一个安装脚本(多个 sudo apt install),所以失败后重新执行几次,直到提示所有安装操作都成功即可。

6. 在工作区中构建代码

1
2

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

这个指令是编译所有ROS packages,所以在执行过程中可能会出现错误,官方文档中给出的解决方案如下:

Note: if you are having trouble compiling all examples and this is preventing you from completing a successful build, you can use AMENT_IGNORE in the same manner as CATKIN_IGNORE to ignore the subtree or remove the folder from the workspace. Take for instance: you would like to avoid installing the large OpenCV library. Well then simply $ touch AMENT_IGNORE in the cam2image demo directory to leave it out of the build process.

翻译:
注意:如果在编译所有示例时遇到麻烦,并且这妨碍了您成功完成构建,则可以AMENT_IGNORE按照与CATKIN_IGNORE相同的方式使用,以忽略子树或从工作空间中删除文件夹。例如:您希望避免安装大型OpenCV库。那么,只需在demo目录中将其排除在构建过程之外即可。$ touch AMENT_IGNOREcam2image

我的解决方案:
重新单独构建失败的packages,指令如下:

colcon build --package-select [PKG_NAME]

有的失败的包可能并不需要,不必理会。

 

 

至此,所有编译安装完成。

环境设置

. ~/ros2_dashing/install/setup.bash

安装命令自动补全工具

sudo apt install python3-argcomplete

在一个终端中,获取安装文件的源代码,然后运行C ++ talker

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

在另一个终端源中,安装文件,然后运行Python listener

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

您应该看到talker这是Publishing消息的listener说法以及这些消息的说法。这可以验证C ++和Python API是否正常工作。

 

备用编译器?

使用gcc以外的其他编译器来编译ROS 2很容易。如果分别为工作的C和C ++编译器设置环境变量CCCXX可执行文件,并重新触发CMake配置(通过使用--force-cmake-config或删除要受影响的软件包),则CMake将重新配置并使用其他编译器。

锵?

要将CMake配置为检测和使用Clang:

sudo apt install clang export CC=clang export CXX=clang++ colcon build --cmake-force-configure 

待办事项:使用ThreadSanitizer,MemorySanitizer

保持最新?

请参阅维护ROS 2的源签出以定期刷新源安装。

故障排除?

故障排除技术可以在这里找到。

卸载?

  1. 如果您按照上面的指示使用colcon安装了工作区,则“卸载”可能只是打开一个新终端而不是获取工作区setup文件的问题。这样,您的环境将表现为系统上没有安装Dashing。

  2. 如果您还试图释放空间,则可以使用以下方法删除整个工作区目录:

    rm -rf ~/ros2_dashing