记录ubuntu22 安装ros1 noetic 与 ros2 humble共存
基础环境介绍
- qemu环境,目标系统是armv7l的32位系统,无法通过apt源安装上二进制的ros,所以只有编译安装
- ubuntu22 先安装ros2
预先准备工作
-
更新系统源
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse # 以下安全更新软件源包含了官方源与镜像站配置,如有需要可自行修改注释切换 deb http://ports.ubuntu.com/ubuntu-ports/ jammy-security main restricted universe multiverse # deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy-security main restricted universe multiverse # 预发布软件源,不建议启用 # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-proposed main restricted universe multiverse # # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-proposed main restricted universe multiverse-
注释ros2源,添加ros1 focal(ubuntu20)的源
先去添加一个ros1的清华源ros | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
选ubuntu20 focal的源
/etc/apt/source.list.d/ros-latest.list,直接去写这个文件就好
deb https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ focal main添加key
apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 apt update 3. 安装编译依赖项 可能需要做的预先配置,设置本地语言 apt-get install -y language-pack-zh-hans language-pack-zh-hant -
apt install locales
apt install locales
locale-gen en_US en_US.UTF-8
update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
locale # verify settings
apt-get install python3-rosdep python3-rosinstall-generator python3-vcstools python3-vcstool build-essential
rosdep
初始化
rosdep init
可能网络问题导致失败,可添加一个hosts,但也可能加了反而网络错误
185.199.110.133 raw.githubusercontent.com
rosdep update
正式安装
创建catkin工作区
主要用于存放安装Ros的源码工作区。
mkdir ~/ros_catkin_ws
cd ~/ros_catkin_ws
使用vcstools下载Ros包,安装base版本
rosinstall_generator ros_base --rosdistro noetic --deps --tar > noetic-base.rosinstall
mkdir ./src
vcs import --input noetic-base.rosinstall ./src
解决依赖问题
安装Ros包可能有相互依赖的情况,如果缺少系统依赖则无法使用,需要使用rosdep工具自动检测并安装相应的依赖文件。
rosdep install --from-paths ./src --ignore-packages-from-source --rosdistro noetic -y
解决兼容问题
构建Ros1 Noetic之前,我们需要手动修补src文件夹中的两个包,以兼容Ubuntu22.04:
- rosconsole:Ros的控制台日志记录使用程序
- urdf:统一机器人描述格式(URDF)文件的解析器
相关的修补程序在Github上有开源实现,作者Daniel Reuter,参考链接:
使用Github上的修改包直接替换初始源码包。
cd ~/ros_catkin_ws
# Download and use fix branch
git clone https://github.com/dreuter/rosconsole.git
cd rosconsole
git checkout noetic-jammy
cd ..
mv rosconsole src
#base版补全rosconsole就可以编译通过了
#git clone https://github.com/dreuter/urdf.git
#cd urdf
#git checkout set-cxx-version
#cd ..
#mv urdf src
构建Ros1 Noetic
使用catkin_make_isolated命令构建Ros1 Noetic,并安装,这里采取了–install-space参数配置安装目录/opt
./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/noetic -j4
Ros1将会自动安装到所设置的catkin工作区中的install_isolated文件夹中,更新后即可正常使用Ros1了!
source /opt/noetic/setup.bash
可以直接将source命令写入bashrc中,避免每次使用时都需要更新。
安装过程中遇到的问题
-
可能会在编译安装过程中遇到ROS_DISTRO 是humble的问题,因为之前先安装了ros2 humble
解决:在.bashrc中注释关于ros2的所有工作空间、安装空间的所有指令;
在.bashrc中设置:export ROS_DISTRO=noetic
-
在编译过程中发生
error: cannot convert ‘ros::console::impl::ROSConsoleStdioAppender*’ to ‘log4cxx::AppenderPtr’的问题:详情如下:
/root/ros_noetic_base/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp: In function ‘void ros::console::impl::initialize()’: /root/ros_noetic_base/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:169:23: error: cannot convert ‘ros::console::impl::ROSConsoleStdioAppender*’ to ‘log4cxx::AppenderPtr’ {aka ‘std::shared_ptr<log4cxx::Appender>’} 169 | logger->addAppender(new ROSConsoleStdioAppender); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | ros::console::impl::ROSConsoleStdioAppender* In file included from /usr/include/log4cxx/spi/loggingevent.h:28, from /usr/include/log4cxx/layout.h:29, from /usr/include/log4cxx/appenderskeleton.h:28, from /root/ros_noetic_base/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:42: /usr/include/log4cxx/logger.h:144:60: note: initializing argument 1 of ‘virtual void log4cxx::Logger::addAppender(log4cxx::AppenderPtr)’这个是没有在src目录中加入rosconsole以兼容Ubuntu22.04这个问题导致的,加入这个包就可解决参参考链接:https://link.zhihu.com/?target=https%3A//github.com/dreuter
-
可能会在qemu的虚拟环境中遇到编译器出错、打开文件的数量超过了系统最大限制、编译器宕机编译到一般就抛出错误,但又不是代码的bug,这个情况一般就是编译的时候给了线程数太多了,在x86的实体机中一般不会有这些奇奇怪怪的问题
终极解决办法:编译的时候减少线程,我设置为j4的时候异常的顺利。
参考链接
ros-noetic-base源码:https://wwd.lanzn.com/b0r9ee44d 密码:6666
Ubuntu22.04 安装 Ros1 Noetic - 知乎 (zhihu.com)
https://wiki.ros.org/noetic/Installation/Source
https://blog.csdn.net/weixin_28735871/article/details/136257409
https://blog.csdn.net/zyh821351004/article/details/135523056
Ubuntu (Debian packages) — ROS 2 Documentation: Humble documentation
2万+

被折叠的 条评论
为什么被折叠?



