• 【ROS2】Moveit2-humble 详细安装过程及问题解决


    :以下修改自官网文档上的安装步骤,在此基础上列出我安装时所遇到的问题与解决方法,官方的坑有很多,看我这篇就够了。

    入门

    构建 MoveIt 的所有源代码可能需要 20-30 分钟(渣机实测需要几个小时,所以不要在晚上安装),具体取决于计算机的 CPU 速度和可用 RAM。如果您使用的是性能较低的系统,或者通常只是想更快地开始,请查看我们的Docker 指南(实测更麻烦,暂不推荐)。

    版本

    • 系统版本:ubuntu22.04
    • ROS2版本:humble
    • Moveit版本:moveit2-humble

    安装 ROS 2 和 Colcon

    安装 ROS 2 Humble。如果您在接下来的几个步骤中遇到错误,可以确认一下是否正确安装 ROS 2。

    source /opt/ros/humble/setup.bash
    
    • 1

    安装rosdep以安装系统依赖项:

    sudo apt install python3-rosdep
    
    • 1

    注意,国内 rosdep 不稳定,可以使用鱼香ros 开发的 rosdepc,下面是安装方法:

    sudo apt install -y python3-pip
    sudo pip3 install rosdepc
    
    • 1
    • 2

    安装 ROS 2 后,请确保您拥有最新的软件包:

    注:以下的 rosdep 都可以换成 rosdepc,避免网络不稳定导致的问题。

    sudo rosdep init
    rosdep update
    sudo apt update
    sudo apt dist-upgrade
    
    • 1
    • 2
    • 3
    • 4

    使用mixin安装Colcon ROS 2 构建系统(这一步无所谓,因为后面会报错):

    sudo apt install python3-colcon-common-extensions
    sudo apt install python3-colcon-mixin
    colcon mixin add default https://raw.githubusercontent.com/colcon/colcon-mixin-repository/master/index.yaml
    colcon mixin update default
    
    • 1
    • 2
    • 3
    • 4

    安装vcstool

    sudo apt install python3-vcstool
    
    • 1

    创建 Colcon 工作区并下载教程

    创建工作空间,很熟悉了。

    mkdir -p ~/ws_moveit2/src
    
    • 1

    下载 MoveIt 源代码和教程

    目前Moveit2官方已经支持了二进制安装了,这里我们就直接使用下面的指令即可完成安装

    sudo apt-get install ros-humble-moveit
    
    • 1

    进入 Colcon 工作区(即工作空间的 src 目录下)并拉取 MoveIt 教程源:

    注:官方文档的分支是 main,然而 main 分支的 repo 文件没更新,所以最后一步编译的时候会报错

    cd ~/ws_moveit2/src
    git clone https://github.com/ros-planning/moveit2_tutorials -b humble
    
    • 1
    • 2

    接下来,我们将下载 MoveIt 其余部分的源代码:

    vcs import < moveit2_tutorials/moveit2_tutorials.repos
    
    • 1

    输入命令后可能会要求您提供 GitHub 凭据。您可以直接按 Enter 直到它继续(忽略“身份验证失败”错误)。

    注意,如果运行vcs import 发生报错,解决方法详见后面的 error 解决 部分。

    建立 Colcon 工作区

    以下将从 Debian 安装任何尚未在您的工作区中的软件包依赖项。这是安装 MoveIt 及其所有依赖项的步骤:

    同样,这里更推荐使用 rosdepc

    sudo apt update && rosdep install -r --from-paths . --ignore-src --rosdistro $ROS_DISTRO -y
    
    • 1

    下一个命令将配置您的 Colcon 工作区:

    cd ~/ws_moveit2
    colcon build --mixin release
    
    • 1
    • 2

    如果 mixin 报错了,可以换一种编译方式:

     colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
    
    • 1

    此构建命令可能需要很长时间(这一步我虚拟内存调成 4G,编译了 2 个多小时),具体取决于计算机速度和可用 RAM 量(建议 32 GB)。如果计算机内存不足,可以将下面的参数附加到上面的 colcon 命令末尾。--parallel-workers 1

    注:这一步对于计算机性能较差的人来说编译时会报错,详见后面 error解决 部分

    设置 Colcon 工作区

    之后,就是我们所熟悉的 source 和运行示例了。

    来源 Colcon 工作区:

    source ~/ws_moveit2/install/setup.bash
    
    • 1

    可选:将上一个命令添加到您的.bashrc

    echo 'source ~/ws_moveit2/install/setup.bash' >> ~/.bashrc
    
    • 1

    运行样例程序

    ros2 launch moveit2_tutorials demo.launch.py rviz_tutorial:=true
    
    • 1

    添加MotionPlanning然后修改group拖拽机械臂执行运动规划。

    下面是问题及其解决

    error1

    colcon build 过程中,出现如下报错

    --- stderr: rviz_visual_tools
    c++: fatal error: Killed signal terminated program cc1plus
    compilation terminated.
    gmake[2]: *** [CMakeFiles/rviz_visual_tools.dir/build.make:90: CMakeFiles/rviz_visual_tools.dir/src/rviz_visual_tools.cpp.o] Error 1
    gmake[1]: *** [CMakeFiles/Makefile2:229: CMakeFiles/rviz_visual_tools.dir/all] Error 2
    gmake: *** [Makefile:146: all] Error 2
    ---
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    原因:虚拟内存(swap)不够,需要扩充,我们采用临时扩充的方法

    free -m #查看当前swap分区大小,发现只有1G

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8A6bd7eD-1657078188741)(assets/image-20220705170157-r5q3xtf.png)]

    sudo dd if=/dev/zero of=/swapfile bs=1024 count=4000000 #增加到4G, 空间大小为bs*count

    sudo mkswap /swapfile #把刚才增加的空间转换为swap格式

    sudochmod 0600 /swapfile #修改录权限

    sudo swapon /swapfile #使用刚才创建的4G swap空间

    free -m #此时再查看,发现swap空间变为4G

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4SV6dl7c-1657078188742)(assets/image-20220705170734-jkj5bob.png)]

    内存扩充后重新执行 colcon build 即可

    最后释放临时内存

    swapoff -a #gromacs编译结束,释放先前修改的内存

    free -m #检查swap空间是否恢复

    error2

    By not providing “Findcatkin.cmake“ in CMAKE_MODULE_PATH this project has asked CMake to find a pa

    CMake Error at CMakeLists.txt:17 (find_package):
      By not providing "Findcatkin.cmake" in CMAKE_MODULE_PATH this project has
      asked CMake to find a package configuration file provided by "catkin", but
      CMake did not find one.
    
      Could not find a package configuration file provided by "catkin" with any
      of the following names:
    
        catkinConfig.cmake
        catkin-config.cmake
    
      Add the installation prefix of "catkin" to CMAKE_PREFIX_PATH or set
      "catkin_DIR" to a directory containing one of the above files.  If "catkin"
      provides a separate development package or SDK, be sure it has been
      installed.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    原因:clone时版本选择错误

    如下,我们应该选择 ros2 版本 ,而不是默认的 main 版本

    git clone https://ghproxy.com/https://github.com/PickNikRobotics/rviz_visual_tools -b ros2
    
    • 1

    error3

    vcs import 无响应或报错

    $ vcs import < moveit2_tutorials/moveit2_tutorials.repos
    ..EE
    === ./moveit_task_constructor (git) ===
    Cloning into '.'...
    === ./moveit_visual_tools (git) ===
    Could not clone repository 'https://github.com/ros-planning/moveit_visual_tools': Cloning into '.'...
    fatal: unable to access 'https://github.com/ros-planning/moveit_visual_tools/': GnuTLS recv error (-110): The TLS connection was non-properly terminated.
    === ./rosparam_shortcuts (git) ===
    Cloning into '.'...
    === ./rviz_visual_tools (git) ===
    Could not clone repository 'https://github.com/PickNikRobotics/rviz_visual_tools.git': Cloning into '.'...
    fatal: unable to access 'https://github.com/PickNikRobotics/rviz_visual_tools.git/': gnutls_handshake() failed: Error in the pull function.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    原因:网络问题,github DDS受到污染。

    这一步是要安装以上4个依赖包,我们可以手动 git clone 来添加到工作空间的 src 目录下,注意分支版本都要选择 ros2,如果版本选择错误,编译时会出现如 error2 的报错。

    error4

    --- stderr: moveit2_tutorials
    /home/zhouhr/My_learning/moveit2_learning/src/moveit2_tutorials/doc/how_to_guides/using_ompl_constrained_planning/src/ompl_constrained_planning_tutorial.cpp: In function ‘int main(int, char**)’:
    /home/zhouhr/My_learning/moveit2_learning/src/moveit2_tutorials/doc/how_to_guides/using_ompl_constrained_planning/src/ompl_constrained_planning_tutorial.cpp:146:23: error: ‘class moveit_visual_tools::MoveItVisualTools’ has no member named ‘publishNormalAndDistancePlane’
      146 |   moveit_visual_tools.publishNormalAndDistancePlane(normal, d, rviz_visual_tools::TRANSLUCENT_DARK);
          |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    gmake[2]: *** [doc/how_to_guides/using_ompl_constrained_planning/CMakeFiles/ompl_constrained_planning.dir/build.make:76: doc/how_to_guides/using_ompl_constrained_planning/CMakeFiles/ompl_constrained_planning.dir/src/ompl_constrained_planning_tutorial.cpp.o] Error 1
    gmake[1]: *** [CMakeFiles/Makefile2:595: doc/how_to_guides/using_ompl_constrained_planning/CMakeFiles/ompl_constrained_planning.dir/all] Error 2
    gmake[1]: *** Waiting for unfinished jobs....
    gmake: *** [Makefile:146: all] Error 2
    ---
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    原因:main 更新了,但是 repo 文件没更新,应该是官方的问题。

    解决方法:在最初下载教程的时候,把分支改成 humble

    git clone https://github.com/ros-planning/moveit2_tutorials -b humble
    
    • 1

    然而到这步的时候,我们已经下载了 main 分支,可以直接把moveit2_tutorials/doc/how_to_guides/using_ompl_constrained_planning这个文件夹删掉,再把 moveit2_tutorials 下的 CMakeLists 文件中add_subdirectory 部分的doc/how_to_guides/using_ompl_constrained_planning注释掉即可。

  • 相关阅读:
    小程序配置请求代理
    有时候,使用 clang -g test.c 编译出可执行文件后,发现 gdb a.out 进行调试无法读取符号信息,为什么?
    Yakit单兵作战神器简单使用
    Flink Yarn Per Job - Yarn应用
    基于Springboot+Vue开发前后端端分离农产品进销存系统
    odoo16原码安装后,psycopg2模块出错,应用除了网站其它都安装不了
    【Django】聚合查询
    windows优化原神
    SpringBoot——日志及原理
    【C语言】IO流(文件操作)- scanf / printf没那么简单!
  • 原文地址:https://blog.csdn.net/qq_43557907/article/details/125636298