mpl_ros是一个Motion Primitive Library的ros wrapper。官网
系统环境
ubuntu20.04+ros noetic
apt安装的pcl1.10,自带vtk7.1
1 安装
参考官网。
mkdir -p mpl_ros/src
cd mpl_ros/src
git clone https://github.com/sikang/mpl_ros.git
cd mpl_ros/
git submodule update --init --recursive
cd ~/mpl_ros
catkin config -DCMAKE_BUILD_TYPE=Release
catkin build
2 报错
2.1 mapping_utils/mesh_sampling.cpp文件报错
1 fatal error: pcl/common/transforms.h: No such file or directory #include <pcl/common/transforms.h>
2 undefined reference to `rosbag::Bag::toHeaderString[abi:cxx11](ros::Time const*) const’
这两个错误需要修改planning_ros_utils下的cmakelists.txt
//第四行改成c++14
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -Wall -Wno-deprecated-declarations")
//第5行加上找PCL包
find_package(PCL REQUIRED)
//第14行包含目录加上PCL
include_directories(${EIGEN3_INCLUDE_DIRS} ${MOTION_PRIMITIVE_LIBRARY_INCLUDE_DIRS} ${PCL_INCLUDE_DIRS})
//第42行将mesh_sampling链接到PCL库
target_link_libraries(mesh_sampling ${PCL_LIBRARIES})
//第二个错误需要加入rosbag依赖第六行加上
find_package(catkin REQUIRED COMPONENTS rviz roscpp rosbag)
3 fatal error: pcl_conversions/pcl_conversions.h: No such file or directory
48 | #include <pcl_conversions/pcl_conversions.h>
这个错误需要安装一个sudo apt install libpcl-conversions-dev
4 如果报vtk相关的错误,先把vtk删了,这会连带着把pcl也删了,然后直接安装pcl就自带vtk了。
sudo apt remove libvtk7-dev libvtk7.1p
sudo apt install libpcl-dev
sudo apt install ros-noetic-pcl-conversions
2.2 planning_ros_utils/src/planning_rviz_plugins/map_display.cpp文件报错
error: ‘class rviz::PointCloudCommon’ has no member named ‘getCallbackQueue 39 update_nh_.setCallbackQueue(point_cloud_common_->getCallbackQueue());
这个错误需要把39行函数换成update_nh_.setCallbackQueue(context_->getThreadedQueue());
2.3 mpl_external_planner/include/mpl_external_planner/ellipsoid_planner/ellipsoid_util.h文件报错
fatal error: pcl/kdtree/kdtree_flann.h: No such file or directory
8 | #include <pcl/kdtree/kdtree_flann.h>
这两个错误需要修改mpl_test_node下的cmakelists.txt
//第8行改成c++14
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -Wall -Wno-deprecated-declarations")
//第20行加上找PCL包
find_package(PCL REQUIRED)
//第26行包含目录加上PCL
include_directories(${PCL_INCLUDE_DIRS} ${EIGEN3_INCLUDE_DIR} ${MOTION_PRIMITIVE_LIBRARY_INCLUDE_DIRS} ${DECOMP_UTIL_INCLUDE_DIRS})
//第41行将ellipsoid_planner_node链接到PCL库
target_link_libraries(ellipsoid_planner_node ${MOTION_PRIMITIVE_LIBRARY_LIBRARIES} ${PCL_LIBRARIES})
注:undefined reference to大都和库的链接有关。
接下来就可以运行学习了。