编译ROS或非ROS下的ORBSLAM2,可能出现的问题

1.ROS文件添加路径
步骤(1):开一个终端:sudo gedit /opt/ros/kinetic/setup.bash (注:一定要加上sudo)
步骤(2):写入:export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/Examples/ROS/
( 以”~/Examples/ROS/“就是你的ORBSLAM2下ROS文件所在的路径,每个人的这个路径不一定相同,注意修改”~“符号,改成你的路径)
步骤(3):source /opt/ros/kinetic/setup.bash
步骤(4):开第二个终端:echo $ROS_PACKAGE_PATH 可以看见路径已经加入成功

2.修改 ~/Examples/ROS/ORB_SLAM2/CMakeLists.txt 文件的三个地方(如果CMakeLists.txt已有(2)或(3),则不用修改)
步骤(1): 把 opencv 版本改成自己的 opencv 版本号;
步骤(2): 添加在"set"的地方添加 -lboost_system
步骤(3): 添加 include_directories("/usr/include/eigen3")

3.如果出现报错:
~/Examples/ROS/ORB_SLAM2/…/…/…/include/pointcloudmapping.h:25:35: fatal error: pcl/common/transforms.h: 没有那个文件或目录
原因分析及解决办法:(引用的博客链接 https://blog.csdn.net/LOVE1055259415/article/details/79903571)说明引用的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

5.如果出现报错:
“/opt/ros/kinetic/share/ORB_SLAM2”, but the current directory is"~/Examples/ROS/ORB_SLAM2". You should double-check your ROS_PACKAGE_PATH to ensure that packages are found in the correct precedence order.
原因分析及解决办法:(引用的博客链接 https://blog.csdn.net/weixin_44401286/article/details/102752767
这是由于在ROS环境下编译使用了多个版本的ORB-SLAM2工程造成的,比如我运行了原版的ORB-SLAM2,然后拷贝了一份改了下文件名字再对新的工程编译,就报了这个错误。因为原工程已经在/opt/ros/kinetic/share文件夹下建立了一个软连接ORB_SLAM2,这里包含有原工程的一些信息,我们需要做的就是把该软连接,替换为现在工程的软连接。
解决方案:
步骤(1):先cd到/opt/ros/kinetic/share目录下,删除原来的ORB_SLAM2软连接
sudo rm -r 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/ORB_SLAM2
之后运行重复步骤4,基本能编译成功。

6.如果出现报错:
New Map created with XX points
段错误
删除掉ORBSLAM2的cmakelists中的 -march=native 以及 g2o 的cmakelists中的-march=native(记得同时删除ORBSLAM2的build和g2o的build文件夹)
重新执行ORBSLAM目录下的./build.sh 后就可以正常跑了(如果是运行ROS,还要删除ROS下的build文件夹,再执行./build_ros.sh)
(引用的博客链接:https://blog.csdn.net/weixin_42656998/article/details/99855639

7.如果出现报错:
Could NOT find Boost CMake Error at /usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake:45
个人认为应该是Boost和PCL没有链接好,还有一种可能是,多次编译了Orbslam2,有文件残留,这个报错花费了我很久
解决方案:(参考博客链接:https://blog.csdn.net/qq_42374559/article/details/108312181
步骤(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文件夹重新编译,也可以试试博客https://blog.csdn.net/lonelysky/article/details/77650613的方法,不同的电脑可能gcc.jam 的位置不一样,可以在终端通过 locate gcc,jam 找到gcc.jam的位置进行编译,再进行步骤(2)
步骤(3):重复第4点进行编译

8.如果出现报错 :
/usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: undefined reference to symbol ‘_ZN5boost6system15system_categoryEv’
//usr/lib/x86_64-linux-gnu/libvtkRenderingFreeTypeOpenGL-6.2.so.6.2: error adding symbols: DSO missing from command line

看看是否在 ~/ROS/ORB_SLAM2/CMakeLists.txt 里的set中添加了-lboost_system
如果添加了依旧报错 参考链接:https://answers.ros.org/question/261754/undefined-reference-to-vtk-symbol/
在 ~/ROS/ORB_SLAM2/CMakeLists.txt 添加target_link_libraries(xxx ${PCL_LIBRARIES}
比如上面是ros_rgbd.cc 报的错,则target_link_libraries(xxx ${PCL_LIBRARIES} 修改为 target_link_libraries(RGBD ${PCL_LIBRARIES} )

参考链接:
1.https://blog.csdn.net/LOVE1055259415/article/details/79903571
2.https://blog.csdn.net/weixin_44401286/article/details/102752767
3.https://blog.csdn.net/weixin_42656998/article/details/99855639
4.https://blog.csdn.net/qq_42374559/article/details/108312181
5.https://blog.csdn.net/lonelysky/article/details/77650613
6.https://answers.ros.org/question/261754/undefined-reference-to-vtk-symbol/

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值