编译ROS或非ROS下的ORBSLAM2,可能出现的问题
ROS文件添加路径
步骤(1): 启动一个终端窗口:使用sudo启动gedit工具 /opt/ros/kinetic/setup.bash (请确保此操作已获得权限)
步骤(2): 执行配置:设置环境变量 ROS_PACKAGE_PATH为当前值与指定路径相加
( 以"~/Examples/ROS/"表示ORBSLAM2下的ROS文件路径,请根据个人配置修改"~"符号)
步骤(3): 源文件配置:执行setup.bash脚本
步骤(4): 启动第二个终端窗口:通过执行echo $ROS_PACKAGE_PATH 可以确认配置是否已成功
更新指定路径下的CMakeLists.txt文件内容,并对其中的三个部分进行调整。具体操作包括:
1)在设置部分中新增一项:将OpenCV项目的版本号更改为本地使用的版本号;
2)在设置变量时新增一项:引入Boost System库以提升程序运行效率;
3)在包含目录中增加一项:指向Eigen 3库的位置以便头文件可被正确包含。
3.如果遇到错误时:
~/Examples/ROS/ORB_SLAM2/…/…/…/include/pointcloudmapping.h:25:35: fatal error: pcl/common/transforms.h: 没有那个文件或目录
原因分析及解决办法:(引用的博客链接 <>)说明无法找到所需的PCL相关头文件。可以通过复制当前目录下的PCL头文件到目标路径来解决问题
sudo cp -r /usr/include/pcl-1.7/pcl/* /home/nvidia/catkin_ws/src/ORBSLAM2_with_pointcloud_map/ORB_SLAM2_modified(include)/pcl
4.运行编译代码
有ros版本:
步骤(1): chmod +x build_ros.sh
步骤(2): ./build_ros.sh
非ros版本:
步骤(1): chmod +x build.sh
步骤(2): ./build.sh
- 如果出现编译错误:
"/opt/ros/kinetic/share/ORB_SLAM2" 但当前目录是"~/Examples/ROS/ORB_SLAM2"。你应该检查你的 ROS_PACKAGE_PATH 设置是否正确无误地指向各个包文件按优先级排列存放的位置。
原因分析及解决方法:(参考博客文章 <>)
此错误源于ROS环境下多版本ORB-SLAM2工程同时编译导致的问题。具体来说,在我运行原始版本的ORB-SLAM2后又修改文件名并针对新工程进行了编译操作时就出现了此提示信息。这是因为原始工程已在 /opt/ros/kinetic/share 文件夹内创建了一个软连接指向OR
B_SLAM2文件夹(包含了一些原始工程的信息),我们需要将这一旧软连接替换成目前工程应使用的软连接。
解决方案:
步骤(1):首先进入 /opt/ros/kinetic/share 目录删除原有 ORB_SLAM2 软连接
sudo rm -rf ORB_SLAM2 (只需执行这一行命令即可解决问题)
步骤(2):在当前工程所在的 /opt/ros/kinetic/share 目录下创建新的软连接
sudo ln -s /home/bruce/study/slam/orb/point_map/Examples/ROS/ORB_SLAM2 /opt/ros/kinetic/share/OR
B_SLAM2
之后重复步骤4的操作即可成功编译。
当遇到错误时:地图已创建包含XX个点。
段错误会阻碍程序运行。
为了解除编译器选项,请从ORBSLAM2和g2o各自的CMakeLists中去除-march=native选项,并同步清理相关构建文件夹。
完成之后系统将正常启动。(如果同时使用ROS,请先清除原有的构建目录并运行./build_ros.sh)
(引用的博客链接:<>)
7.如果出现报错:
Could NOT find Boost CMake Error at /usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake:45
个人认为应该是Boost和PCL没有链接好,还有一种可能是,多次编译了Orbslam2,有文件残留,这个报错花费了我很久
解决方案:(参考博客链接:<>)
步骤(1):在Cmakelists文件的 find_package(PCL 1.7 REQUIRED) 加上 set(Boost_LIBRARY_DIR /usr/lib/x86_64-linux-gnu/)
注意:find_package(PCL 1.7 REQUIRED)中的1.7是PCL版本号,换成你的电脑里实际的版本安装
步骤(2):个人建议删除orbslam2下的build和Thirdpary文件里DBoW和g2o里面的build文件(个人认为之前编译有残留的Build文件内容会影响重新编译,最好删掉这些build文件)
不删除的话,有可能会出现报错:/usr/bin/ld: relocation R_X86_64_32 against `.rodata’ can not be used when making a shared object; recompile with -fPIC,建议最好删除掉build文件夹重新编译,也可以试试博客<>的方法,不同的电脑可能gcc.jam 的位置不一样,可以在终端通过 locate gcc,jam 找到gcc.jam的位置进行编译,再进行步骤(2)
步骤(3):重复第4点进行编译
如果在编译过程中遇到错误提示:在源文件CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o中发现符号引用未定义的问题,并且无法找到显式定义的符号_ZN5boost6system15system_categoryEv。此外,请确认动态链接库libvtkRenderingFreeTypeOpenGL-6.2.so.6.2缺少符号的问题
请确认在 ~/ROS/ORB_SLAM2/CMakeLists.txt 的set部分是否已包含-lboost_system指令。即便已添加相关选项仍会遇到编译错误,请参考以下链接获取详细信息:https://answers.ros.org/question/261754/undefined-reference-to-vtk-symbol/
在构建时,请确保将CMakeLists.txt中的target_link_libraries指令正确配置为xxxx并包含PCL_LIBRARIES项。例如,在编译ros_rgbd.cc时出现错误,则应将target_link_libraries指令从xxxx修改为RGBD。
参考链接:
【
