UBUNTU16.04运行ORB SLAM2

下载好源码: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

你可能感兴趣的:(SLAM)