# ros2-openEuler-port-guide **Repository Path**: anchuanxu/ros2-openEuler-port-guide ## Basic Information - **Project Name**: ros2-openEuler-port-guide - **Description**: ros2在openEuler上的移植 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-02-22 - **Last Updated**: 2021-02-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ROS2 openEuler(x86)移植 ## openEuler和Fedora源配置 /etc/yum.repos.d/openEuler.repo ```bash [openEuler-source] name=openEuler-source baseurl=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/source/ enabled=1 gpgcheck=1 gpgkey=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/source/RPM-GPG-KEY-openEuler [openEuler-os] name=openEuler-os baseurl=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/OS/x86_64/ enabled=1 gpgcheck=1 gpgkey=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/OS/x86_64/RPM-GPG-KEY-openEuler [openEuler-everything] name=openEuler-everything baseurl=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/everything/x86_64/ enabled=1 gpgcheck=1 gpgkey=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/everything/x86_64/RPM-GPG-KEY-openEuler [openEuler-EPOL] name=openEuler-epol baseurl=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/EPOL/x86_64/ enabled=1 gpgcheck=0 ``` fedora29源在openEuler 20.03不可用,要使用fedora30源,/etc/yum.repos.d/fedora.repo: ```bash [fedora30] name=fed baseurl=http://mirrors.aliyun.com/fedora/releases/30/Everything/x86_64/os/ enabled=1 gpgcheck=0 ``` ## 安装基础依赖 openEuler和fedora源同时开启,并安装以下依赖: ```shell sudo dnf install -y asio-devel cmake cppcheck eigen3-devel gcc-c++ liblsan libXaw-devel libyaml-devel make opencv-devel patch python3-argcomplete python3-coverage python3-devel python3-empy python3-lxml python3-mock python3-nose python3-pep8 python3-pip python3-pydocstyle python3-pyflakes python3-pyparsing  python3-setuptools python3-vcstool python3-yaml poco-devel poco-foundation python3-flake8 python3-flake8-import-order tinyxml2-devel uncrustify wget  ``` 注:与ros2原始安装文档相比,存在以下不同: * 没有安装redhat-rpm-config,redhat-rpm-config与openEuler-rpm-config冲突 * 没有安装python3-colcon-common-extensions,可以用pip安装 * 没有安装tinyxml-devel,因为dnf源中的该库文件用较低版本gcc编译,API中的参数类型规格与ros2中调用的不匹配。因此直接使用ros2中的tinyxml_vendor包进行源代码编译 只开启openEuler源,安装clang: ```bash sudo dnf install clang ``` * clang在openEuler和fedora源中都有,同时开启两个源安装clang会存在冲突 * 安装clang后重新enable fedora源 ## 配置pip源并安装其他依赖 ```bash pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple sudo pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip3 install --user -U lark-parser sudo pip3 install -U rosdep sudo pip3 install -U pytest colcon-common-extensions ``` * rosdep要更新到最新的0.19(默认安装的是0.15),0.19中更新了一些依赖关系 * 安装colcon-common-extensions以获取colcon构建工具 * dnf源中的python3-pytest版本比较旧,不符合ros2一些组件对pytest版本的要求,需要pip安装最新版本 * lark-parser必须用pip安装,dnf源中的python3-lark-parser版本较低,解析rosidl时存在类型问题 ## 配置并更新rosdep依赖映射 rosdep初始化 ```bash sudo rosdep init ``` 增加自定义映射关系/etc/ros/rosdep/base-openeuler.yaml: ```bash libboost-filesystem-dev:   rhel: [boost-devel] libboost-thread-dev:   rhel: [boost-devel]   libjpeg:   rhel: [libjpeg-turbo]   python-rospkg:   rhel:     pip:       packages: [rospkg] python-setuptools:   rhel:     pip:       packages: [setuptools] python-gnupg:   rhel:     pip:       packages: [gnupg] python-catkin-pkg-modules:   rhel:     pip:       packages: [catkin-pkg] python-catkin-pkg:   rhel:     pip:       packages: [catkin-pkg]   python-rosdep:   rhel:     pip:       packages: [rosdep] # ros2新增加的部分: python3-flake8:   rhel:     pip:       package: [flake8]  python3-lttng:   rhel:     pip:       package: [lttng]  python3-pydot:   rhel:     pip:       package: [pydot]  python3-flake8:   rhel:     pip:       package: [flake8]  python3-pytest-mock:   rhel:     pip:       package: [pytest-mock] python3-babeltrace:   rhel:     pip:       package: [babeltrace]  python3-pep8:   rhel:     pip:       package: [pep8]  python3-matplotlib:   rhel:     pip:       package: [matplotlib]  pydocstyle:   rhel:     pip:       package: [pydocstyle]  clang-tidy:   rhel:     dnf:       package: [clang-tools-extra]  python3-mypy:   rhel:     pip:       package: [mypy]  python3-ifcfg:   rhel:     pip:       package: [ifcfg]  ``` /etc/ros/rosdep/sources.list.d/10-openeuler.list: ```bash yaml file:///etc/ros/rosdep/base-openeuler.yaml ``` 更新dep关系: ```bash export ROS_OS_OVERRIDE=centos:7.6 rosdep update ``` * 以上两个文件需要普通账号有访问权限(读取) * 如有依赖映射文件的更新,需要重新执行rosdep update命令更新依赖关系 ## 准备ros2源代码库 ```bash mkdir -p ~/ros2_eloquent/src cd ~/ros2_eloquent wget https://raw.githubusercontent.com/ros2/ros2/eloquent/ros2.repos vcs import src < ros2.repos rosdep install --from-paths src --ignore-src --rosdistro eloquent -y --skip-keys "console_bridge fastcdr fastrtps libopensplice67 libopensplice69 rti-connext-dds-5.3.1 urdfdom_headers tinyxml-devel" ``` * --skip-keys中要添加tinyxml-devel避免使用dnf源中的tinyxml库 * 不同ros2 distro依赖的库有所不同,具体参考[ros2安装文档](https://index.ros.org/doc/ros2/Installation/Eloquent/Linux-Development-Setup/#eloquent-linux-dev-get-ros2-code) ## 构建ros2源代码 ```bash colcon build --packages-skip qt_gui_cpp qt_gui_core rqt_gui_cpp rqt --packages-skip-regex '^rviz.*' ``` * 一些gui相关的库依赖redhat-rpm-config包,与openEuler-rpm-config冲突,待进一步检查具体使用了哪些功能,并打patch支持openEuler-rpm-config * rviz相关的包还存在一些依赖问题,暂时不安装(openEuler暂时没有图形界面) 构建如果报错,可以增加--event-handlers console_direct+ console_cohesion+参数查看cmake日志以定位问题 * 如果shell session中已经更新过其他版本的setup.bash环境,需要重新开一下session,避免其他版本环境变量信息对构建产生影响 * 比较新的版本中可能会使用tf2_bullet包,需要安装bullet-devel库:dnf install bullet-devel ## 测试ros2 更新环境并开启ros2示例 ```bash source install/setup.bash ros2 run demo_nodes_cpp talker [INFO] [talker]: Publishing: 'Hello World: 1' [INFO] [talker]: Publishing: 'Hello World: 2' [INFO] [talker]: Publishing: 'Hello World: 3' ``` rosidl_generator_c报错unknown type 'boolean'的问题:原因是rosidl相关的库在解析.idl文件时以来lark-parser,在之前的dashing实践中用pip3安装的lark-parser,是最新版本。而dnf install python3-lark-parser安装的是0.6,根据其他人遇到的类似问题的解答: [https://answers.ros.org/question/320480/build-failed-at-rosidl_generator_c-package/](https://answers.ros.org/question/320480/build-failed-at-rosidl_generator_c-package/) lark-parser要求最低版本为0.7,用pip3安装0.9后问题解决