【记录ubuntu22 安装ros1 noetic 与 ros2 humble共存】

记录ubuntu22 安装ros1 noetic 与 ros2 humble共存


基础环境介绍

  1. qemu环境,目标系统是armv7l的32位系统,无法通过apt源安装上二进制的ros,所以只有编译安装
  2. ubuntu22 先安装ros2

预先准备工作

  1. 更新系统源

    # 默认注释了源码镜像以提高 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
    
    1. 注释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中,避免每次使用时都需要更新。

安装过程中遇到的问题

  1. 可能会在编译安装过程中遇到ROS_DISTRO 是humble的问题,因为之前先安装了ros2 humble

    解决:在.bashrc中注释关于ros2的所有工作空间、安装空间的所有指令;

    在.bashrc中设置:export ROS_DISTRO=noetic

  2. 在编译过程中发生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

  3. 可能会在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值