VINS学习03——使用Realense_D435i运行Vins_Fusion

这篇具有很好参考价值的文章主要介绍了VINS学习03——使用Realense_D435i运行Vins_Fusion。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 简介

上一篇跑了一下VINS_Fusion自带的demo,用的是几个常用的开源数据集,这篇文章主要是将VINS_Fusion用在自己的实验室设备上,在进行前期参数标定、config文件修改、精度验证过程中对算法有更深次理解,也方便后期开展代码阅读

2.相机参数标定

2.1相机型号

realsense_d435i是一个很常用的相机,主要包含话题如下

1.imu话题          名称:/camera/imu               类型:sensor_msgs/Imu
2.相机原始数据     名称:/camera/image_raw     类型:sensor_msgs/Image
3.相机深度信息     名称:/camera/image_rect   类型:sensor_msgs/Image

**后补:我今天才发现D435i是个单目相机! ! ! ! ! ! **

2.2 相机参数标定

一篇写的很好的文章

3.cofig文件配置

在跑VINS_Fusion自带demo时可以看出来,基本上是不同算法不同数据集只需要换一个config文件,所以我们在用Realense_D435i跑算法的重点就是配置这个yaml文件.本小节先给出最终的config文件,然后解释其中每一部分参数的作用

3.1单目+IMU的config文件

在3.2-3.5中出现和3.1参数设置不一致情况,以3.1为准

%YAML:1.0

#common parameters
#support: 1 imu 1 cam; 1 imu 2 cam: 2 cam; 
imu: 1         
num_of_cam: 1 

imu_topic: "/camera/imu"
image0_topic: "/camera/color/image_raw"
output_path: "/home/dji/output/"

cam0_calib: "left.yaml"
image_width: 640
image_height: 480

# Extrinsic parameter between IMU and Camera.
estimate_extrinsic: 1   # 0  Have an accurate extrinsic parameters. We will trust the following imu^R_cam, imu^T_cam, don't change it.
                        # 1  Have an initial guess about extrinsic parameters. We will optimize around your initial guess.
body_T_cam0: !!opencv-matrix
   rows: 4
   cols: 4
   dt: d
   data: [0.9992453, -0.01127283, -0.00488404, -0.0087336,
               0.0112394,   0.9999137,   -0.00679953, 0.0068368,
               0.0049602,  0.00674412,   0.9999649, 0.01134131,
          0, 0, 0, 1]
          
#Multiple thread support
multiple_thread: 1

#feature traker paprameters
max_cnt: 150            # max feature number in feature tracking
min_dist: 30            # min distance between two features 
freq: 10                # frequence (Hz) of publish tracking result. At least 10Hz for good estimation. If set 0, the frequence will be same as raw image 
F_threshold: 1.0        # ransac threshold (pixel)
show_track: 1           # publish tracking image as topic
flow_back: 1            # perform forward and backward optical flow to improve feature tracking accuracy

#optimization parameters
max_solver_time: 0.04  # max solver itration time (ms), to guarantee real time
max_num_iterations: 8   # max solver itrations, to guarantee real time
keyframe_parallax: 10.0 # keyframe selection threshold (pixel)

#imu parameters       The more accurate parameters you provide, the better performance
acc_n: 0.1          # accelerometer measurement noise standard deviation. #0.2   0.04
gyr_n: 0.01         # gyroscope measurement noise standard deviation.     #0.05  0.004
acc_w: 0.001         # accelerometer bias random work noise standard deviation.  #0.002
gyr_w: 0.0001       # gyroscope bias random work noise standard deviation.     #4.0e-5
g_norm: 9.805         # gravity magnitude

#unsynchronization parameters
estimate_td: 0                      # online estimate time offset between camera and imu
td: 0.00                             # initial value of time offset. unit: s. readed image clock + td = real image clock (IMU clock)

#loop closure parameters
load_previous_pose_graph: 1        # load and reuse previous pose graph; load from 'pose_graph_save_path'
pose_graph_save_path: "/home/dji/output/pose_graph/" # save and load path
save_image: 1                   # save image in pose graph for visualization prupose; you can close this function by setting 0 

3.2 基本参数

#support: 1 imu 1 cam; 1 imu 2 cam: 2 cam;  分别表示的是单目+IMU,双目+IMU,双目 在这里设置选用的话题名 以及选用相机的标定文件
imu: 1         
num_of_cam: 1 
imu_topic: "/camera/imu" #imu话题名
image0_topic: "/camera/color/image_raw" #相机原始图像话题名
output_path: "/home/dji/output/"

3.3传感器参数

①相机内参

cam0_calib: "left.yaml" #左相机内参
image_width: 640 #图像宽度
image_height: 480 #图像高度

left.yaml

%YAML:1.0
---
model_type: PINHOLE
camera_name: camera
image_width: 640
image_height: 480
distortion_parameters:
   k1: 0.10866995537152147
   k2: -0.23049837670803422
   p1: 0.002195369
   p2: -0.000499223
projection_parameters:
   fx: 588.2104060261963
   fy: 589.1738695825263
   cx: 338.16491234179625
   cy: 252.1523457447961

right.yaml
和left.yaml格式一样 具体数据是多少取决于你的标定结果
②imu标定参数
imu标定包含可标定噪声(比如零偏,安装误差)和不可标定参数(噪声协方差),本篇文章就不写细节了,给出一个比较好的教程和标定工具

#imu parameters       T
acc_n: 0.1          # 加速度计噪声标准差
gyr_n: 0.01         # 陀螺仪噪声标准差
acc_w: 0.001         # 加速度计随机游走标准差
gyr_w: 0.0001       # 陀螺仪随机游走标准差
g_norm: 9.805         # 重力加速度

③IMU和相机外参
这里说一下:一般相机标定,内参是固定的,外参是随着每次实验安装不同,但是我们用的D435i imu和相机是集成的,所以基本上外参也不太变化。

#这是一个标志位 ,是(1)否(0)在数据融合过程中优化相机外参。
#在imu和camera深耦合过程中可以优化下边的ody_T_cam0 和body_T_cam1 ,这里选择是否优化
estimate_extrinsic: 1
#左相机和imu的外参 核心就是4*4的位姿矩阵,多了三个参数,分别描述行数,列数,单位
body_T_cam0: !!opencv-matrix # Timu2c_1 Tu2c
   rows: 4
   cols: 4
   dt: d
   data: [0.9992453, -0.01127283, -0.00488404, -0.0087336,
          0.0112394,   0.9999137,   -0.00679953, 0.0068368,
          0.0049602,  0.00674412,   0.9999649, 0.01134131,
          0, 0, 0, 1]

3.4数据融合参数

其实在更换相机时,这些参数默认即可
①多线程参数
在回调函数读取数据过程中,避免线程冲突,会加锁,所以这里设置允许的线程数,默认1即可

multiple_thread: 1

②特征点提取参数

max_cnt: 150            # 特征点追踪中最大的特征个数
min_dist: 30            # 两个特征点之间最小的距离
freq: 10                # 发布融合结果的频率,一般不小于10,当设置为0,那么发布的频率==image的频率
F_threshold: 1.0       
show_track: 0        #标志位参数:是(1)否(0)  把特征点作为话题发布出来
flow_back: 1         #标志位参数:是(1)否(0)  执行前向和反向光流来提高特征点提取精度

③优化相关参数

max_solver_time: 0.04  # 最大求解器迭代时间(毫秒),保证实时性
max_num_iterations: 8   # 最大求解器迭代次数,以保证实时性
keyframe_parallax: 10.0 # 关键帧选择阈值(像素)

④时间同步相关参数

estimate_td: 0                      # 标志位参数    在线估计相机和 IMU 之间的时间偏移;如果你的相机和IMU时间是对齐的,就关闭即可
td: 0.00                             # 时间偏移的初始值。单位:s. 读取的图像时钟 + td = 真实图像时钟(IMU 时钟)
# 如果你的相机和IMU初始时间没有对准,那么需要设置td来做对齐

⑤闭环检测相关参数

load_previous_pose_graph: 0        # 标志位参数: 是(1)否(0)从“pose_graph_save_path”加载和重用以前的pose 图
pose_graph_save_path: "/home/dji/output/pose_graph/" # 保存和加载路径
save_image: 1                  # 将图像保存在姿势图中以进行可视化;您可以通过设置 0 关闭此功能

4.代码运行

4.1代码环境

注意config文件的目录,使用红框标记的两个yaml

4.2运行代码

1.运行rviz
roslaunch vins vins_rviz.launch
2.数据融合代码
rosrun vins vins_node /home/passoni/pedestrian/src/VINS-Fusion/config/realsense_d435i/realsense_mono_imu_config.yaml
3.回环(可选)
rosrun loop_fusion loop_fusion_node  /home/passoni/pedestrian/src/VINS-Fusion/config/realsense_d435i/realsense_mono_imu_config.yaml
4.播放rosbag包
rosbag play  data3.bag

4.3运行结果

VINS学习03——使用Realense_D435i运行Vins_Fusion

5.参考文献

https://blog.csdn.net/m0_46555669/article/details/127277626

6.下篇预告

用D435i 做一下单目+imu,双目+imu,双目的精度对比,如果成功我会上传我的bag包以及code文章来源地址https://www.toymoban.com/news/detail-501507.html

到了这里,关于VINS学习03——使用Realense_D435i运行Vins_Fusion的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ORB-SLAM2学习笔记6之D435i双目IR相机运行ROS版ORB-SLAM2并发布位姿pose的rostopic

    ORB-SLAM2算法1已成功编译安装 ROS 版本 ORB-SLAM2 到本地,以及ORB-SLAM2算法5

    2024年02月14日
    浏览(33)
  • Ubuntu20.04——一篇文章让你从零配置VINS_Mono环境以及运行(2023年最新)

    注:文末包含该文章涉及的所有安装包的网盘链接 零、换源(也可以先不换,后面觉得下载慢再换也行) 1、备份原来的源 2、打开源保存文件 3、换源(换其中一个就行,也可以去搜别的源) 4、更新源 一、安装git(克隆源代码)、gedit(编辑文本)、cmake、gcc、g++、build-e

    2024年02月04日
    浏览(31)
  • Ubuntu22.04源码安装ROS-noetic(ROS1非ROS2),编译运行VINS-MONO

    由于22.04默认安装ROS2,但很多仓库都是基于ROS1的,不想重装系统,参考这两个博客安装了ROS-noetic: 博客1. https://blog.csdn.net/Drknown/article/details/128701624 博客2. https://zhuanlan.zhihu.com/p/418227536 我的库版本(实测可行): eigen:3.3.7 ceres:1.14.0(用2.系列版本的编译时需要把C++版本设

    2024年02月02日
    浏览(42)
  • Ubuntu20.04中ros运行ORBSLAM2_with_pointcloud_map(采用D435相机实时运行)

    第一次运行,有些坑,然后告诉一下大家该如何自己解决的思路,毕竟每个人的实际运行环境不一样。 系统:联想Y7000,Ubunru20.04(已经安装ros noetic,推荐小鱼的一键安装ros)直接终端输入: 显卡驱动已经安装好,采用的GPU1050Ti 显卡安装,建议就用系统自带的安装方式(设

    2024年02月08日
    浏览(31)
  • ubuntu18.04复现yolo v8之最终章,realsenseD435i+yolo v8完美运行

    背景:上一篇博客我们已经为复现yolov8配置好了环境,如果前面的工作顺利进行,我们已经完成了90%( 学习类程序最难的是环境配置 )。 接下来将正式下载yolov8的相关代码,以及进行realsenseD435i相机+yolo v8的demo演示。 系统:ubuntu18.04 ROS:melodic 相机型号:Intel realsenseD435i p

    2024年02月11日
    浏览(38)
  • 【SU-03T离线语音模块】:学习配置使用

    时不可以苟遇,道不可以虚行。 语音识别模块是在一种基于嵌入式的语音识别技术的模块,主要包括语音识别芯片和一些其他的附属电路,能够方便的与主控芯片进行通讯,开发者可以方便的将该模块嵌入到自己的产品中使用,实现语音交互的目的。 离线语音模块 与 在线语

    2023年04月09日
    浏览(25)
  • 英特尔 D435/D435i双目相机 使用指南

    目录 Intel RealSense D435深度相机介绍: 关于左右红外图像: 关于像素深度的检索: Intel RealSense 各种工具: 工具的介绍 相机基本操作 相机自校准 获取相机参数 python脚本 Linux命令行 相机运行并显示画面 获得深度图像 点云 帧对齐 英特尔官方手册:调整深度摄像头以获得最佳

    2024年02月02日
    浏览(38)
  • ubuntu18.04安装Realsense D435i相机SDK及realsense-ros记录,为后期运行yolo v5作准备

    写在前面 :一定要注意各个版本之间的匹配问题,否则会报各种错误。 例如ROS版本和librealsense SDK版本之间的对应关系,以及realsense-ros(Wrapper)与librealsense SDK之间的对应关系 。 系统:ubuntu18.04 ros: melodic 附上Intel® RealSense github网站: https://github.com/IntelRealSense 以及安装教程

    2024年02月05日
    浏览(40)
  • UE学习记录03----UE5.2 使用MVVM示例

    1.打开ue5.2新建C++项目 2.项目中通过类导向新建C++类,父类选择为UMVVMViewModelBase,创建完成会自动打开vs   3.在VS中对新建的类进行宏定义 使用  C++ 类向导  创建的类声明自动通过  UCLASS()  宏进行处理。  UCLASS()  宏使得引擎意识到这个类的存在,并且还可以同键盘修饰符结

    2024年02月11日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包