小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
说实话,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
就是vcssudo 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
-
正宗的鱼香肉丝应该就是有胡萝卜的
-
git一直下载不下来是什么原因呀 -
编译后的整个工程大小十几个G,我想将编译好的文件部署到我得开发板上,但是发现只copy install目录不行,会提示一些setup.bash文件的软链接错误,请问怎么解决