鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

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

    已定时 已固定 已锁定 已移动
    ROS 2相关问题
    ros2 源码 编译
    4
    4
    3.1k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 小鱼小
      小鱼 技术大佬
      最后由 编辑

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

      回归正题,今天要讲的是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
      

      新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

      1 条回复 最后回复 回复 引用 0
      • Zln4everZ
        Zln4ever
        最后由 编辑

        正宗的鱼香肉丝应该就是有胡萝卜的😲

        1 条回复 最后回复 回复 引用 0
        • 9973981929
          别
          最后由 编辑

          a4ca0abd-fde7-4cfd-b119-a60cfd027f70-image.png
          9f777d55-5fee-451c-8813-1bd0f0087bcf-image.png
          git一直下载不下来是什么原因呀

          1 条回复 最后回复 回复 引用 0
          • S
            shanboqun2012
            最后由 编辑

            编译后的整个工程大小十几个G,我想将编译好的文件部署到我得开发板上,但是发现只copy install目录不行,会提示一些setup.bash文件的软链接错误,请问怎么解决

            1 条回复 最后回复 回复 引用 1
            • 第一个帖子
              最后一个帖子
            皖ICP备16016415号-7
            Powered by NodeBB | 鱼香ROS