注:以下修改自官网文档上的安装步骤,在此基础上列出我安装时所遇到的问题与解决方法,官方的坑有很多,看我这篇就够了。
入门
构建 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
安装rosdep以安装系统依赖项:
sudo apt install python3-rosdep
注意,国内 rosdep 不稳定,可以使用鱼香ros 开发的 rosdepc,下面是安装方法:
sudo apt install -y python3-pip
sudo pip3 install rosdepc
安装 ROS 2 后,请确保您拥有最新的软件包:
注:以下的 rosdep 都可以换成 rosdepc,避免网络不稳定导致的问题。
sudo rosdep init
rosdep update
sudo apt update
sudo apt dist-upgrade
使用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
安装vcstool:
sudo apt install python3-vcstool
创建 Colcon 工作区并下载教程
创建工作空间,很熟悉了。
mkdir -p ~/ws_moveit2/src
下载 MoveIt 源代码和教程
目前Moveit2官方已经支持了二进制安装了,这里我们就直接使用下面的指令即可完成安装
sudo apt-get install ros-humble-moveit
进入 Colcon 工作区(即工作空间的 src 目录下)并拉取 MoveIt 教程源:
注:官方文档的分支是 main,然而 main 分支的 repo 文件没更新,所以最后一步编译的时候会报错
cd ~/ws_moveit2/src
git clone https://github.com/ros-planning/moveit2_tutorials -b humble
接下来,我们将下载 MoveIt 其余部分的源代码:
vcs import < moveit2_tutorials/moveit2_tutorials.repos
输入命令后可能会要求您提供 GitHub 凭据。您可以直接按 Enter 直到它继续(忽略“身份验证失败”错误)。
注意,如果运行vcs import 发生报错,解决方法详见后面的 error 解决 部分。
建立 Colcon 工作区
以下将从 Debian 安装任何尚未在您的工作区中的软件包依赖项。这是安装 MoveIt 及其所有依赖项的步骤:
同样,这里更推荐使用 rosdepc
sudo apt update && rosdep install -r --from-paths . --ignore-src --rosdistro $ROS_DISTRO -y
下一个命令将配置您的 Colcon 工作区:
cd ~/ws_moveit2
colcon build --mixin release
如果 mixin 报错了,可以换一种编译方式:
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
此构建命令可能需要很长时间(这一步我虚拟内存调成 4G,编译了 2 个多小时),具体取决于计算机速度和可用 RAM 量(建议 32 GB)。如果计算机内存不足,可以将下面的参数附加到上面的 colcon 命令末尾。--parallel-workers 1
注:这一步对于计算机性能较差的人来说编译时会报错,详见后面 error解决 部分
设置 Colcon 工作区
之后,就是我们所熟悉的 source 和运行示例了。
来源 Colcon 工作区:
source ~/ws_moveit2/install/setup.bash
可选:将上一个命令添加到您的.bashrc
:
echo 'source ~/ws_moveit2/install/setup.bash' >> ~/.bashrc
运行样例程序
ros2 launch moveit2_tutorials demo.launch.py rviz_tutorial:=true
添加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
---
原因:虚拟内存(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.
原因:clone时版本选择错误
如下,我们应该选择 ros2 版本 ,而不是默认的 main 版本
git clone https://ghproxy.com/https://github.com/PickNikRobotics/rviz_visual_tools -b ros2
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.
原因:网络问题,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
---
原因:main 更新了,但是 repo 文件没更新,应该是官方的问题。
解决方法:在最初下载教程的时候,把分支改成 humble
git clone https://github.com/ros-planning/moveit2_tutorials -b humble
然而到这步的时候,我们已经下载了 main 分支,可以直接把moveit2_tutorials/doc/how_to_guides/using_ompl_constrained_planning这个文件夹删掉,再把 moveit2_tutorials 下的 CMakeLists 文件中add_subdirectory 部分的doc/how_to_guides/using_ompl_constrained_planning注释掉即可。