Ubuntu 20.04下源码编译安装ROS 2 Foxy Fitzroy
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

(2) 添加ROS 2 apt仓库
问题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#在文件末尾添加151.101.84.133 raw.githubusercontent.com
(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代码
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。
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. 环境设置
source ~/ros2_foxy/install/setup.bash
7. 测试
ros2 run demo_nodes_cpp talker
打开另外一个终端,运行Python编写的listener:
ros2 run demo_nodes_py listener
运行结果:

8. 附件
参考
[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的更多相关文章
- ubuntu 14.04上源码编译安装php7
wget https://downloads.php.net/~ab/php-7.0.0alpha2.tar.bz2 //用winscp把下载好的文件上传到网站中 tar jxf php-7.0.0a ...
- CentOS 6.6 下源码编译安装MySQL 5.7.5
版权声明:转自:http://www.linuxidc.com/Linux/2015-08/121667.htm 说明:CentOS 6.6 下源码编译安装MySQL 5.7.5 1. 安装相关工具# ...
- Linux 下源码编译安装 vim 8.1
前言 目前 linux 的各个发行版基本上都是带了一个 vi 编辑器的,而本文要说的 vim 编辑器对 vi 做了一些优化升级,更好用.当我们需要远程操作一台 linux 服务器的时候,只能使用命令行 ...
- Linux下源码编译安装rpy2
R(又称R语言)是一款开源的跨平台的数值统计和数值图形化展现工具.rpy2是Python直接调用R的第三方库,它可以实现使用python读取R的对象.调用R的方法以及Python与R数据结构转换等.这 ...
- 在Linux下源码编译安装GreatSQL/MySQL
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 本 ...
- ubuntu 16.04下源码安装opencv3.4
源码安装opencv,遇到了一些小波折,这里做个备忘吧. 首先要下载源码,路径: https://github.com/opencv/opencv 下载成功后,在opencv的根目录下执行下面操作: ...
- 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 ...
- 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 ...
- CentOS 7.4下源码编译安装配置LAMP环境详解
CentOS 7.4搭建LAMP,LAMP:Linux.Apache.MySQL.PHP. 目录:第一部分 准备工作第二部分 安装Apache服务第三部分 安装MySQL服务第四部分 搭建PHP运行环 ...
随机推荐
- view组件的封装是否需要特有模型?
必须需要. 现在接手的老项目,所有自定义组件全部使用的原始的全量数据,作为模型给view用来展示. 结果发现,基本数据的选择错误,需要选择另一个数据作为基本数据,这导致一个很麻烦的问题,需要改动全部的 ...
- 请求地址中出现中文或者URL作为参数,为避免含有特殊字符截断URL,需要编码
URL中担心出现特殊符号!*'();:@&=+$,/?%#[] 从而截断完整的URL,需要对URL编码,服务端对URL再解码 参考: https://blog.csdn.net/aaaaazq ...
- 29-3 union的使用
联合结果集union (集合运算符) -------------------------使用union联合结果集---------------- select tsname,tsgender,tsag ...
- Understanding closures in depth
什么是闭包 维基百科中的概念 在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是在支持头等函数的编程语言中 ...
- 聊聊UDP、TCP和实现一个简单的JAVA UDP小Demo
最近真的比较忙,很久就想写了,可是一直苦于写点什么,今天脑袋灵光一闪,觉得自己再UDP方面还有些不了解的地方,所以要给自己扫盲. 好了,咱们进入今天的主题,先列一下提纲: 1. UDP是什么,UDP适 ...
- JavaScript实现队列结构
参考资料 一.什么是队列结构? 1.1.简介 队列(Queue),类似于栈结构,但又和栈结构不同 是一种运算受限的线性表,受限之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rea ...
- WordPress 伪静态规则(IIS/Apache/Nginx)
不少朋友总是询问 WordPress 如何添加伪静态规则,今天倡萌就总结一下 Apache/Nginx 三种环境下的伪静态规则,希望对大家有所帮助. 检测主机是否支持伪静态的方法:在WP后台 > ...
- Redis学习笔记(3)
一.Redis的事务(transaction) 1. 事务概念 本质:本质是一组命令的集合,所有的命令按照顺序一次性.串行化地执行,不允许其他命令的加入.Redis通过MULTI.EXEC.WATCH ...
- Rocket - tilelink - ErrorEvaluator
https://mp.weixin.qq.com/s/NkbW465NAmhDsETksd2M0g 介绍ErrorEvaluator的实现. 1. 基本介绍 ErrorEvalu ...
- JVM虚拟机 与 GC 垃圾回收
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.JVM体系结构概述 1.JVM 与系统.硬件 JVM是运行在操作系统之上的,它与硬件没有直接的交 ...