在Ubuntu22.04上源码构建ROS noetic环境

Ubuntu22.04上源码构建ROS noetic

起因

最近在研究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基础包源码(此次可能需要借助梯子)

创建工作目录并下载源码

bash 复制代码
mkdir -p ~/ros_noetic_base_2204/catkin_ws/src

在src目录下执行脚本,下载ROS 包

bash 复制代码
#!/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源码

bash 复制代码
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

最后目录结构如下:

安装编译依赖包

bash 复制代码
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。
bash 复制代码
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

bash 复制代码
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

验证

重新打开一个终端,输入如下命令验证。

bash 复制代码
source ~/ros_noetic_base_2204/catkin_ws/devel/setup.bash
roscore
  • 重新安装依赖包
    由于按照参考链接1搭建的环境没有tf等库,经过再次查找找到了参考链接2,于是重新按照依赖包,其中已经安装过的就跳过了,命令如下:
bash 复制代码
sudo apt install libboost-all-dev libconsole-bridge-dev libpoco-dev libtinyxml-dev libtinyxml2-dev libbz2-dev liblz4-dev liblog4cxx-dev libgpgme-dev libgtest-dev uuid-dev sip-dev qtbase5-dev pyqt5-dev pyqt5-dev-tools libcurl4-openssl-dev libeigen3-dev liborocos-kdl-dev libtf2-bullet-dev liburdfdom-headers-dev liburdfdom-tools liburdfdom-dev libyaml-cpp-dev libopencv-dev libassimp-dev libogre-1.9-dev ogre-1.9-tools python3-nose python3-pycryptodome python3-defusedxml python3-mock python3-netifaces python3-gnupg python3-numpy python3-psutil python3-catkin-pkg python3-rospkg python3-pip python3-setuptools python3-empy

参考:
1.Building ROS Noetic on Ubuntu 22.04

2.Install ROS Noetic Desktop from Source on Ubuntu 22.04

3.ROS官网源码安装

相关推荐
冀晓武18 小时前
Ubuntu22.04 安装 ROS2 Humble
ubuntu·ros
干啥都是小小白2 天前
话题通信之python实现
python·机器人·ros
玄德公笔记5 天前
ubuntu 22.04安装k8s高可用集群
linux·ubuntu·kubernetes·k8s·containerd·高可用集群·ubuntu 22.04
徐行tag8 天前
ROS架构
架构·ros
Mr.Winter`8 天前
运动规划实战案例 | 图解基于状态晶格(State Lattice)的路径规划(附ROS C++/Python仿真)
c++·人工智能·机器人·自动驾驶·ros·ros2
略无慕艳意11 天前
【教程】Ubuntu 16.04 配置 CLion 开发 ROS Melodic
c++·ros·c·clion
Tipriest_12 天前
足式机器人经典控制常用的ROS库介绍
机器人·ros·介绍·足式机器人
Mr.Winter`15 天前
深度强化学习 | 基于SAC算法的移动机器人路径跟踪(附Pytorch实现)
人工智能·pytorch·深度学习·神经网络·机器人·自动驾驶·ros
白云千载尽18 天前
相机、雷达标定工具,以及雷达自动标定的思路
python·自动驾驶·ros
别让别人觉得你做不到1 个月前
Ros工作空间
ros