-
概述
ORB-SLAM3运行开源数据集可以正常运行,但是运行普通的USB相机与IMU录制的数据集,无法正常运行和建立初始地图。录制的数据集存在时间戳混乱,使用相机与IMU标定标定的时间戳也只是标定时的平均时间漂移。无论哪个视觉SLAM算法都需要良好的时空对齐。因此如果运行https://gitee.com/hu-cheng123/orb-slam3_-wt算法出现漂移,先检查数据集的时间戳和外参输入是否准确。
本指南旨在帮助使用Intel Realsense T265设备上配置并运行改进的ORB-SLAM3算法,因其内置的精确同步机制,能有效避免上述问题。推荐使用我录制的数据集,在性能比较强和硬盘读写速度快的电脑上运行,然后录制其他场景的数据集进行测试。
通过百度网盘分享的文件:room2_20…
链接:https://pan.baidu.com/s/1jDDOcHArLshxvd0zJRAQBg?pwd=tnck
提取码:tnck
复制这段内容打开「百度网盘APP 即可获取」
1. 环境准备与基础配置
1.1 系统与依赖项检查
确认Ubuntu版本与系统要求:Ubuntu18.04+ROS(melodic)版本测试通过
安装必要的开发工具与库:OpenCV 3.3.2+eigen 3.3.4+Pangolin 0.4测试通过
1.2 安装改进的ORB-SLAM3算法
克隆算法仓库
git clone https://gitee.com/hu-cheng123/orb-slam3_-wt.git
切换到主分支,主分支是稳定的代码
按照安装运行说明.txt和README.md编译代码
1.3 安装ORB-SLAM3 ROS示例程序(可选)
配置ROS环境:
gedit ~/.bashrc export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM3/Examples/ROS # 替换PATH路径为ORB-SLAM-WT安装的位置
编译ORB-SLAM3的ROS示例程序
./build_ros.sh
2. Realsense T265的安装与配置
2.1 安装Intel Realsense SDK 2.0
git clone -b v2.48.0 https://github.com/IntelRealSense/librealsense
推荐源码安装,测试v2.48.0正常,其他高版本可能不兼容T265,安装依赖
sudo apt-get install libudev-dev pkg-config libgtk-3-dev sudo apt-get install libusb-1.0-0-dev pkg-config sudo apt-get install libglfw3-dev sudo apt-get install libssl-dev
安装权限脚本
sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules && udevadm trigger
编译安装
mkdir build cd build cmake ../ -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=true sudo make uninstall make clean && make -j8 sudo make install
测试安装
realsense-viewer
2.2 安装Realsense ROS Wrapper
先创建一个catkin的工作空间
mkdir -p catkin_ws/src cd src
克隆代码,注意 Realsense ROS Wrapper需要与Intel Realsense SDK 对应,dynamic_reconfigure是动态调参的参数配置,可GUI 调参
git clone -b v2.3.1 https://github.com/IntelRealSense/realsense-ros.git git clone https://github.com/pal-robotics/ddynamic_reconfigure.git
编译安装,编译为Release版本
catkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release
测试安装,先加载ROS环境,PATH替换实际catkin_ws位置
source PATH/devel/setup.bash roslaunch realsense2_camera rs_camera.launch
查看发布的话题
rostopic list
发现没有发布/sensor_msg/imu类型 因为默认不开启
该SDK将IMU数据分别发布为加速度计和陀螺仪数据,将rs_camera.launch或者t265.launch文件
<arg name="enable_infra" default="true"/><arg name="enable_infra1" default="true"/><arg name="enable_infra2" default="true"/><arg name="unite_imu_method" default="copy"/><!-- linear_interpolation -->
开启这些arg参数,才会发布鱼眼相机与IMU的数据,由于加速度计只有62hz,但是需要以陀螺仪200hz频率发布,提供两种方式,copy是复制上一个时刻的值,linear_interpolation 是线性插值。
2.3 录制T265设备数据集
使用realsense-viewer录制,录制比较稳定,但是无法直接录制IMU数据,需要后续处理。(不太推荐)
使用rosbag录制,可以录制IMU数据,但是可能掉帧,录制的时候不要CPU超负荷,硬盘读写速度也会影响。
rosbag record /camera/fisheye1/image_raw /camerfisheye2/image_raw /camera/imu -o cam_imu
3. 配置ORB-SLAM3以适配Realsense T265
3.1 修改启动配置文件
修改PATH/Examples/ROS/ORB_SLAM3的launch文件,替换voc cam save_path为ORB-SLAM3实际路径
<launch> <arg name="voc" default = "/home/hucheng/slam_ws/ORB_SLAM3/Vocabulary/ORBvoc.bin" /> <arg name="cam" default="/home/hucheng/slam_ws/ORB_SLAM3/Examples/Monocular-Inertial/RealSense_T265.yaml" /> <arg name="sbEqu" default="false" /> <arg name="save_path" default="/home/hucheng/slam_ws/ORB_SLAM3/results" /> <node name="Mono_Inertial" pkg="ORB_SLAM3" type="Mono_Inertial" args="$(arg voc) $(arg cam) $(arg sbEqu) $(arg save_path)" output="screen"> <remap from="/imu" to="/camera/imu"/> <remap from="/camera/left/image_raw" to="/camera/fisheye1/image_raw"/> </node> </launch>
设置ROS话题,使用remap重映射话题名
<remap from="/imu" to="/camera/imu"/> <remap from="/camera/left/image_raw" to="/camera/fisheye1/image_raw"/>
3.2 校正内外参数
Realsense T265 提供示例可以获取提前标定的内参
rs-enumerate-devices -c
按照https://wit-motion.yuque.com/xkhxbg/an9tnv/lxmck8ariaixzfez 方式使用kalibr标定,写入RealSense_T265.yaml配置参数。标定结果应该与通过示例获取的内参基本一致,但是可能更准确。
4. 运行ORB-SLAM3
4.1 单目+IMU模式运行
roslaunch ORB_SLAM3 T265_Mono_Inertial.launch rosbag play room2_2024-05-28-19-27-02.bag
4.2 双目+IMU模式运行
roslaunch ORB_SLAM3 T265_Stereo_Inertial.launch rosbag play room2_2024-05-28-19-27-02.bag
运行room2_2024-05-28-19-27-02.bag 录制的视频
5. 注意事项
算法初始化需要一定时间,需要一定的激活IMU,因此需要在初始化时简单的慢速平移,持续约5s,在初始化时存在足够的匹配。
相机频率较低(10hz以下)会存在静止时漂移,频率30hz,CPU负担重,使用率400%,算法存在四个线程一直在循环。
双目版本鲁棒性更强,但是算力要求高,因此容易丢帧,可能导致漂移。
8d-4571-9673-d4d8a60bc0b7.mp4)5. 注意事项
算法初始化需要一定时间,需要一定的激活IMU,因此需要在初始化时简单的慢速平移,持续约5s,在初始化时存在足够的匹配。
相机频率较低(10hz以下)会存在静止时漂移,频率30hz,CPU负担重,使用率400%,算法存在四个线程一直在循环。
双目版本鲁棒性更强,但是算力要求高,因此容易丢帧,可能导致漂移。
03-29
1058
03-17
07-28