下载好源码:https://github.com/raulmur/ORB_SLAM2
chmod +x build.sh
./build.sh
运行问题1:
error: ‘usleep’ was not declared in this scope
usleep(5000);
解决方法:
在ORB_SLAM2-master/include/system.h中,增加 "#include
运行成功
最后一行显示:
[100%] Built target stereo_euroc
建立catkin_ws,其中主文件放于新建的src文件中。
将包含Examples/ROS/ORB_SLAM2
的路径添加到ROS_PACKAGE_PATH
环境变量中。gedit ~/.bashrc
文件并在最后添加以下行。
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:
catkin_make
在终端执行命令
source ./bashrc
(2)编译ROS下的ORB-SLAM2
chmod +x build_ros.sh
./build_ros.sh
编译报错:
/usr/bin/ld: CMakeFiles/Stereo.dir/src/ros_stereo.cc.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'
/usr/lib/x86_64-linux-gnu/libboost_system.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
CMakeFiles/Stereo.dir/build.make:214: recipe for target '../Stereo' failed
make[2]: *** [../Stereo] Error 1
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/Stereo.dir/all' failed
make[1]: *** [CMakeFiles/Stereo.dir/all] Error 2
解决方法:https://blog.csdn.net/sinat_38343378/article/details/78883919
是要在管理员权限下把locate到的3个文件全部复制过去。
再 ./build_ros.sh 运行成功。
[100%] Built target Mono
单目模式(非ros模式):
rosrun ORB_SLAM2 Mono /home/zp/p_s/ORB_SLAM2-master/src/Vocabulary/ORBvoc.txt /home/zp/p_s/ORB_SLAM2-master/src/Examples/Monocular/TUM1.yaml
没有输出。
上述路径不完整。
./mono_tum path_to_vocabulary path_to_settings path_to_sequence
./mono_tum /home/zp/p_s/ORB_SLAM2-master/src/Vocabulary/ORBvoc.txt /home/zp/p_s/ORB_SLAM2-master/src/Examples/Monocular/TUM1.yaml /media/zp/zengpan/dataset/TUM dataset/rgbd_dataset_freiburg1_room/rgb
【报错】
经验教训是:千万不要在文件名中包含空格,不然作为输入时,会自动视为2个参数。
./mono_tum ../../Vocabulary/ORBvoc.txt TUM1.yaml /media/zp/zengpan/dataset/TUM_dataset/rgbd_dataset_freiburg1_room
【成功了】
运行单目,TUM数据集:
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /media/zp/zengpan/dataset/TUM%20dataset/rgbd_dataset_freiburg1_room/rgb
运行orbslam2会在中间卡死,在界面上会显示track lost 。经过查找在rgbd_tum.cc中,执行完slam过程会执行SLAM.Shutdown()函数,就算这个函数卡住,导致后面轨迹无法保存。
解决办法是把保存轨迹的函数放在SLAM.Shutdown()前面,这个可以将轨迹保存,但是shutdown()函数还是不能通过。
运行单目,Euroc数据集:
在/home/zp/p_s/ORB_SLAM2-master/src/Examples/Monocular/目录下:
./mono_euroc ../../Vocabulary/ORBvoc.txt EuRoC.yaml /media/zp/zengpan/dataset/Euroc_dataset/MH_01_easy/mav0/cam0/data /home/zp/p_s/ORB_SLAM2-master/src/Examples/Monocular/EuRoC_TimeStamps/MH01.txt
===============================================
RGBD模式(ros模式):
需要开3个终端:
1.roscore
2.rosbag play .bag
3.run......
rosrun ORB_SLAM2 RGBD /Vocabulary/ORBvoc.txt kinect2.yaml
其中第二个相当于是基于ROS提供一个数据流进来。
source ~/.bashrc
重新编译工程
chmod +x build_ros.sh
./build_ros.sh