ROS-Melodic 编译Moveit全过程记录和错误解决方案

1,043 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

在Ros Melodic版本下,直接运行sudo apt-get install ros-melodic-moveit会出现以下错误:

   下列软件包有未满足的依赖关系:
    ros-melodic-moveit-full : 依赖:xxxxx 但是它将不会被安装
  E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

正确的安装方法是先从源码编译解决环境冲突问题,具体步骤如下:

1. 准备工作

更新软件包版本

rosdep update
sudo apt-get update
sudo apt-get dist-upgrade 

下载依赖文件

 sudo apt-get install python-wstool python-catkin-tools clang-format-3.9 

2. 源码编译

创建工作区

mkdir ~/ws_moveit
cd ~/ws_moveit 

下载源代码

wstool init src
wstool merge -t src https://raw.githubusercontent.com/ros-planning/moveit/master/moveit.rosinstall
wstool update -t src
rosdep install -y --from-paths src --ignore-src --rosdistro ${ROS_DISTRO}
catkin config --extend /opt/ros/${ROS_DISTRO} --cmake-args -DCMAKE_BUILD_TYPE=Release 

Tip:这一步中,wstool update -t src由于网络问题可能会导致速度很慢,解决方法是在浏览器中进入https://raw.githubusercontent.com/ros-planning/moveit/master/moveit.rosinstall网站,可以看到如下信息:

# This file is intended for users who want to build MoveIt from source.
# Used with wstool, users can download source of all packages of MoveIt.
- git:
    local-name: moveit_msgs
    uri: https://github.com/ros-planning/moveit_msgs.git
    version: master
- git:
    local-name: moveit_resources
    uri: https://github.com/ros-planning/moveit_resources.git
    version: master
- git:
    local-name: geometric_shapes
    uri: https://github.com/ros-planning/geometric_shapes.git
    version: noetic-devel
- git:
    local-name: moveit
    uri: https://github.com/ros-planning/moveit.git
    version: master
- git:
    local-name: rviz_visual_tools
    uri: https://github.com/PickNikRobotics/rviz_visual_tools
    version: master
- git:
    local-name: moveit_visual_tools
    uri: https://github.com/ros-planning/moveit_visual_tools.git
    version: master
- git:
    local-name: moveit_tutorials
    uri: https://github.com/ros-planning/moveit_tutorials.git
    version: master
- git:
    local-name: panda_moveit_config
    uri: https://github.com/ros-planning/panda_moveit_config.git
    version: melodic-devel

记载的是要编译的各个仓库和分支,所以如果由于网络问题,可以在src文件夹下键入git clone -b 分支名 +地址,其中的分支名为version的内容。

安装编译器缓存(可选环节)

安装ccache:

sudo apt-get install ccache

配置环境

echo 'export PATH=/usr/lib/ccache:$PATH' >> $HOME/.bashrc
source $HOME/.bashrc 

利用ccache可以查看build过程中命中率和缓存使用情况的统计信息:

ccache --show-stats

编译Moveit

catkin build

Tip:编译中可能会出现的各种问题:

  1. catkin build导致系统经常卡死,这是由于编译默认采用全部核,可以在后面加上-j2或-j4

  2. 当出现如下错误时:

    /opt/ros/kinetic/lib/libresource_retriever.so:对‘curl_easy_init@CURL_OPENSSL_3’未定义的引用
    /opt/ros/kinetic/lib/libresource_retriever.so:对‘curl_easy_perform@CURL_OPENSSL_3’未定义的引用
    /opt/ros/kinetic/lib/libresource_retriever.so:对‘curl_easy_setopt@CURL_OPENSSL_3’未定义的引用
    /opt/ros/kinetic/lib/libresource_retriever.so:对‘curl_easy_cleanup@CURL_OPENSSL_3’未定义的引用
    ......
    

    则表示ROS和Anaconda的出现兼容问题,意思就是在编译过程中所使用的curl与libcurl无法匹配

    解决方法(直接删除libcurl.so.4,将libcurl.so.4指向ros使用的版本/usr/lib/x86_64-linux-gnu/libcurl.so.4:):

    cd ~/anaconda3/lib
    sudo rm libcurl.so.4
    sudo ln -s /usr/lib/x86_64-linux-gnu/libcurl.so.4.4.0 libcurl.so.4
    
  3. 当出现如下错误时:

    //usr/lib/x86_64-linux-gnu/libapr-1.so.0:对‘uuid_generate@UUID_1.0’未定义的引用
    //usr/lib/x86_64-linux-gnu/libSM.so.6:对‘uuid_unparse_lower@UUID_1.0’未定义的引用
    

    同样是由ROS和Anaconda的出现的兼容问题导致

    解决方法:

    sudo rm ~/anaconda3/lib/libuuid.so.1
    sudo ln -s /lib/x86_64-linux-gnu/libuuid.so.1 ~/anaconda3/lib/libuuid.so.1
    

4. 安装Moveit

终端键入:

sudo apt-get install ros-melodic-moveit

5. 检验安装

打开roscore:

roscore

启动Moveit-Setup-Assistant:

roslaunch moveit_setup_assistant setup_assistant.launch

启动成功后出现如下界面,恭喜你已经成功安装Ros Melodic下的Moveit!

在这里插入图片描述