Xavier中orb_slam
安装ORB_SLAM3
ORB-SLAM3是西班牙萨拉戈萨大学于2020年7月中旬开源的作品,与ORB-SLAM、ORB-SLAM2一脉相承,是一个能够使用单目、立体、RGB-D相机,兼容针孔及鱼眼相机模型进行视觉、视觉+惯导和多地图的综合性SLAM方案。
ORB3的主要创新:
- 实现了基于视觉与IMU的紧耦合SLAM系统,该系统完全依赖最大似然估计(即便在初始化阶段也是如此)。该方案无论在小型或者大型室内室外环境中都能够稳定的运行,并且比以前的方法精确了2-5倍。
- 多地图系统。依赖于一种新的位置识别和改进的回环检测,能够保证ORB3能够长时间在特征缺失环境下有效运行,当它跟丢时会重新启动一个新的地图,当检测到回环之后系统能够无缝拼接多个地图。
- 第一个能在算法阶段重用所有历史信息的系统,包含了共视帧之间的捆集调整(BA),即使共视帧在时间上相差甚远,甚至来自不同的地图。 实验表明,在所有的传感器配置中,ORB3与文献中最好的系统一样鲁棒,且更准确。双目惯性SLAM在EuRoC数据集上的平均精度为3.6厘米,在TUM-VI数据集(AR/VR场景的一个典型场景)中,快速手持式移动时的平均精度为9毫米。
下载源码:
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git
使用C++11编译器
安装Pangolin
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .
ORB3编译运行
cd ORB_SLAM3/
chmod +x ./build.sh
./build.sh
测试ORB3的相机和IMU的效果 下载数据集
https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets
在ORB3的根目录下打开终端,运行
-
单目相机+IMU
./Examples/Monocular-Inertial/mono_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular-Inertial/EuRoC.yaml /home/yikang/Downloads/MH_05 ./Examples/Monocular-Inertial/EuRoC_TimeStamps/MH05.txt
-
仅单目相机
./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml /home/yikang/Downloads/MH_05 ./Examples/Monocular/EuRoC_TimeStamps/MH05.txt
kitti2bag 的使用
kitti2bag是把kitti的数据转换成rosbag的工具
地址如下:
https://github.com/tomas789/kitti2bag
安装kitti2bag
pip install kitti2bag
下载kitti数据,使用raw data的数据 data_drive_tracklets.zip是涉及标注信息
运行kitti2bag
2011_09_26是解压后的文件夹名称,0096是第几次drive的idx,raw_synced是几个指令中的一个.是指加载的文件是raw_data的意思
kitti2bag -t 2011_09_26 -r 0096 raw_synced
-
可以利用rosbag来测试结果
rosbag info xxx
-
运行ros,并rviz可视化
roscore
rviz
rosbag play -l kitti_2011_09_26_drive_0096_synced.bag
在rviz的Fixed Frame中选择base_link; 在add->By topic,选择下图中的PointCloud2添加雷达图像,再添加Image
修改Topic
将PointCloud2的Topic修改为"kitti/velo/pointcloud" 将Image的Topic修改为"/kitti/camera_color_left/image_raw"
返回终端播放
终端里空格键可以用来暂停和播放 返回rviz可以观察到点云和图像
Q1
当时遇到了一个问题,执行kitti2bag命令时,显示command not found
然后在kitti2bagissue20上找到了答案:
pip uninstall kitti2bag
sudo pip install kitti2bag
问题解决!
ORB-SLAM2_ROS编译安装及跑kitti数据集
###Q2 问题困扰了很久
- 主要是没有理解ORB-SLAM2-ROS是在ORB-SLAM2上编译完成的 对CMakeList修改的路径不明晰.导致修改中产生错误 或顺序不对 无法产生依赖包 编译不下去
- g2o和DBow2两个依赖库不用提前安装 ORB-SLAM2中带有相应的安装文件 会随着编译安装完成.
安装过程
-
下载KITTI-grayscale数据集
-
编译安装ROS版本的ORB-SLAM2
- 使用ROS创建workspace
mkdir -p ~/catkin_orb_slam2_ws/src
cd ~/catkin_orb_slam2_ws/
catkin_make
mkdir ORB_SLAM2
- 下载ORB-SLAM2:
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
- 安装编译:
cd ORB_SLAM2
chmod +x build.sh
vim build.sh
Q1
编译构建的过程中出现error:usleep()函数未定义的错误
需要在system.h中增加#include<stdlib.h>
的头文件
Q2
CMakeFiles/ORB_SLAM2.dir/build.make:134: recipe for target 'CMakeFiles/ORB_SLAM2.dir/src/LoopClosing.cc.o' failed
make[2]: *** [CMakeFiles/ORB_SLAM2.dir/src/LoopClosing.cc.o] Error 1
打开LoopClosing.h
,将:
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
Eigen::aligned_allocator<std::pair<const KeyFrame*, g2o::Sim3> > > KeyFrameAndPose;
#更改为:
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
Eigen::aligned_allocator<std::pair<KeyFrame *const, g2o::Sim3> > > KeyFrameAndPose;
重新编译即可通过.
这将在lib文件夹中创建libORB_SLAM2.so,并在Examples文件夹中创建可执行文件mono_tum,mono_kitti,rgbd_tum,stereo_kitti,mono_euroc和stereo_euroc。 这个很重要
- 然后利用
build_ros.sh
安装ros
Q3
rosbuild] rospack found package "ORB_SLAM" at "", but the current
directory is "/home/josh/Desktop/ORB_SLAM". You should double-check your
ROS_PACKAGE_PATH to ensure that packages are found in the correct
precedence order.
需要在ROS下添加ROS_PACKAGE_PATH
- 添加环境变量
echo "source ~/catkin_orb_slam2_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
- 运行build.sh
sudo gedit ~/.bashrc
- 修改环境变量(user就是用户的名字,把它改成你自己的路径名字,ORB-SLAM2/Examples/ROS所在的完整路径。)
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/(user)/catkin_orb_slam2_ws/ORB_SLAM2/Examples/ROS
- 编译安装ROS版本的ORB-SLAM2
cd ORB_SLAM2
chmod +x build_ros.sh
./build_ros.sh
Q4
在编译时出现库的错误
错误信息
error:
0%] Built target rosbuild_precompile
make[2]: *** No rule to make target '/opt/ros/kinetic/lib/libopencv_calib3d3.so.3.2.0', needed by '../Mono'. Stop.
CMakeFiles/Makefile2:718: recipe for target 'CMakeFiles/Mono.dir/all' failed
make[1]: *** [CMakeFiles/Mono.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
make[2]: *** No rule to make target '/opt/ros/kinetic/lib/libopencv_calib3d3.so.3.2.0', needed by '../RGBD'. Stop.
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/RGBD.dir/all' failed
make[1]: *** [CMakeFiles/RGBD.dir/all] Error 2
make[2]: *** No rule to make target '/opt/ros/kinetic/lib/libopencv_calib3d3.so.3.2.0', needed by '../Stereo'. Stop.
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/Stereo.dir/all' failed
make[1]: *** [CMakeFiles/Stereo.dir/all] Error 2
make[2]: *** No rule to make target '/opt/ros/kinetic/lib/libopencv_calib3d3.so.3.2.0', needed by '../MonoAR'. Stop.
CMakeFiles/Makefile2:820: recipe for target 'CMakeFiles/MonoAR.dir/all' failed
make[1]: *** [CMakeFiles/MonoAR.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2
要在/Examples/ROS/ORB-SLAM2/CMakeLists.txt
文件下修改 加上 -lboost_system
set(LIBS
${OpenCV_LIBS}
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
#加上这一句
-lboost_system
)
之前理解有误 耽误了很多时间
ROS之环境变量PATH小结
-
新建一个工作空间后,编译后需要设置一下环境变量,不然在其他终端运行不了或者找不到相应功能包等。
vim ~/.bashrc
-
在里面添加一句:
source ~/工作空间/devel/setup.bash
3. 这里的my_catkin是我的工作空间,相应更改你的工作空间的名字即可。这里也可以直接一句命令搞定,不用进来文件添加。
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/my_catkin/
4. 接下来 刷新
source ~/.bashrc
5. 之后可以利用以下命令来查看你是否设置成功。
echo $ROS_PACKAGE_PATH
环境变量处理的一些操作
查看环境变量
export
echo $PATH
暂时加入环境变量
export PATH=/lib/bin:$PATH
永久加入环境变量
针对当前用户
vim ~/.bashrc 或 vim ~/.profile
export PATH="/lib/bin:$PATH"
针对所有用户
vim /etc/profile
export PATH="/lib/bin:$PATH"
修改后可以使用命令使其立即生效
source ~/.bashrc
配置~/.bashrc后下次登录shell无效问题
vim ~/.profile
加入:
if [ -s ~/.bashrc ]; then
source ~/.bashrc;
fi
或
source ~/.bashrc
orb-slam2_ros单目摄像头运行和kitti
安装usb_cam编译
要运行monoslam的demo要修改一下
需要修改ORB_SLAM2/src
下的ros_mono.cc
,将程序里面的topic改为/usb_cam/image_raw.
通过rviz工具选择image通过订阅/usb/image_raw/确认是否OK.
**更改后需要重新build_ros.sh
.
运行测试demo
rosrun ORB_SLAM2 Mono ~/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt ~/catkin_ws/src/ORB_SLAM2/Examples/Monocular/TUM1.yaml
利用kitti
./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTI00-02.yaml ../dataset/sequences/00/