用自己的相机和IMU运行测试ORB_SLMA3

目录

关于ORB_SLAM的一些资料链接

ORB_SLAM3的

ORB_SLAM2的

通用的

注意事项

1、ZED图像输出帧率配置

问题记录

单目VI模式初始化后立即跟踪丢失问题

运行融合IMU模式

实例:D435i跑ORB_SLAM3

参考

D435i产品介绍

安装d435驱动

1、安装SDK(可选)

2、安装ROS驱动

运行d435

一起跑起来

问题记录

1、能够检测到设备,但节点启动失败


关于ORB_SLAM的一些资料链接

ORB_SLAM3的

https://my.oschina.net/u/4418449/blog/4687945

ORBSLAM3 用ROS接口运行双目IMU和单目IMU模式

https://github.com/xiefei2929/ORB_SLAM3-ROS-Interface

 

 

ORB_SLAM2的

来啦!全网最详细的ORB-SLAM2精讲:原理推导+逐行代码分析!

ORB-SLAM2代码注释及视频解析

LearnVIORB

通用的

超全汇总 | ORB-SLAM2 / ORB-SLAM3 相关改进代码!

 

注意事项

1、ZED图像输出帧率配置

ZED相机配置参数,要求原始图像采集频率大于处理后输出的图像频率,这样才能保证处理后输出图像频率达到设定帧率。

原因是需要对原始图像进行处理,因此通常输出图像频率会小于原始采集图像频率,如果两者设置频率相同,则输出图像频率会低于设定帧率。

例如,原始采集帧率=30,输出图像帧率=20

2、

 

问题记录

单目VI模式初始化后立即跟踪丢失问题

单目VI模式很容易初始化成功,但是每次初始化成功后马上又跟丢了,为什么?

 

 

运行融合IMU模式

参考:

  • ORBSLAM3运行记录(单目+IMU)

此博文做了实验分析相机和imu外参(旋转矩阵,平移向量)标定精度对运行结果精度的影响,指出:

(1)当相机和imu平移量中0.1m以内时,可以忽略偏移量(设置为0即可),对精度影响很小

(2)当旋转矩阵即角度偏差达到2度时,造成很大的误差

结论:旋转矩阵对精度影响很多,偏移量影响较小

另外,博主还通过实验说明imu和相机时间戳误差补偿精度也会对ORB_SLMA3跑的结果精度有影响

用自己的相机和IMU运行测试ORB_SLMA3_第1张图片

 

实例:ZED跑ORB_SLAM3

 

 

实例:D435i跑ORB_SLAM3

参考

用realsense d435i传感器在实际环境中跑ORB_SLAM3,顺带解决一部分编译问题

从零开始跑ORB_SLAM2(三) 使用Realsense D435相机跑ORB_SLAM2生成稀疏点阵

基于深度相机 RealSense D435i 的 ORB SLAM 2(ubuntu18.04,自标定)

RealSense D435i 在ubuntu上运行ORB-SLAM2

Realsense D435基于ROS跑通ORBSLAM2(双目模式)

安装参考

(推荐,我就是参照这个安装成功的)。在ROS下Intel RealSense D435i 驱动的安装,避免踩坑,避免缺少imu话题等各种问题(适用于D400系列、SR300和T265跟踪模块等)(16.04 kinetic)

Melodic + Realsense D435i 配置及错误问题解决(古月居)

Ubuntu16.04安装RealsenseD435驱动

Intel Realsense D435i驱动安装及固件升级

 

注意点

  • 使用USB3.0线缆
  • 直接roslaunch,不必配置launch中的设备端口号
  • 运行相机权限文件拷贝脚本时即setup_udev_rules.sh,一定不能线缆连接相机
  • NVIDIA主控不必执行更新核操作了

https://github.com/IntelRealSense/librealsense/wiki/Release-Notes

NVidia Jetson - User Notification

With the release of Jetpack 4.4.1 support for RealSense Devices D415,D435(i) has been integrated into the L4T kernel, thus the owners/developers for that platform (Jetson AGX/Nano) that use those devices do not need to apply kernel patches anymore in order to receive the extended functionality and features, such as metadata.

  •  安装SDK时要保证SDK与固件版本号一致

从源码下载SDK安装时,不要使用默认最新版(master),要根据相机固件版本号找到兼容的SDK版本号,下载时再指定该版本号的SDK

 

 

D435i产品介绍

https://www.intelrealsense.com/zh-hans/depth-camera-d435i/

https://dev.intelrealsense.com/docs

用自己的相机和IMU运行测试ORB_SLMA3_第2张图片

 

d435i的坐标系系统

TF树

图中很多坐标系,划分为2类,一是符合ROS标准的(x前,z上),二是图像坐标系(z前,x右)

用自己的相机和IMU运行测试ORB_SLMA3_第3张图片

 

 

重点关注几个传感器(相机及imu)坐标系位置及之间的TF关系

(1)相机坐标系原点:base_link为底座固定孔处,camera_color_frame为RGB相机,camera_infra1_frame和camera_aligned_depth_to_infra1_frame均为左路红外相机,

(2)imu坐标原点:加速度计与陀螺仪坐标系重合

用自己的相机和IMU运行测试ORB_SLMA3_第4张图片

 

 

安装d435驱动

我电脑的安装环境:

联想x86笔记本,i5,ubuntu 16.04,ros kinetic

固件版本:5.12.12.100(其实5.12.11.0才是官方推荐的与后面SDK和ROS包版本对应的),SDK版本:2.42.0,ROS包版本:2.2.22

版本号

固件版本、SDK版本、ROS驱动版本。三者要一致!

固件与SDK版本对应关系(官方):https://github.com/IntelRealSense/librealsense/releases

3者版本对应关系:https://github.com/IntelRealSense/realsense-ros/releases

例如,以下3个版本为正确的对应关系:

5.12.11.0

LibRealSense v2.42.0

ROS Wrapper 2.0 for Intel® RealSense™ Devices (build 2.2.22)

————

固件版本(firmware)5.xx

版本更新信息:Firmware releases D400

固件升级指导:Firmware Update Tool (rs-fw-update)

————

SDK版本(SDK2.0)2.xx

https://github.com/IntelRealSense/librealsense/wiki/Release-Notes

————

ROS驱动版本 2.xx

https://github.com/intel-ros/realsense

https://github.com/IntelRealSense/realsense-ros/releases

 

1、安装SDK(可选,建议安装)

SDK源码首页,给出了下载链接、安装指导链接:https://github.com/IntelRealSense/librealsense

官网给出了NVIDIA安装驱动的示例教程:https://github.com/IntelRealSense/librealsense/blob/master/doc/installation_jetson.md

安装SDK的好处,能做更多的事情,且有GUI界面,非常便利,可以做:

  • realsense-viewer查看原始RGB图像及深度图点云图、IMU姿态等信息
  • 用realsense-viewer进行固件升级
  • 有可以直接运行的例程代码

2种安装方式

https://github.com/IntelRealSense/realsense-ros

方式1:package模式,(不推荐)一种是

https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages

方式2:源码模式,(推荐)另一种是从源码编译安装,先安装SDK,再安装ROS驱动

https://github.com/IntelRealSense/librealsense/blob/master/doc/installation.md

 下面是官网给出的2种安装方式的介绍:

以下引自:https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages

方式1、Using pre-build packages

Intel® RealSense™ SDK 2.0 provides installation packages for Intel X86/AMD64-based Debian distributions in dpkg format for Ubuntu 16/18/20 LTS.
The Realsense DKMS kernel drivers package (librealsense2-dkms) supports Ubuntu LTS kernels 4.4, 4.8, 4.10, 4.13, 4.15, 4.18*, 5.0*, 5.3* and 5.4. Please refer to Ubuntu Kernel Release Schedule for further details.

方式2、Configuring and building from the source code

While we strongly recommend to use DKMS package whenever possible, there are certain cases where installing and patching the system manually is necessary:

  • Using SDK with non-LTS Ubuntu kernel versions: **4.16 **
  • Integration of user-specific patches/modules with librealsense SDK.
  • Adjusting the patches for alternative kernels/distributions.

The steps are described in Linux manual installation guide

 

安装步骤

下载指定版本SDK

git clone -b v2.24.0 https://github.com/IntelRealSense/librealsense.git

 

测试是否安装成功

方法1:固件更新工具

将列出所有已连接的相机信息,

rs-fw-update -l

输出:

connected devices:
1) Name: Intel RealSense D415, serial number: 725112060411, ASIC serial number: 012345678901, firmware version: 05.11.01.100, USB type: 3.2

方法2:例程程序

通过直接运行安装自带的可执行文件例程来测试相机是否能够正常工作

cd librealsense/build/examples/capture

./rs-capture

————————

realsense-viewer的使用

运行指令realsense-viewer打开调试GUI界面。很漂亮,很友好的界面!

用自己的相机和IMU运行测试ORB_SLMA3_第5张图片

用自己的相机和IMU运行测试ORB_SLMA3_第6张图片

 

————————

自主标定

参考官网https://www.intelrealsense.com/zh-hans/self-calibration-for-depth-cameras/教程,提供了一个标定教程pdf,自行下载参考。

其实很简单,用realsense-viewer进行自主标定,简单几个步骤就搞定,可以参考基于深度相机 RealSense D435i 的 ORB SLAM 2(ubuntu18.04,自标定)

下面左右图分别对应标定前后:realsense的GUI及指导说明真的很到位很棒!

用自己的相机和IMU运行测试ORB_SLMA3_第7张图片  用自己的相机和IMU运行测试ORB_SLMA3_第8张图片

 

2、安装ROS驱动

https://github.com/IntelRealSense/realsense-ros

ROS驱动独立于SDK,可单独安装。

用一条指令直接安装其ROS包。但此方法试过虽然能安装成功,但无法成功启动摄像头。

 

运行d435

直接roslaunch,不必配置launch中的设备端口号。

下面为运行roslaunch realsense2_camera rs_d435_camera_with_model.launch,不仅启动了相机,还启动了RVIZ加载了相机urdf模型

用自己的相机和IMU运行测试ORB_SLMA3_第9张图片

 

IMU话题

注意2点:

1、合并发布的imu话题

d435i原始发布的加速度计(250HZ)和陀螺仪(400HZ)话题为独立的。

通过配置unite_imu_method 参数允许将两者合并成一个imu话题发布出去

  • unite_imu_method: The D435i and T265 cameras have built in IMU components which produce 2 unrelated streams: gyro - which shows angular velocity and accel which shows linear acceleration. Each with it's own frequency. By default, 2 corresponding topics are available, each with only the relevant fields of the message sensor_msgs::Imu are filled out. Setting unite_imu_method creates a new topic, imu, that replaces the default gyro and accel topics. The imu topic is published at the rate of the gyro. All the fields of the Imu message under the imu topic are filled out.

    • linear_interpolation: Every gyro message is attached by the an accel message interpolated to the gyro's timestamp.
    • copy: Every gyro message is attached by the last accel message.

用自己的相机和IMU运行测试ORB_SLMA3_第10张图片 

2、imu与图像话题时间同步

由于IMU频率快,图像慢,虽然两者采集时间相同(即话题中的时间戳相同),但是由于图像需要处理花时间,因此两者发布的时间不同,导致节点订阅两者接收时间不一样。

通过配置hold_back_imu_for_frames参数可以让imu话题等待图像话题到来后一起发布,这样就能保证订阅节点在同一时间接收到具有相同时间戳的IMU和图像话题了。

hold_back_imu_for_frames: Images processing takes time. Therefor there is a time gap between the moment the image arrives at the wrapper and the moment the image is published to the ROS environment. During this time, Imu messages keep on arriving and a situation is created where an image with earlier timestamp is published after Imu message with later timestamp. If that is a problem, setting hold_back_imu_for_frames to true will hold the Imu messages back while processing the images and then publish them all in a burst, thus keeping the order of publication as the order of arrival. Note that in either case, the timestamp in each message's header reflects the time of it's origin.

 

一起跑起来

1、RGBD模式

做以下修改

  • 源文件ros_rgbd.cc中订阅的RGB图像及深度图像的话题名称,修改为: 注意!使用的是与RGB图像对齐后的深度图!
message_filters::Subscriber rgb_sub(nh, "/camera/color/image_raw", 1);
message_filters::Subscriber depth_sub(nh, "/camera/aligned_depth_to_color/image_raw", 1);
  • 配置文件

从对应相机发布的camera_info话题中获取相机内参等参数

对齐前后的深度图的比较:

左图为对齐前

用自己的相机和IMU运行测试ORB_SLMA3_第11张图片

运行结果:场景为实验室回字形走廊,约30×20m

效果不理想,没有形成闭环。

用自己的相机和IMU运行测试ORB_SLMA3_第12张图片

 

在特征少的地方如果转弯速度太快,会导致跟踪丢失,此时把相机往回退几步回到前几帧成功定位的地方就可以重新定位成功了。

 

2、双目模式

做以下准备:

  • 修改源文件ros_stereo.cc中双目图像订阅话题名称:
    // message_filters::Subscriber left_sub(nh, "/camera/left/image_raw", 1);
    // message_filters::Subscriber right_sub(nh, "camera/right/image_raw", 1);
    /* d435i */
    message_filters::Subscriber left_sub(nh, "/camera/infra1/image_rect_raw", 1);
    message_filters::Subscriber right_sub(nh, "/camera/infra2/image_rect_raw", 1);
  • 修改双目相机配置文件

d435i的双目为红外相机,因此为灰度图,白色斑点为投影的激光斑点,为了增加无纹理平面的纹理信息

用自己的相机和IMU运行测试ORB_SLMA3_第13张图片

 

 

问题记录

1、能够检测到设备,但节点启动失败

原因1:

忘记把相机权限文件放到/etc/udev/rules.d/下。(但是安装源码中有

解决方案1:注意,下面的操作不能插上相机!

首选方案:

SDK源码文件中有将权限文件拷贝到系统目录下的脚本(scripts/setup_udev_rules.sh),直接执行此脚本即可。

其他方案:

https://github.com/IntelRealSense/realsense-ros/issues/1408

Cannot run D435i or T265 camera. "failed to open usb interface: 0, error: RS2_USB_STATUS_ACCESS"

I reproduced the issue and found one solution. Could you please check if you have 99-realsense-libusb.rules under /etc/udev/rules.d/ ? If not, please copy

https://github.com/IntelRealSense/librealsense/blob/master/config/99-realsense-libusb.rules

用指令下载:

sudo wget https://github.com/IntelRealSense/librealsense/blob/master/config/99-realsense-libusb.rules 

to

/etc/udev/rules.d/

before connect the cameras. After that you can connect the camera and execute the ros launch.

 

 

 

 

 

 

 

 

你可能感兴趣的:(传感器,SLAM)