前置:rtabslam需要opencv3.2.0,而tx2 ros melodic 自带4.1.1,所以请按照上篇文章完成配置
Nvidia TX2 安装 opencv3.2.0 及在ros melodic下配置opencv3.2.0_prophet_xh的博客-CSDN博客
开始安装
1.安装二进制文件
sudo apt install ros-melodic-rtabmap-ros
2.从源码安装
source /opt/ros/melodic/setup.bash
source ~/catkin_ws/melodic/setup.bash
首先是一些必要的依赖
sudo apt install ros-melodic-rtabmap ros-melodic-rtabmap-ros
可选的依赖g2o,GTSAM,libpointmatcher...酌情安装,安装前先用sd卡扩充下tx2内存,不然很容易tx2内存满了,导致系统崩溃。
安装 RTAB-Map 独立库。不要在 Catkin 工作区中克隆。
cd ~
git clone https://github.com/introlab/rtabmap.git rtabmap
cd rtabmap/build
cmake ..
make -j4
sudo make install
一般依赖都有的话不会报错,都能顺利编译完毕。
3. 将 RTAB-Map ros-pkg 安装在 Catkin 工作区的 src 文件夹中。
第三步的坑是非常多的,前前后后花了很多时间解决
首先是文章开头提到的opencv问题,如果没有配置
会出现 “只找到opencv4.1.1” 这样类型的报错
我们开始安装,这里默认你的工作空间叫 catkin_ws
cd ~/catkin_ws
git clone https://github.com/introlab/rtabmap_ros.git src/rtabmap_ros
catkin_make前建议以下操作
(1).先更改下 CMakeLists.txt的一些内容,以免一些找不到opencv的报错
打开rtabmap_ros的CMakeLists.txt文件
将
find_package(OpenCV REQUIRED QUIET COMPONENTS core calib3d imgproc highgui stitching optflow #photo video OPTIONAL_COMPONENTS aruco xfeatures2d nonfree gpu cudafeatures2d)
改成
set(OpenCV_DIR /usr/local/opencv320/share/OpenCV)
find_package(OpenCV REQUIRED)
添加
${OpenCV_INCLUDE_DIRS}
具体如图
(2)安装一些包,该步骤个人觉得比较玄学
在catkin_make时刚开始不能编译,机缘巧合下安装了这些包就能继续编译下去了
所以这步,大家还是根据具体情况,酌情采纳
sudo apt-get install vim cmake
sudo apt-get install git
sudo apt-get install gcc g++
Pangolin安装
sudo apt-get install libglew-dev
sudo apt-get install cmake
sudo apt-get install libpython2.7-dev
sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev
sudo apt-get install libdc1394-22-dev libraw1394-dev
sudo apt-get install libjpeg-dev libtiff5-dev libopenexr-dev
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
make -j4
sudo make install
完成上述步骤后
catkin_make -j4
开始报错
报错
[ 75%] Building CXX object rtabmap_ros/CMakeFiles/rtabmap_ros.dir/src/OdometryROS.cpp.o
rtabmap_ros/CMakeFiles/rtabmap_ros.dir/build.make:62: recipe for target 'rtabmap_ros/CMakeFiles/rtabmap_ros.dir/src/MsgConversion.cpp.o' failed
make[2]: *** [rtabmap_ros/CMakeFiles/rtabmap_ros.dir/src/MsgConversion.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
Scanning dependencies of target rtabmap_camera
[ 75%] Building CXX object rtabmap_ros/CMakeFiles/rtabmap_camera.dir/src/CameraNode.cpp.o
In file included from /usr/include/pcl-1.8/pcl/search/kdtree.h:44:0,
from /home/prophet/catkin_ws/src/rtabmap_ros/src/MapsManager.cpp:42:
/usr/include/pcl-1.8/pcl/kdtree/kdtree_flann.h:230:29: error: field ‘param_k_’ has incomplete type ‘flann::SearchParams’
::flann::SearchParams param_k_;
^~~~~~~~
In file included from /usr/include/pcl-1.8/pcl/search/kdtree.h:44:0,
from /home/prophet/catkin_ws/src/rtabmap_ros/src/MapsManager.cpp:42:
/usr/include/pcl-1.8/pcl/kdtree/kdtree_flann.h:52:10: note: forward declaration of ‘struct flann::SearchParams’
struct SearchParams;
^~~~~~~~~~~~
In file included from /usr/include/pcl-1.8/pcl/search/kdtree.h:44:0,
from /home/prophet/catkin_ws/src/rtabmap_ros/src/MapsManager.cpp:42:
/usr/include/pcl-1.8/pcl/kdtree/kdtree_flann.h:233:29: error: field ‘param_radius_’ has incomplete type ‘flann::SearchParams’
::flann::SearchParams param_radius_;
^~~~~~~~~~~~~
In file included from /usr/include/pcl-1.8/pcl/search/kdtree.h:44:0,
from /home/prophet/catkin_ws/src/rtabmap_ros/src/MapsManager.cpp:42:
/usr/include/pcl-1.8/pcl/kdtree/kdtree_flann.h:52:10: note: forward declaration of ‘struct flann::SearchParams’
struct SearchParams;
^~~~~~~~~~~~
rtabmap_ros/CMakeFiles/rtabmap_ros.dir/build.make:86: recipe for target 'rtabmap_ros/CMakeFiles/rtabmap_ros.dir/src/MapsManager.cpp.o' failed
make[2]: *** [rtabmap_ros/CMakeFiles/rtabmap_ros.dir/src/MapsManager.cpp.o] Error 1
原因: pcl与opencv冲突
解决方案
sudo gedit /usr/include/pcl-1.8/pcl/kdtree/kdtree_flann.h
把
::flann::SearchParams param_k_;
改成
::flann::SearchParams *param_k_;
把
::flann::SearchParams param_radius_;
改成
::flann::SearchParams *param_radius_;
保存退出
catkin_make -j4
继续,编译完成
rtab的ros包到此已经编译完毕!
下篇将开始使用rtab进行slam