在Ubuntu22.04上源码构建ROS noetic环境
Ubuntu22.04上源码构建ROS noetic
- 起因
- 准备环境
- 创建工作目录并下载源码
- 安装编译依赖包
- 安装ros_comm和rosconsole包的两个补丁并修改pluginlib包的CMakeLists的编译器版本
- 编译安装ROS noetic和ros_test
- 验证
起因
最近在研究VINS-Mono从ROS移植到ROS2,发现在编写feature_tracker的CMakeList.txt后,会出现找不到包含文件的问题,于是向先用ROS把VINS编译跑一下看看,便有了在Ubuntu 22.04虚拟机上再构建一个ROS的环境的想法,本来是想按照官网一步一步做就行了,然而到ROS的官方下载地址发现没有Ubuntu 22.04(jammy)版本和对应的Debian 12(Bookworm)的仓库。

所以按照ros官网安装步骤,在sudo apt update 这一步就止步了,原因就是Ros Noetic主要针对Ubuntu 20.04,并且不正式支持任何更新的发布了。

所以通过Google找到一个源码安装的方法,亲自验证后,在此分享给大家。
准备环境
- 安装docker
- 安装python3
- 安装pip3
- 安装git
- 下载ROS Noetic基础包源码(此次可能需要借助梯子)
创建工作目录并下载源码
mkdir -p ~/ros_noetic_base_2204/catkin_ws/src
在src目录下执行脚本,下载ROS 包
#!/bin/bash
git clone https://github.com/ros/actionlib.git -b 1.14.0
git clone https://github.com/ros/bond_core.git -b 1.8.6
git clone https://github.com/ros/catkin.git -b 0.8.10
git clone https://github.com/ros/class_loader.git -b 0.5.0
git clone https://github.com/ros/cmake_modules.git -b 0.5.0
git clone https://github.com/ros/common_msgs.git -b 1.13.1
git clone https://github.com/ros/dynamic_reconfigure.git -b 1.7.3
git clone https://github.com/ros/gencpp.git -b 0.7.0
git clone https://github.com/jsk-ros-pkg/geneus.git -b 3.0.0
git clone https://github.com/ros/genlisp.git -b 0.4.18
git clone https://github.com/ros/genmsg.git -b 0.6.0
git clone https://github.com/RethinkRobotics-opensource/gennodejs.git -b 2.0.1
git clone https://github.com/ros/genpy.git -b 0.6.16
git clone https://github.com/ros/message_generation.git -b 0.4.1
git clone https://github.com/ros/message_runtime.git -b 0.4.13
git clone https://github.com/ros/nodelet_core.git -b 1.10.2
git clone https://github.com/ros/pluginlib.git -b 1.13.0
git clone https://github.com/ros/ros.git -b 1.15.8
git clone https://github.com/ros/ros_comm.git -b 1.16.0
git clone https://github.com/ros/ros_comm_msgs.git -b 1.11.3
git clone https://github.com/ros/ros_environment.git -b 1.3.2
git clone https://github.com/ros/rosbag_migration_rule.git -b 1.0.1
git clone https://github.com/ros/rosbag_migration_rule.git -b 1.0.1
git clone https://github.com/ros/rosconsole.git -b 1.14.3
git clone https://github.com/ros/rosconsole_bridge.git -b 0.5.4
git clone https://github.com/ros/roscpp_core.git -b 0.7.2
git clone https://github.com/ros/roslisp.git -b 1.9.25
git clone https://github.com/ros/rospack.git -b 2.6.2
git clone https://github.com/ros/std_msgs.git -b 0.5.13
git clone https://github.com/ros/angles.git
git clone https://github.com/ros/geometry.git
返回到ros_noetic_base_2204目录,下载catkin_pkg和rospkg源码
git clone https://github.com/ros-infrastructure/catkin_pkg.git -b 0.5.2
git clone https://github.com/ros-infrastructure/rospkg.git -b 1.5.0
最后目录结构如下:

安装编译依赖包
sudo apt install -y cmake build-essential libboost-thread-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev libboost-program-options-dev libconsole-bridge-dev libpoco-dev libtinyxml2-dev liblz4-dev libbz2-dev uuid-dev liblog4cxx-dev libgpgme-dev libgtest-dev python3-setuptools python3-nose python3-pycryptodome python3-defusedxml python3-mock python3-netifaces python3-gnupg python3-numpy python3-psutil
安装ros_comm和rosconsole包的两个补丁并修改pluginlib包的CMakeLists的编译器版本
- 在~/ros_noetic_base_2204/catkin_ws/src/ros_comm目录下新建一个ros_comm.patch的文件,将ros_comm的补丁包的内容拷贝到该文件里(如果用wget直接下载该文件,需要在最后一行末尾加个回车,否则会报错
error: corrupt patch at line 22)。

在该目录下执行git apply --ignore-whitespace ros_comm.patch更新ros_comm包。 - 在~/ros_noetic_base_2204/catkin_ws/src/rosconsole目录下用同样的方法将rosconsole.patch内容写到该目录的文件里,在该目录下执行
git apply --ignore-whitespace rosconsole.patch更新rosconsole.patch包。 - 把pluginlib的CMakeList.txt文件中${PROJECT_NAME}_unique_ptr_test的C++编译器版本11改为17。

diff --git a/pluginlib/CMakeLists.txt b/pluginlib/CMakeLists.txt
index 289c5af..1776c02 100644
--- a/pluginlib/CMakeLists.txt
+++ b/pluginlib/CMakeLists.txt
@@ -24,12 +24,12 @@ if(CATKIN_ENABLE_TESTING)endif()include(CheckCXXCompilerFlag)
- check_cxx_compiler_flag("-std=c++11" COMPILER_SUPPORTS_CXX11)
- if(COMPILER_SUPPORTS_CXX11)
+ check_cxx_compiler_flag("-std=c++17" COMPILER_SUPPORTS_CXX17)
+ if(COMPILER_SUPPORTS_CXX17)catkin_add_gtest(${PROJECT_NAME}_unique_ptr_test test/unique_ptr_test.cpp)if(TARGET ${PROJECT_NAME}_unique_ptr_test)target_link_libraries(${PROJECT_NAME}_unique_ptr_test ${TinyXML2_LIBRARIES} ${catkin_LIBRARIES} ${Boost_LIBRARIES})
- set_target_properties(${PROJECT_NAME}_unique_ptr_test PROPERTIES COMPILE_FLAGS -std=c++11 LINK_FLAGS -std=c++11)
+ set_target_properties(${PROJECT_NAME}_unique_ptr_test PROPERTIES COMPILE_FLAGS -std=c++17 LINK_FLAGS -std=c++17)add_dependencies(${PROJECT_NAME}_unique_ptr_test test_plugins)endif()endif()
编译安装ROS noetic和ros_test
cd ~/ros_noetic_base_2204/catkin_pkg && python3 setup.py install
cd ~/ros_noetic_base_2204/rospkg && python3 setup.py install
cd ~/ros_noetic_base_2204/catkin_ws
./src/catkin/bin/catkin_make install \-DCMAKE_BUILD_TYPE=Release \-DPYTHON_EXECUTABLE=/usr/bin/python3./src/catkin/bin/catkin_make install \-DCMAKE_BUILD_TYPE=Release \-DPYTHON_EXECUTABLE=/usr/bin/python3 \run_tests
验证
重新打开一个终端,输入如下命令验证。
source ~/ros_noetic_base_2204/catkin_ws/devel/setup.bash
roscore

参考:
Building ROS Noetic on Ubuntu 22.04
相关文章:
在Ubuntu22.04上源码构建ROS noetic环境
Ubuntu22.04上源码构建ROS noetic 起因准备环境创建工作目录并下载源码安装编译依赖包安装ros_comm和rosconsole包的两个补丁并修改pluginlib包的CMakeLists的编译器版本编译安装ROS noetic和ros_test验证 起因 最近在研究VINS-Mono从ROS移植到ROS2,发现在编写feat…...
算法--解决二叉树遍历问题
第一 实现树的结构 class Node(): # 构造函数,初始化节点对象,包含数据和左右子节点 def __init__(self, dataNone): self.data data # 节点存储的数据 self.left None # 左子节点,默认为None self.rig…...
[刷题]入门1.矩阵转置
博客主页:算法歌者本篇专栏:[刷题]您的支持,是我的创作动力。 文章目录 1、题目2、基础3、思路4、结果 1、题目 链接:洛谷-B2106-矩阵转置 2、基础 此题目主要考察二维数组的掌控能力。 3、思路 观察,可知&#…...
Flutter开发之flutter_local_notifications
flutter_local_notifications 消息通知 flutter_local_notifications地址 flutter_local_notifications: ^18.0.1class NotificationHelper {//工厂模式调用该类时,默认调用此方法,将实例对象返回出去static NotificationHelper? _instance null;sta…...
Gradle和maven
大家好,我是风筝 作为Java 开发者,你平时用 Maven 还是 Gradle? 我一直用的都是 Maven,但是前几天做了一个小项目,用的是 Gradle,因为项目创建出来默认就是用的 Gradle,而且功能足够简单&#x…...
RabbitMQ教程:发布/订阅模式(Publish/Subscribe)(三)
文章目录 RabbitMQ教程:发布/订阅模式(Publish/Subscribe)(三)一、引言二、简介三、准备工作3.1 说明3.2 生成项目 四、实战4.1 交换机(Exchanges)4.2 临时队列(Temporary Queues&am…...
服务器被挂马怎么办?——解决服务器被挂马的方法和步骤
服务器被挂马(即被植入恶意软件)是一个常见的网络安全问题,可能导致数据泄露、服务中断和经济损失。本文将详细介绍如何检测和清除服务器上的恶意软件,并提供实用的代码示例,帮助读者解决服务器被挂马的问题。 一、什…...
Qt 项目架构设计
在开发一个 Qt 项目时,合理的文件夹结构和清晰的构建流程是非常重要的。Qt 项目通常需要管理源代码、UI 文件、资源文件、构建脚本等。下面我会给出一个详细的文件夹结构示例,并解释每个部分的作用及如何设计 Makefile 或使用 Qt 的 qmake 来自动化构建过…...
Elasticsearch:管理和排除 Elasticsearch 内存故障
作者:来自 Elastic Stef Nestor 随着 Elastic Cloud 提供可观察性、安全性和搜索等解决方案,我们将使用 Elastic Cloud 的用户范围从完整的运营团队扩大到包括数据工程师、安全团队和顾问。作为 Elastic 支持代表,我很乐意与各种各样的用户和…...
高级java每日一道面试题-2024年11月07日-Redis篇-Redis有哪些功能?
如果有遗漏,评论区告诉我进行补充 面试官: Redis有哪些功能? 我回答: Redis 是一个开源的、基于键值对的 NoSQL 数据库,以其高性能、丰富的数据结构和多种功能而闻名。在高级 Java 面试中,了解 Redis 的核心功能和高级特性是非常重要的。以下是 Redi…...
实用且免费的 IP 地域查询 API 接口推荐
实用且免费的 IP 地域查询 API 接口推荐 在日常开发中,IP 地域查询是一个常见需求。最近无意间发现一个实用的 IP 地域查询 API,目前是免费的,未来是否收费尚不可知,但在当前情况下非常值得推荐。 API 地址示例: ht…...
STM32学习笔记----SPI协议
STM32的SPI(串行外设接口,Serial Peripheral Interface)是一种常见的同步串行通信协议,广泛应用于与传感器、显示屏、存储设备等外设的通信。SPI通过主从模式(Master/Slave)来实现数据交换,其中…...
Ceph的pool有两种类型
Replicated Pool(拷贝型Pool,默认) 概述: 这是Ceph的默认存储池类型。它通过生成对象的多份拷贝来确保数据的冗余和高可用性。 工作原理: 每个存入的对象(Object)都会被存储为多个副本…...
推荐一款流程图和图表绘制工具:WizFlow Flowcharter Pro
WizFlow Flowcharter是一款易于使用、功能丰富的Windows流程图和图表绘制工具。它允许用户使用超过一百种预定义的形状和箭头定义形状“样式”。您可以将自己的样式保存在图表模板中,以建立自己的绘图方法。WizFlow附带了完整的流程图模板,以帮助您入门。…...
设计模式之插件模式
插件模式是一种设计模式,可以让您在不修改现有系统代码的情况下扩展功能,非常适合实现监控软件和交换机配置的解耦。在嵌入式Linux系统中,您可以使用C++实现插件机制,使监控软件能够动态加载交换机型号的配置模块。这种方式允许您通过插件形式快速适配新型号的交换机。 插…...
深度学习基础—Beam search集束搜索
引言 深度学习基础—Seq2Seq模型https://blog.csdn.net/sniper_fandc/article/details/143781223?fromshareblogdetail&sharetypeblogdetail&sharerId143781223&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 上篇博客讲到,贪心算…...
STM32 串口输出调试信息
软硬件信息 CubeMX version 6.12.1Keil uVision V5.41.0.0 注意 串口有多种: TTL232485 串口的相关知识: 01-【HAL库】STM32实现串口打印(printf方式) , 内含 TTL 和 232 区别。 我把 232 串口连进 STM32 串口助手收到的信息…...
任务调度中心-XXL-JOB使用详解
目录 详解 调度中心 执行器 原理 快速入门 源码仓库地址 1.初始化数据库 2.配置调度中心 1.解压源码 2.需改配置文件 3.启动调度中心 3.配置执行器 1.引入pom依赖 2.修改配置文件 3.执行器组件配置 4.部署执行器项目 4.开发第一个任务 BEAN模式(类…...
git本地分支推送到远程和远程pull到本地
文章目录 本地分支推送到远程仓库git拉取远程分支到本地 本地分支推送到远程仓库 要将本地分支推送到远程仓库的某个分支(可以是同名的分支,也可以是不同名的分支),你可以使用 git push 命令。这里有几种不同的情况: …...
Python_爬虫1_Requests库入门
目录 Requests库 7个主要方法 Requests库的get()方法 Response对象的属性 爬取网页的通用代码框架 理解requests库的异常 HTTP协议及Requests库方法 HTTP协议 HTTP协议采用URL作为定位网络资源的标识。 HTTP协议对资源的操作 理解PATCH和PUT的区别 HTTP协议与Requse…...
Stable-Diffusion-v1-5-archive镜像免配置部署:7860端口直连实操手册
Stable-Diffusion-v1-5-archive镜像免配置部署:7860端口直连实操手册 想体验经典AI绘画的魅力,又不想折腾复杂的本地环境?今天,我们就来手把手教你如何通过一个预置好的镜像,零配置、一键式地启动Stable Diffusion v1…...
Go UUID终极指南:为什么选择go.uuid而非标准库的5大理由
Go UUID终极指南:为什么选择go.uuid而非标准库的5大理由 【免费下载链接】go.uuid UUID package for Go 项目地址: https://gitcode.com/gh_mirrors/go/go.uuid 在Go语言开发中,生成全局唯一标识符(UUID)是常见的需求。虽然…...
Z-Image-Turbo_Sugar脸部Lora效果增强:ControlNet+Lora联合调控Sugar脸部结构
Z-Image-Turbo_Sugar脸部Lora效果增强:ControlNetLora联合调控Sugar脸部结构 想生成那种又纯又欲、甜度爆表的Sugar风格脸部图片吗?是不是经常遇到模型生成的脸型不够精致、五官比例失调,或者风格不够统一的问题?今天,…...
5分钟搞定高精度人脸检测:MogFace工具零基础部署与使用教程
5分钟搞定高精度人脸检测:MogFace工具零基础部署与使用教程 1. 前言:为什么选择MogFace? 人脸检测技术已经广泛应用于我们的日常生活中,从手机相册的人脸分类到社交媒体的美颜滤镜,都离不开这项基础技术。然而在实际…...
Ubuntu 20.04 下通过 PPA 快速部署 qBittorrent 及配置指南
1. 为什么选择qBittorrent? 如果你经常需要下载大型文件,比如开源系统镜像、影视素材或者游戏资源,那么一个靠谱的BT客户端绝对是刚需。我在Ubuntu上试过各种BT工具,最终发现qBittorrent是最稳定高效的选择。它完全开源免费&#…...
RSA1 - Writeup by AI
RSA1 - Writeup by AI 1. 题目描述项目内容题目来源Bugku题目类型Crypto (密码学)考点RSA 大数分解、私钥计算题目信息 题目给出了 RSA 加密的三个参数: e 65537 N 1018261336751023520497560395829454421245429586704872293236600679847605951423419167478189648…...
华为ENSP实战:手把手教你搭建住宅小区网络拓扑(附完整配置脚本)
华为ENSP实战:从零构建智能小区网络的全栈解决方案 当清晨第一缕阳光透过窗帘洒进房间,现代人睁开眼的第一件事往往是拿起手机查看消息——这种习以为常的场景背后,是无数个日夜运行的住宅小区网络在默默支撑。作为网络工程师,我…...
[段错误修复]:Emacs代码补全崩溃的系统排查与版本管理策略
[段错误修复]:Emacs代码补全崩溃的系统排查与版本管理策略 【免费下载链接】doomemacs An Emacs framework for the stubborn martian hacker 项目地址: https://gitcode.com/gh_mirrors/do/doomemacs 副标题:如何诊断LSP服务异常导致的Emacs崩溃…...
3大核心能力解析:open_nsfw如何为企业构建智能内容安全防线
3大核心能力解析:open_nsfw如何为企业构建智能内容安全防线 【免费下载链接】open_nsfw yahoo/open_nsfw: 是一个由Yahoo开发的开放源代码的非成人内容过滤工具。适合用于需要过滤成人内容的网站或应用。特点是可以识别和过滤掉不适宜的内容,保护用户免受…...
如何高效捕获网页媒体资源?猫抓插件让智能嗅探变得如此简单
如何高效捕获网页媒体资源?猫抓插件让智能嗅探变得如此简单 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否遇到过想保存网页上的精彩视频却找不到下载按钮的尴尬?是否曾…...
