说实话,ROS2源码和我想象的不太一样!ROS2 源码编译安装

大家好,我是爱吃鱼香肉丝的小鱼,前两天吃饭点了个鱼香肉丝,发现居然没有胡萝卜,问老板说他这个是最正宗的,小鱼有点懵,不知道你吃过的鱼香肉丝里都有什么?

回归正题,今天要讲的是ROS2的源码和编译安装的方法。

一、ROS2源码通识课

前段时间在公司,同事问小鱼ROS2的仓库里咋没有代码,小鱼解释道:ROS2其实是由多个仓库共同组成的,ros2的主仓库里只写了其所包含的仓库地址和分支等信息,具体长下面这样。

ros2.repos文件就是仓库描述,内容如下

repositories:
  ament/ament_cmake:
    type: git
    url: https://github.com/ament/ament_cmake.git
    version: rolling
  ament/ament_index:
    type: git
    url: https://github.com/ament/ament_index.git
    version: rolling
  ament/ament_lint:
    type: git
    url: https://github.com/ament/ament_lint.git
    version: rolling
 	....

小鱼数了下,一共有104个仓库组成,这104个可以说就是ROS2的核心仓库了,里面包含了我们常用的各种库,比如rclcpp,rclpy等。

需要注意的是ROS2真正用到的代码远远不止这些,因为这里的每一个仓库都可能有其独立的依赖,比如说其中的spdlog_vendor,其是对spdlog这个开元库的进一步封装。

因此我们可以回答另外一个问题,为什么ROS2的版本发布会一定程度上依赖于ubuntu的版本,原因就是其ROS2有依赖一些需要系统提供的软件库,而不同ubuntu版本其软件库的版本可能不同。

接着我们就来学习下如何克隆和编译ROS2的源码。

二、ROS2源码编译

接着我们来看看如何编译安装ROS2的源码,简单的分为三步,下载源码、安装依赖、编译源码。

1.下载源码

上面说了有一个描述ros2源码的repos文件,这个文件其实是yaml格式的文章,ros2提供了一个小工具,可以读取这个文件并下载其中的代码。这个工具是——vcstool。

PS:小鱼是基于一个只有几十MB的Ubuntu Docker镜像构建的,你也可以直接安装一个Ubuntu系统进行构建。

对于一个新的系统,直接进行换源是第一步,一键安装安排。

echo "chooses:\n" > fish_install.yaml \
&& echo "- {choose: 5, desc: '一键换源'}\n" >> fish_install.yaml \
&& echo "- {choose: 2, desc: 更换系统源}\n" >> fish_install.yaml \
&& echo "- {choose: 1, desc: 添加ROS源}\n" >> fish_install.yaml \
&& apt update && apt install wget python3 python3-distro python3-yaml -y \
&& wget http://fishros.com/install  -O fishros && /bin/bash fishros \
&& rm -rf /var/lib/apt/lists/*  /tmp/* /var/tmp/* \
&& apt-get clean && apt autoclean \
&& rm -rf fish_install.yaml

接着更换下系统的终端编码

sudo apt update && sudo apt install locales && \
    sudo locale-gen en_US en_US.UTF-8 && \
    sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 && \
    export LANG=en_US.UTF-8

接着安装一些依赖和构建工具,注意这里我们装了 python3-vcstool就是vcs

sudo apt update && sudo apt install -y \
    build-essential \
    cmake \
    git \
    python3-colcon-common-extensions \
    python3-flake8 \
    python3-flake8-docstrings \
    python3-pip \
    python3-pytest \
    python3-pytest-cov \
    python3-rosdep \
    python3-setuptools \
    python3-vcstool \
    wget

sudo apt install -y \
    python3-flake8-blind-except \
    python3-flake8-builtins \
    python3-flake8-class-newline \
    python3-flake8-comprehensions \ 
    python3-flake8-deprecated \
    python3-flake8-import-order \
    python3-flake8-quotes \
    python3-pytest-repeat \
    python3-pytest-rerunfailures

接着我们就可以下载源码了

mkdir -p ~/ros2_humble/src && \
    cd ~/ros2_humble  && \
    vcs import --input https://raw.githubusercontent.com/ros2/ros2/humble/ros2.repos src

2.2 安装依赖-rosdepc

下载好源码,我们就安装依赖,rosdepc安排

sudo apt install python3-pip && \
    sudo pip3 install rosdepc && \
    sudo rosdepc init && \
    rosdepc update && \
    cd ~/ros2_humble  && \
    rosdepc install --from-paths src --ignore-src -y --skip-keys "fastcdr rti-connext-dds-6.0.1 urdfdom_headers"

2.3 编译

这一步老慢了,小鱼硬生生的编译了好几个小时才搞定,看看你的电脑要多久。

cd ~/ros2_humble/ && \
    colcon build --symlink-install

3.Docker版本指令

最后是Docker版本指令,可以直接用于Docker镜像的构建。

FROM ubuntu:jammy

RUN echo "chooses:\n" > fish_install.yaml \
    && echo "- {choose: 5, desc: '一键安装:ROS(支持ROS和ROS2,树莓派Jetson)'}\n" >> fish_install.yaml \
    && echo "- {choose: 2, desc: 更换源继续安装}\n" >> fish_install.yaml \
    && echo "- {choose: 1, desc: 清理三方源}\n" >> fish_install.yaml \
    && apt update && apt install wget python3 python3-distro python3-yaml -y \
    && wget http://fishros.com/install  -O fishros && /bin/bash fishros \
    && rm -rf /var/lib/apt/lists/*  /tmp/* /var/tmp/* \
    && apt-get clean && apt autoclean \
    && rm -rf fish_install.yaml


RUN sudo apt update && sudo apt install locales && \
    sudo locale-gen en_US en_US.UTF-8 && \
    sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 && \
    export LANG=en_US.UTF-8

RUN DEBIAN_FRONTEND=noninteractive apt install -y tzdata
RUN sudo apt update && sudo apt install -y \
    build-essential \
    cmake \
    git \
    python3-colcon-common-extensions \
    python3-flake8 \
    python3-flake8-docstrings \
    python3-pip \
    python3-pytest \
    python3-pytest-cov \
    python3-rosdep \
    python3-setuptools \
    python3-vcstool \
    wget

RUN sudo apt install -y \
    python3-flake8-blind-except \
    python3-flake8-builtins \
    python3-flake8-class-newline \
    python3-flake8-comprehensions \ 
    python3-flake8-deprecated \
    python3-flake8-import-order \
    python3-flake8-quotes \
    python3-pytest-repeat \
    python3-pytest-rerunfailures

ENV https_proxy=http://172.17.0.1:2340 
ENV http_proxy=http://172.17.0.1:2340
ENV all_proxy=socks5://172.17.0.1:2341
RUN mkdir -p ~/ros2_humble/src && \
    cd ~/ros2_humble  && \
    vcs import --input https://raw.githubusercontent.com/ros2/ros2/humble/ros2.repos src

RUN sudo apt install python3-pip && \
    sudo pip3 install rosdepc && \
    sudo rosdepc init && \
    rosdepc update && \
    cd ~/ros2_humble  && \
    rosdepc install --from-paths src --ignore-src -y --skip-keys "fastcdr rti-connext-dds-6.0.1 urdfdom_headers"

RUN cd ~/ros2_humble/ && \
    colcon build --symlink-install


# Ref: https://docs.ros.org/en/humble/Installation/Alternatives/Ubuntu-Development-Setup.html
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值