使用自制相机运行VINS-Mono

  • 1 相机与IMU标定
  • 2 自制相机测试
  • 3 运行效果
  • 参考资料

1 相机与IMU标定

VINSmono的安装这里就省略了,可以参考作者的github网页[2]

我所使用的是ZED相机和Xsens IMU, 相机和IMU的标定流程可以参考我之前的博客- 相机与IMU联合标定

2 自制相机测试

VINS-Mono的参数文件和msckf_vio的不同,msckf_vio可以直接使用kalibr校准输出的 T_cam_imu 矩阵,而VINS-mono则是使用的 T_imu_cam (Rotation from camera frame to imu frame) 需要对kalibr标定的结果求取逆矩阵。 这里我是直接复制到MATLAB中运算的。

在 cfg 文件夹下新建 zed_xsens_vins.yaml 文件,并写入以下内容:

%YAML:1.0
#common parameters
imu_topic: "/imu/data"
image_topic: "/camera/left/image_raw"
output_path: "/home/crp/catkin_vins"#camera calibration
model_type: PINHOLE
camera_name: camera
image_width: 1280
image_height: 720
distortion_parameters:k1: -0.173485778k2: 0.0265451781212p1: 0.00042918874p2: -3.4873e-05
projection_parameters:fx: 693.131838769146fy: 692.5498277671763cx: 616.3486206381017cy: 379.6677572220899# Extrinsic parameter between IMU and Camera.
estimate_extrinsic: 0   # 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.# 2  Don't know anything about extrinsic parameters. You don't need to give R,T. We will try to calibrate it. Do some rotation movement at beginning.
#If you choose 0 or 1, you should write down the following matrix.
#Rotation from camera frame to imu frame, imu^R_cam
extrinsicRotation: !!opencv-matrixrows: 3cols: 3dt: ddata: [-0.002694181974, -0.006483313053460837, 0.9999753537139497,-0.9999945422296715, 0.0019297348080352383, -0.0026817222894606196, -0.0019123008021141863, -0.999977121125988, -0.0064884767257617215]
#Translation from camera frame to imu frame, imu^T_cam
extrinsicTranslation: !!opencv-matrixrows: 3cols: 1dt: ddata: [-0.006335432966116,0.067853027016898, -0.024648344205434]#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
equalize: 1             # if image is too dark or light, trun on equalize to find enough features
fisheye: 0              # if using fisheye, trun on it. A circle mask will be loaded to remove edge noisy points#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.08          # accelerometer measurement noise standard deviation. #0.2   0.04
gyr_n: 0.004         # gyroscope measurement noise standard deviation.     #0.05  0.004
acc_w: 0.00004         # accelerometer bias random work noise standard deviation.  #0.02
gyr_w: 2.0e-6       # gyroscope bias random work noise standard deviation.     #4.0e-5
g_norm: 9.81007     # gravity magnitude#loop closure parameters
loop_closure: 1                    # start loop closure
load_previous_pose_graph: 0        # load and reuse previous pose graph; load from 'pose_graph_save_path'
fast_relocalization: 0             # useful in real-time and large project
pose_graph_save_path: "/home/crp/catkin_vins" # save and load path#unsynchronization parameters
estimate_td: 0                      # online estimate time offset between camera and imu
td: 0.0                             # initial value of time offset. unit: s. readed image clock + td = real image clock (IMU clock)#rolling shutter parameters
rolling_shutter: 0                  # 0: global shutter camera, 1: rolling shutter camera
rolling_shutter_tr: 0               # unit: s. rolling shutter read out time per frame (from data sheet). #visualization parameters
save_image: 1                   # save image in pose graph for visualization prupose; you can close this function by setting 0
visualize_imu_forward: 0        # output imu forward propogation to achieve low latency and high frequence results
visualize_camera_size: 0.4      # size of camera marker in RVIZ

3 运行效果

测试环境:我们使用白线在地面上画有一个半径为5M的圆,然后以手持相机的方式绕圆圈走,录制数据集。

然后利用 EVO 作图可以得到如下的轨迹。这里分别使用了VINSmono有回环和没有回环两种模式,并将有回环的数据作为groundtruth的轨迹。

注意事项:

1)在使用VINSmono的时候要注意正确标定相机和IMU,平移参数可以通过目测的方式看看大概范围是否正确,旋转矩阵要注意看校准结果是否和真实传感器的坐标系是对应的。以此来判断校准参数是否正确。

2) kalibr校准输出的 T_cam_imu 矩阵,而VINS-mono则是使用的 T_imu_cam (Rotation from camera frame to imu frame) 需要对kalibr标定的结果求取逆矩阵

3) VINSmono对IMU比较敏感,如果IMU的质量不好的话也是可能导致系统无法运行

参考资料

[1] Qin T, Li P, Shen S. Vins-mono: A robust and versatile monocular visual-inertial state estimator[J]. IEEE Transactions on Robotics, 2018, 34(4): 1004-1020.
[2] https://github.com/HKUST-Aerial-Robotics/VINS-Mono
[3] (VINS-Mono运行与评测) https://blog.csdn.net/crp997576280/article/details/110485772

欢迎大家点赞在评论区交流讨论(cenruping@vip.qq.com) O(∩_∩)O

或者加群水一波(1149897304)

使用自制相机运行 VINS-Mono相关推荐

  1. 在 NVIDIA jetson tx2 上基于 realsense d435i 相机运行 vins 相关配置

    在 NVIDIA jetson tx2 上基于 realsense d435i 相机运行 vins 相关配置 一.tx2刷机 二.安装librealsense,realsense驱动 1.安装依赖库 ...

  2. 的环境下 qt 运行在_Ubuntu16.04环境下运行vins mono(环境配置及编译)之ROS kinetic的安装...

    所需环境:ubuntu16.04+ROS kinetic+opencv 3.3.1+eigen3.3.3+ceres solver 1.14 1.ROS Kinetic 的安装 (1)设置source ...

  3. m2dgr数据集在vins mono运行

    m2dgr数据集在vins mono运行 1.代码的修改 1.1 yaml文件的修改 1.2修改VINS-mono轨迹保存代码 1.3修改launch文件 2 EVO显示轨迹 2.1运行比较结果 参考 ...

  4. SLAM之小觅相机跑开源方案(ORB_SLAM2,VINS MONO,VINS FUSION,RTAB-Map)

    传感器: 小觅相机标准版 开源SLAM方案: ORB_SLAM2,VINS MONO,VINS FUSION,RTAB-Map 测试地点: 室内大厅(光线不均)/ 露天阳台 实现形式: 小觅相机 / ...

  5. 【INDEMIND相机运行SLAM】

    相机型号:INDEMIND 双目惯导相机模组 官方SDK:https://imsee-sdk-docs.readthedocs.io/zh/latest/src/sdk/contents.html 1 ...

  6. 小觅相机运行VINS-Fusion(一)

    写在前面的话: 1.本文基于自己的另一篇博文win10+ubuntu16.04+ROS Kinetic 2.参考[4]是一篇非常好的帖子,但由于小觅托管在github的代码在不断更新,故需在某些步骤及 ...

  7. ROS入门:ROS下使用电脑相机运行ORB_Slam2

    介绍: 最近在学习slam,想将其应用在ros平台上,故跑了orb-slam2的代码.这里粗略总结一下"ROS下使用电脑相机运行ORB_Slam2"的过程.本人菜鸟一枚,如有问题欢 ...

  8. 自制可运行pe的iso

    自制可运行pe的iso 准备软件 准备文件 步骤 名词解释 结语 准备软件 UltraISO:用于制作可启动的ISO Bootice: 用于修改PE引导的BCD启动项 Dism++: 编辑wim镜像 ...

  9. zed相机拆机_使用TX2+ZED相机运行ORBSLAM2和LearnVIORB

    本周任务 1.完成TX2刷机 2.使用ZED运行ORBSLAM2和LearnVIORB 任务一: TX2的刷机部分完成,刷机较为顺利,遇到的问题较少. error: Finished Flashing ...

最新文章

  1. colorAccent,colorPrimary,colorPrimaryDark 作用的地方
  2. c语言以空格分割字符串_C语言: 利用sscanf() 函数分割字符串
  3. R语言完美重现STAMP结果图
  4. Grpc+Grpc Gateway实践二 有些复杂的Hello World
  5. 蓝盾第三代AI防火墙分析
  6. MATLAB中inputdlg的使用
  7. Java黑皮书课后题第7章:***7.35(游戏:猜字词游戏)编写一个猜字词游戏,随机产生一个单词,当用户猜测正确后,正确的字母显示出来。当用户猜出一个单词,显示猜错的次数,并询问用户是否继续猜测
  8. POJ 2516 -- Minimum Cost (最小费用最大流, 必须分开建图)
  9. ios开发 多人语音聊天_iOS 新手集成单聊、群聊、语音和视频通话的简述
  10. echarts时间散点图_ECharts 实现地图散点图(下)
  11. 在没有主键的情况下定量删除数据!
  12. C 标准库中输出到字符串、到文件的相关函数
  13. Boost组件lexical_cast
  14. shell+中sum的用法_使用shell进行计算
  15. 如何导出立创EDA库到AD库 ?
  16. 教你控制阿里云OSS下载速度
  17. PC比电脑好玩的秘密是什么?答案就是因为有这些神奇的网站!
  18. PS 选区的基础使用
  19. PAP和CHAP的区别
  20. c语言除号“/”的基本规则

热门文章

  1. 《Java解惑》系列——02字符谜题——谜题17:嗯??
  2. Socket.io 的使用
  3. 基于java web servlet生鲜商城管理系统源码含报告文档
  4. 你对java工程师的理解_JAVA工程师常见面试题(一):谈谈对死锁的看法?
  5. CAS虚拟化平台Linux虚拟机安装vGPU显卡驱动并获取许可
  6. C语言——PTA 稳赢
  7. Python程序练习题
  8. Android项目——电话拨号器
  9. java双端加密操作 vue+springboot+AES(CBC-ECB) ------------------前传后
  10. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-人机界面如何设置页面跳转