ROS 2 Foxy Fitzroy(以下简称Foxy)于2020年6月5日正式发布了,是LTS版本,支持到2023年5月。本文主要根据官方的编译安装教程[1]完成,并记录编译过程中遇到的问题。

1. 系统要求

在官方给出的Foxy目标系统中,Ubuntu Linux - Focal Fossa (20.04) 64位是首选,本文也选择Ubuntu 20.04 64位,其他还包括Debian Linux - Buster (10)、Fedora 32、Arch Linux、OpenEmbedded / webOS OSE,但Foxy还没有充分测试,不推荐使用。

 

2. 系统设置

(1) 设置locale

确保系统locale支持UTF-8,在终端运行locale查看。
如果不支持UTF-8,运行以下代码
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

(2) 添加ROS 2 apt仓库

1) 用apt命令认证GPG key
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 -
此时可能会遇到ros.asc无法下载的问题。
问题1:ERROR: unable to process source https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc 之类的错误,可能是因为raw.githubusercontent.com网站被墙了。
解决方法:修改hosts文件,添加这个网站的ip地址[2]
#打开hosts文件
sudo gedit /etc/hosts
#在文件末尾添加
2) 添加仓库到源列表中
推荐使用国内清华ROS 2镜像:
sudo sh -c 'echo "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list'
也可以使用官方ROS 2仓库,速度可能会慢。
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工具

sudo apt update && sudo apt install -y \
build-essential \
cmake \
git \
libbullet-dev \
python3-colcon-common-extensions \
python3-flake8 \
python3-pip \
python3-pytest-cov \
python3-rosdep \
python3-setuptools \
python3-vcstool \
wget
# install some pip packages needed for testing
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
# install Fast-RTPS dependencies
sudo apt install --no-install-recommends -y \
libasio-dev \
libtinyxml2-dev
# install Cyclone DDS dependencies
sudo apt install --no-install-recommends -y \
libcunit1-dev

3. 获取ROS 2代码

创建工作空间,并获取ROS 2代码。
mkdir -p ~/ros2_foxy/src
cd ~/ros2_foxy
wget https://raw.githubusercontent.com/ros2/ros2/foxy/ros2.repos
vcs import src < ros2.repos

如果Fast-DDS无法正常下载,自行下载解压到~/ros2_foxy/src/eProsima/Fast-DDS。

https://github.com/eProsima/Fast-DDS​github.com

4. 使用rosdep安装依赖

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

5. 编译ROS 2

cd ~/ros2_foxy/
colcon build --symlink-install
编译过程中遇到的问题如下:
问题2: ImportError: "from catkin_pkg.package import parse_package" failed: No module named catkin_pkg.package
解决方法[3]pip install catkin_pkg
问题3: importError: No module named em
解决方法[4]python -m pip install empy
问题4: importError: No module named lark
解决方法[5]python -m pip install lark-parser
问题5: can not locate Clang's built-in include directory
解决方法[6]重装shiboken2 sudo apt remove shiboken2 libshiboken2-dev libshiboken2-py3-5.14 pip3 install --user shiboken2
问题6: 几处因为ExternalProject_Add下载卡住的地方,修改对应的CMakeLists.txt。
解决方法: (1) ~/ros2_foxy/src/ros2/rosbag2/shared_queues_vendor/CMakeLists.txt, 8-33行
ExternalProject_Add(ext-singleproducerconsumer
PREFIX singleproducerconsumer
#DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/download
#URL https://github.com/cameron314/readerwriterqueue/archive/ef7dfbf553288064347d51b8ac335f1ca489032a.zip
#自行修改 `path-to-file', zip文件见附件readerwriterqueue-ef7dfbf553288064347d51b8ac335f1ca489032a.zip
URL /path-to-file/readerwriterqueue-ef7dfbf553288064347d51b8ac335f1ca489032a.zip
URL_MD5 64c673dd381b8fae9254053ad7b2be4d
#TIMEOUT
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
) # Concurrent and blocking concurrent queue by moodycamel - header only, don't build, install
ExternalProject_Add(ext-concurrentqueue
PREFIX concurrentqueue
#DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/download
#URL https://github.com/cameron314/concurrentqueue/archive/8f65a8734d77c3cc00d74c0532efca872931d3ce.zip
# 自行修改 `path-to-file', zip文件见附件concurrentqueue-8f65a8734d77c3cc00d74c0532efca872931d3ce.zip
URL /path-to-file/concurrentqueue-8f65a8734d77c3cc00d74c0532efca872931d3ce.zip
URL_MD5 71a0d932cc89150c2ade85f0d9cac9dc
#TIMEOUT
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
)
(2) ~/ros2_foxy/src/ros2/rviz/rviz_ogre_vendor/CMakeLists.txt 83-94行
 ExternalProject_Add(zlib-1.2.
#URL https://www.zlib.net/fossils/zlib-1.2.11.tar.gz
#自行修改 `path-to-file', zip文件见附件zlib-1.2.11.tar.gz
URL /path-to-file/zlib-1.2..tar.gz
URL_MD5 1c9f62f0778697a09d36121ead88e08e
#TIMEOUT
LOG_CONFIGURE ${should_log}
LOG_BUILD ${should_log}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/zlib-install
${extra_cmake_args}
-Wno-dev
)
156-186行
ExternalProject_Add(ogre-v1.12.1
# URL https://github.com/OGRECave/ogre/archive/v1.12.1.zip
#自行修改 `path-to-file', zip文件见附件external_projects/ogre-1.12.1.zip
URL /path-to-file/ogre-1.12..zip
URL_MD5 cdbea4006d223c173e0a93864111b936
# TIMEOUT
LOG_CONFIGURE ${should_log}
LOG_BUILD ${should_log}
CMAKE_ARGS
-DOGRE_STATIC:BOOL=OFF
-DOGRE_DEPENDENCIES_DIR=${CMAKE_CURRENT_BINARY_DIR}/ogredeps
-DOGRE_INSTALL_PDB:BOOL=OFF
-DOGRE_BUILD_DEPENDENCIES:BOOL=OFF
-DOGRE_BUILD_TESTS:BOOL=OFF
-DOGRE_BUILD_SAMPLES:BOOL=FALSE
-DOGRE_INSTALL_SAMPLES:BOOL=FALSE
-DOGRE_INSTALL_SAMPLES_SOURCE:BOOL=FALSE
-DOGRE_CONFIG_THREADS:STRING=
-DOGRE_RESOURCEMANAGER_STRICT:STRING=
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/ogre_install
-DOGRE_BUILD_LIBS_AS_FRAMEWORKS:BOOL=OFF
-DOGRE_BUILD_COMPONENT_PYTHON:BOOL=FALSE
-DOGRE_BUILD_COMPONENT_JAVA:BOOL=FALSE
-DOGRE_BUILD_COMPONENT_CSHARP:BOOL=FALSE
-DOGRE_BUILD_COMPONENT_BITES:BOOL=FALSE
${extra_cmake_args}
-Wno-dev
PATCH_COMMAND
${Patch_EXECUTABLE} -p1 -N < ${CMAKE_CURRENT_SOURCE_DIR}/pragma-patch.diff
COMMAND
${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/FindFreetype.cmake ${CMAKE_CURRENT_BINARY_DIR}/ogre-v1.12.1-prefix/src/ogre-v1.12.1/CMake/Packages/FindFreetype.cmake
)
(3) ~/ros2_foxy/src/eProsima/foonathan_memory_vendor/CMakeLists.txt,57-73行
externalproject_add(foo_mem-ext
#GIT_REPOSITORY foonathan/memory
#GIT_TAG c619113
#TIMEOUT
#自行修改 `path-to-file', zip文件见附件memory-master.zip
URL /path-to-file/memory-master.zip
URL_MD5 9fcf2cf8c63d9c74bf3d0c58ca98bf71
# Avoid the update (git pull) and so the recompilation of foonathan_memory library each time.
UPDATE_COMMAND ""
CMAKE_ARGS
-DFOONATHAN_MEMORY_BUILD_EXAMPLES=OFF
-DFOONATHAN_MEMORY_BUILD_TESTS=OFF
-DFOONATHAN_MEMORY_BUILD_TOOLS=ON
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/foo_mem_ext_prj_install
${extra_cmake_args}
-Wno-dev
${PATCH_COMMAND_STR}
)
(4) ~/ros2_foxy/src/ros2/rosbag2/zstd_vendor/CMakeLists.txt,32-43行
ExternalProject_Add(zstd-1.4.
#URL https://github.com/facebook/zstd/archive/v1.4.4.zip
#自行修改 `path-to-file', zip文件见附件zstd-1.4.4.zip
URL /path-to-file/zstd-1.4..zip
URL_MD5 3a5c3a535280b7f4dfdbd739fcc7173f
#TIMEOUT
SOURCE_SUBDIR build/cmake
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_install
-DZSTD_BUILD_STATIC=OFF
-DZSTD_BUILD_SHARED=ON
-DZSTD_BUILD_PROGRAMS=OFF
${extra_cmake_args})

6. 环境设置

打开~/.bashrc文件,在文件最后添加,这样每次打开终端会自动执行source命令。
source ~/ros2_foxy/install/setup.bash

7. 测试

打开一个终端,运行C++编写的talker:
ros2 run demo_nodes_cpp talker

打开另外一个终端,运行Python编写的listener:

ros2 run demo_nodes_py listener

运行结果:

说明C++和Python的API可以正常工作。

8. 附件

提取码:tdxu

参考

[1] Building ROS 2 on Linux, https://index.ros.org/doc/ros2/Installation/Foxy/Linux-Development-Setup/

[2] rosdep init 或者rosdep update 连接错误的解决办法, https://community.bwbot.org/topic/811/rosdep-init-%E6%88%96%E8%80%85rosdep-update-%E8%BF%9E%E6%8E%A5%E9%94%99%E8%AF%AF%E7%9A%84%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95

[3] No module named catkin_pkg.package, https://www.jianshu.com/p/e964928d6c62

[4] ros自定义消息的时候报错ImportError:Nomodulenamedem_wawayu_0的专栏-CSDN博客, https://blog.csdn.net/wawayu_0/article/details/79460043

[5] Name conflict in load grammar · Issue #361 · lark-parser/lark, https://github.com/lark-parser/lark/issues/361

[6] rosbag2 build getting fail · Issue #604 · ros2/ros2, https://github.com/ros2/ros2/issues/604

 
 

Ubuntu 20.04下源码编译安装ROS 2 Foxy Fitzroy的更多相关文章

  1. ubuntu 14.04上源码编译安装php7

    wget https://downloads.php.net/~ab/php-7.0.0alpha2.tar.bz2 //用winscp把下载好的文件上传到网站中 tar jxf php-7.0.0a ...

  2. CentOS 6.6 下源码编译安装MySQL 5.7.5

    版权声明:转自:http://www.linuxidc.com/Linux/2015-08/121667.htm 说明:CentOS 6.6 下源码编译安装MySQL 5.7.5 1. 安装相关工具# ...

  3. Linux 下源码编译安装 vim 8.1

    前言 目前 linux 的各个发行版基本上都是带了一个 vi 编辑器的,而本文要说的 vim 编辑器对 vi 做了一些优化升级,更好用.当我们需要远程操作一台 linux 服务器的时候,只能使用命令行 ...

  4. Linux下源码编译安装rpy2

    R(又称R语言)是一款开源的跨平台的数值统计和数值图形化展现工具.rpy2是Python直接调用R的第三方库,它可以实现使用python读取R的对象.调用R的方法以及Python与R数据结构转换等.这 ...

  5. 在Linux下源码编译安装GreatSQL/MySQL

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 本 ...

  6. ubuntu 16.04下源码安装opencv3.4

    源码安装opencv,遇到了一些小波折,这里做个备忘吧. 首先要下载源码,路径: https://github.com/opencv/opencv 下载成功后,在opencv的根目录下执行下面操作: ...

  7. Ubuntu 16.04上源码编译和安装pytorch教程,并编写C++ Demo CMakeLists.txt | tutorial to compile and use pytorch on ubuntu 16.04

    本文首发于个人博客https://kezunlin.me/post/54e7a3d8/,欢迎阅读最新内容! tutorial to compile and use pytorch on ubuntu ...

  8. ubuntu 16.04上源码编译和安装cgal并编写CMakeLists.txt | compile and install cgal on ubuntu 16.04

    本文首发于个人博客https://kezunlin.me/post/39ab7ed9/,欢迎阅读最新内容! compile and install cgal on ubuntu 16.04 Guide ...

  9. CentOS 7.4下源码编译安装配置LAMP环境详解

    CentOS 7.4搭建LAMP,LAMP:Linux.Apache.MySQL.PHP. 目录:第一部分 准备工作第二部分 安装Apache服务第三部分 安装MySQL服务第四部分 搭建PHP运行环 ...

随机推荐

  1. 统计元音(hdu20)

    输入格式:输入一个整型,再循环输入带空格的字符串. 思考:先用scanf()函数输入一个整型,后面直接来个大循环,带空格字符串输入直接用gets()函数. 注意:由于scanf()里面多加了%c,&a ...

  2. Node.js NPM Tutorial

    Node.js NPM Tutorial – How to Get Started with NPM? NPM is the core of any application that is devel ...

  3. docker-compose 命令详解

    1.docker-compose的使用非常类似于docker命令的使用,但是需要注意的是大部分的compose命令都需要到docker-compose.yml文件所在的目录下才能执行. 2.[Linu ...

  4. var、let、const三者的区别

    var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问. let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问. const用来定义常量,使用时必须初始化(即必须赋值),只能 ...

  5. VUE添加class绑定

    class     class的样式应用四种        1.数组用法        显示用标识符v-bind        :class="['red','thin']" 2. ...

  6. eatwhatApp开发实战(四)

    之前我们做了添加店铺了功能,接下来我们做删除功能,并介绍对话框的使用方法. 在init()中注册listview的item点击监听 //注册监听 shop_lv.setOnItemClickListe ...

  7. Python之TestLink篇

    如何让时间变慢? 你们不知道吧,这个时候翻开书,时间又变慢了一倍,可以这样延年益寿,哈哈哈 ------------------------------------------------------ ...

  8. IDEA 插件推荐 —— 让你写出好代码的神器!

    概述 今天介绍的插件主要是围绕编码规范的.有追求的程序员,往往都有代码洁癖,要尽量减少代码的「坏味道」. 代码静态检查是有很多种类,例如圈复杂度.重复率等.业界提供了很多静态检查的插件来识别这些不合规 ...

  9. 报错:The server cannot be started because one or more of the ports are invalid. Open the server editor and correct the invalid ports.

    今天重装eclipse和Tomcat,启动时候报标题错“The server cannot be started because one or more of the ports are invali ...

  10. jchdl - GSL实例:FullAdder(使用HalfAdder实现)

    https://mp.weixin.qq.com/s/5mcYAllizuxyr3QSNrotrw 全加器是能够计算低位进位的二进制加法电路.与半加器相比,全加器不只考虑本位计算结果是否有进位,也考虑 ...