用自己的相机和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模式

参考:

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

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

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

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

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

 

实例: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

 

d435i的坐标系系统

TF树

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

 

 

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

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

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

 

 

安装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界面。很漂亮,很友好的界面!

 

————————

自主标定

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

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

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

 

 

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话题

注意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.

 

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话题中获取相机内参等参数

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

左图为对齐前

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

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

 

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

 

2、双目模式

做以下准备:

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

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

 

 

问题记录

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.

 

 

 

 

 

 

 

 

  • 4
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
要在 H5 页面中跳转到微信小程序,需要使用微信提供的 JS-SDK。 首先,在 H5 页面中引入微信 JS-SDK: ```html <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> ``` 然后,在页面加载完成后,初始化 JS-SDK: ```javascript wx.config({ // 这里需要填写微信公众号的 appid appId: 'your_app_id', // 这里需要填写当前页面的完整 URL,不包括 # 及其后面部分 // 例如:http://www.example.com/path/to/page // 注意:JS-SDK 要求 URL 必须是经过encodeURIComponent编码的 // 所以需要使用 encodeURIComponent 方法进行编码 // 下面的示例假设当前页面的 URL 是 http://www.example.com/path/to/page#abc // 则需要编码的 URL 是 http%3A%2F%2Fwww.example.com%2Fpath%2Fto%2Fpage // 注意:如果当前页面的 URL 有参数,则需要把参数也编码进去 // 例如:http://www.example.com/path/to/page?foo=bar&baz=qux // 则需要编码的 URL 是 http%3A%2F%2Fwww.example.com%2Fpath%2Fto%2Fpage%3Ffoo%3Dbar%26baz%3Dqux // 如果不知道如何编码 URL,可以使用 encodeURIComponent 方法 // 例如:encodeURIComponent('http://www.example.com/path/to/page#abc') // 输出:http%3A%2F%2Fwww.example.com%2Fpath%2Fto%2Fpage%23abc // 可以使用浏览器的 Console 进行测试 // 注意:下面的示例中,URL 部分需要替换成实际的 URL // 示例中的 appid 和 URL 都是假的,请替换成实际的 appid 和 URL // 注意:wx.config 方法需要传入一个回调函数,用于在配置完成后执行 // 回调函数中的代码可以调用 wx.checkJsApi 方法检查当前环境是否支持 JS-SDK 的相关 API // 如果支持,则可以在回调函数中执行其他操作,例如打开微信小程序 // 如果不支持,则需要提示用户在微信客户端打开页面 jsApiList: ['checkJsApi'] // 这里需要填写微信公众号的 secret // 然后调用 wx.ready 方法,在回调函数中执行其他操作 // 例如打开微信小程序 }); ``` 最后,通过调用 wx.miniProgram.navigateTo 方法打开微信小程序: ```javascript wx.miniProgram.navigateTo({ // 这里需要填写要跳转的小程序的 appid 和页面路径 // 例如:appid: 'wx1234567890', path: 'pages/index/index' appid: 'your_mini_program_appid', path: 'your_mini_program_page_path' }); ``` 需要注意的是,以上代码仅适用于在微信浏览器中打开的 H5 页面。如果在其他浏览器中打开,或使用微信开发者工具预览,则无法跳转到微信小程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值