赞
踩
目录
环境:ubtuntu16
处理器:i7-8700CPU@3.2GHz×12
内存:64G
第三方库:Pangolin opencv3.2 Eigen3
https://github.com/UZ-SLAMLab/ORB_SLAM3
ORB-SLAM3论文地址:https://arxiv.org/abs/2007.11898
- cd ORB-SLAM3/
- chmod +x build.sh
- sudo ./build.sh
/home/one/catkin_ws/src/ORB_SLAM3/src/LocalMapping.cc:628:49: error: no match for ‘operator/’ (operand types are ‘cv::Matx<float, 3, 1>’ and ‘float’) x3D = x3D_h.get_minor<3,1>(0,0) / x3D_h(3); KannalaBrandt8.cpp也是一样的问题!
解决方法:找到对应文件所在行,把x3D = x3D_h.get_minor<3,1>(0,0) / x3D_h(3)
换成
x3D = cv::Matx31f(x3D_h.get_minor<3,1>(0,0)(0) / x3D_h(3), x3D_h.get_minor<3,1>(0,0)(1) / x3D_h(3), x3D_h.get_minor<3,1>(0,0)(2) / x3D_h(3));
下载数据集&测试
kmavvisualinertialdatasets – ASL Datasets
单目:
./Examples/Monocular/mono_euroc Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml /home/one/dataset/mav0/cam0/data Examples/Monocular/EuRoC_TimeStamps/MH04.txt
单目+IMU:
./Examples/Monocular-Inertial/mono_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular-Inertial/EuRoC.yaml ./dataset ./Examples/Monocular-Inertial/EuRoC_TimeStamps/MH05.txt
双目:
./Examples/Stereo/stereo_euroc ./Vocabulary/ORBvoc.txt ./Examples/Stereo/EuRoC.yaml ./dataset ./Examples/Stereo/EuRoC_TimeStamps/MH05.txt
双目+IMU:
./Examples/Stereo-Inertial/stereo_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Stereo-Inertial/EuRoC.yaml ./dataset ./Examples/Stereo-Inertial/EuRoC_TimeStamps/MH05.txt
双目:
rosrun ORB_SLAM3 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml true
rosbag play MH_04_difficult.bag /cam0/image_raw:=/camera/left/image_raw /cam1/image_raw:=/camera/right/image_raw
双目+imu:
rosrun ORB_SLAM3 Stereo_Inertial Vocabulary/ORBvoc.txt Examples/Stereo-Inertial/EuRoC.yaml true
rosbag play MH_04_difficult.bag /cam0/image_raw:=/camera/left/image_raw /cam1/image_raw:=/camera/right/image_raw /imu0:=/imu
注意:这里EUROC数据集是没有深度图的,暂时不跑RGB-D
1、开启ROS节点:
roscore
2、运行相机节点:
roslaunch kinect2_bridege kinect2_bridge.launch depth_method:=cpu reg_method:=cpu
3、运行ORB_SLAM3:
rosrun ORB_SLAM3 RGBD ORBvoc.txt PATH yaml file PATH
问题:
1-相机驱动安装教程:
ROS下实时运行ORB-SLAM2_w²大大的博客-CSDN博客_ros运行orbslam2
KINECT2相机在ubuntu16.04下跑通ORB_SLAM2_努力科研的背心君的博客-CSDN博客
2-运行报话题错误:
在相应main函数中改相机对应的话题,然后重新运行./build_ros.sh编译ROS空间即可-例ros_rgbd.cc,
- /kinect2/qhd/image_color_rect
- /kinect2/qhd/image_depth_rect
- sudo apt install python-pip
- pip install evo --upgrade --no-binary evo
单轨迹:
evo_traj euroc data.csv --plot
因为EUROC真实值.csv文件有17列数据,与.txt对不齐,所以这里去除速度等信息并调整四元数顺序把data.csv转换成.tum格式
TUM真实值格式: 时间戳,三维坐标,四元数相机位姿
EUROC真实值格式: 时间戳,三维坐标,四元数相机位姿 ,速度,角速度,线速度
evo_traj euroc data.csv --save_as_tum
真实轨迹与运行轨迹-对齐:
evo_traj tum KeyFrameTrajectory.txt --ref=data.tum -p --plot_mode xyz -a --correct_scale
计算ape-绝对位姿误差
evo_ape tum KeyFrameTrajectory.txt data.tum -p --plot -s --correct_scale -a --align -v --save_results ape.zip
关于evo的更多用法可自行搜索
ORB_SLAM3
单目:
单目+IMU:
ORB_SLAM2
单目:
VINS-Mono
VINS-Mono配置环境和运行参考其他博客:
一周小结(七)——从零开始配置VINS-Mono运行环境_猛龙过江ing-CSDN博客
注:要想生成轨迹文件需要在相应的配置.yaml文件修改生成的路经,里面默认的是原作者的路经
回环:
不回环:
为了生成轨迹文件,这里在ROS/ORB_SLAM3/src下的.cc文件对应位置加上生成轨迹的代码
- ros::spin();
- // Stop all threads
- SLAM.Shutdown();
-
- // Save camera trajectory
- SLAM.SaveKeyFrameTrajectoryTUM("KeyFrameTrajectory_TUM_Format.txt");
- SLAM.SaveTrajectoryTUM("FrameTrajectory_TUM_Format.txt");
- SLAM.SaveTrajectoryKITTI("FrameTrajectory_KITTI_Format.txt");
-
- ros::shutdown();
ORB_SLAM3
双目:
双目+imu:
ORB_SLAM2
通过对比结果可以得到以下结论:
1-跑单目时,ORB_SLAM3与ORB_SLAM2表现差不多,VINS-Mono表现最差,差了快有一个数量集。另外,ORB_SLAM3加了IMU之后,跑的时候更稳定,精度有所下降。
2-跑双目时,ORB-SLAM2会有一部分轨迹丢失,而ORB_SLAM3比ORB_SLAM2稳定,加了IMU之后,精度提升。
(1)TUM数据集-rgbd_dataset_freiburg1_desk
ORB_SLAM3
ORB_SLAM2
(2)TUM数据集-rgbd_dataset_freiburg1_plant
ORB_SLAM3
ORB_SLAM2
从测试结果上来看,ORB_SLAM3在TUM运行RGB-D效果没有ORB_SLAM2的好。
因最近项目要求,需要在arm平台的xavier部署ORBSLAM3,故顺便做了下小测试。
期间刷机走了不少弯路,这里放我参考的部分文章:
NVIDIA AGX xavier 系列一 刷机步骤经验总结_隔壁的大瓜的博客-CSDN博客_agx刷机
玩转NVIDIA Jetson AGX Xavier(7)--- jetson打开关闭风扇,解决风扇不转_木子山石的学习笔记-CSDN博客_jetson nano 风扇不转
环境:ubtuntu18
处理器:ARMv8 Processor rev 0 (v8l) × 4
内存:32G
ORBSLAM2:16.4左右
ORBSLAM3:26.2左右
总体来看,帧率比ORBSLAM2提高了59.75%左右。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。