mynt product model: D1000-IR-120标定相机和IMU外参之二

1. 在之一中使用kalibr标定mynt相机和内置imu的外参数,使用的是720p,30fps的双目图像和200hz的imu数据,标定结果误差比较大,这一次我们改用480p,60hz的双目图像和200hz的imu数据进行标定,需要在mynt_sdk中的mynteye.launch中进行如下修改.

默认获取图像的2560x720,30fps,可以在<arg name="stream_mode" default="$(arg stream_2560x720)" />处修改图像分辨率,如果分辨率改为stream_1280x480那么就可以将<arg name="framerate" default="30" />中的帧率改为60,如果分辨率是720p,那么此处最大是30.

 

 

MYNT D1000-IR-120双目相机和IMU外参标定

一、使用工具:安装了ROS的Ubuntu16.04系统,D1000-IR-120系列的小觅相机一部,april_6x6_80x80的标定板一块。

二、前期准备工作:

  1. 从mynt官网上下载对应标定相机的Linux Installation 版本的SDK,并按照安装说明安装到电脑上(http://www.myntai.com/mynteye/depth)。

 

  1. 根据需求在mynt-sdk/MYNT-EYE-D-SDK/wrappers/ros/src/mynteye_wrapper_d/launch/mynteye.launch文件中设置相机获取图像的参数,主要设置参数项如下:1)将 

<arg name="ir_intensity" default="4" />中的"4"改成0

  1. 默认获取的图像是未经过双目畸变校正后的图像,如果需要畸变校正后的图像则将 <arg name="color_mode" default="$(arg color_raw)" />中的color_raw改成color_rectified.根据实验结果,无论是否进行过rectified处理,只要标定过程中使用的相机配置文件中的相机内参数,以及相机畸变系数写正确了,对实验结果的精度影响不大。
  2. 默认获取图像的2560x720,30fps,可以在<arg name="stream_mode" default="$(arg stream_2560x720)" />处修改图像分辨率,如果分辨率改为stream_1280x480那么就可以将<arg name="framerate" default="30" />中的帧率改为60,如果分辨率是720p,那么此处最大是30.根据标定结果推荐使用60fps的640x480的图像来标定。
  • 开始标定
  1.   首先使用在上面terminal 2中打开的Rviz窗口中勾选需要的topics,只有勾选上的topics,才可以被subscribe,我们需要勾选上的项包括,Left Image以及其下的image_mono,Right Image以及其下的image_mono(因为灰度图完全可以完成标定所以使用灰度图就可以了),还有imu也要勾选上。

然后使用指令:rosbag record bagname.bag topics将我们需要的话题数据直接写入到bag文件,这里的话我们使用的指令为:rosbag record mynt_480p_rectified.bag /mynteye/left/image_mono /mynteye/right/image_mono /mynteye/imu/data_raw .

  1. 使用rosbag record imu0.bag /mynteye/imu/data_raw录制相机静置两个小时的imu数据,使用imu_utils工具标定imu的高斯白噪声和随机游走参数。
  1. 在使用kalibr工具开始标定之前,首先生成标定所需要的三个配置文件camchain.yaml, imuchain.yaml, april.yaml.

  1. 使用kalibr工具中的kalibr_calibration_imu_camera脚本标定相机和imu的外参数,使用指令:kalibr_calibration_imu_camera --bag record mynt_480p_rectified.bag --cam camchain.yaml --imu imuchain.yaml --traget april.yaml --bag-from-to 5 50.(可以使用--bag-from-to参数截取数据集中5s到50s的数据用来标定)。
  • 标定结果与相机提供的数据对比

 

  • 总结

通过标定的结果与官方提供的参数对比,标定的相机和imu的旋转变换的精度较高,但是平移量的两者差距比较大,得亏相机和IMU之间的平移向量对VIO系统的影响不会很大,而旋转变换则是很关键的。以30fps帧率获取的2560x720的图像,尽管在运动比较平稳的情况下,也会存在拖影的情况,但是改用60fps帧率获取的1280x720的图像,拖影现象不大明显,标定效果更好。

六、注意事项

  1. Camchain.yaml文件中左目图像到右目图像平移变换数据要以米为单位,不能以毫米或者厘米。
  2. Camchain.yaml文件中的相机模型要选“pinhole”,相机畸变模型要选择”radtan”不能选”equidistant”,否则标定误差将很大。
  3. 使用原始图像还是经过rectified处理后的图像,只要在camchain.yaml文件中的相机参数设置正确,一般不会对标定结果造成影响。

使用60fps的1280x480的图像标定结果比30fps的2560x480的图像精度高。

 

使用用来标定mynt相机的数据集跑一下vins系统.

1. 首先生成mynt相机的launch文件和config文件,其中有一个问题是,mynt是鱼眼相机,如果我将config文件中的fisheye选1,那么程序会自动加载一个mask图像,但是运行是提示opencv出错,所以换成使用经过畸变矫正后的图像,然后将fisheye选为0.这样就正确了,程序中提供了两个mask图像,一个是512x512的,另一个是752x480的,是不是需要提供自己数据集对应的一个mask图像呢.

去年的时候使用自己的开发板获取普通双目相机和一片9250的imu数据,运行vins运行结果很差,飘的不行,这次试一下mynt相机采集的数据,虽然偶尔也会飘,但是总的来说比之前的体验是好了很多.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AODp

一、AOP是OOP的延续&#xff0c;是&#xff08;Aspect Oriented Programming&#xff09;的缩写&#xff0c;意思是面向切面编程。 AOP&#xff08;Aspect Orient Programming&#xff09;&#xff0c;作为面向对象编程的一种补充&#xff0c;广泛应用于处理一些具有横切性质的…

使用ros发布UVC相机和串口IMU数据

&#xff11;&#xff0e;目的&#xff1a;为了可以标定普通USB相机和固定在相机上的外置IMU的外参,我希望通过ROS获取更高分辨率和更高频率的图像数据,并且可以将图像和imu的topic发布出来,直接使用rosbag record录制话题数据,写入bag文件,这样获得的bag文件直接可以用于相机和…

API自动化测试利器——Postman

自从开始做API开发之后&#xff0c;我就在寻找合适的API测试工具。一开始不是很想用Chrome扩展&#xff0c;用的WizTools的工具&#xff0c;后来试过一次Postman之后就停不下来了&#xff0c;还买了付费的Jetpacks。推出Team Sync Beta之后我又把这个工具推广给团队&#xff0c…

云原生实践之 RSocket 从入门到落地:Servlet vs RSocket

技术实践的作用在于&#xff1a;除了用于构建业务&#xff0c;也是为了验证某项技术或框架是否值得大规模推广。 本期开始&#xff0c;我们推出《RSocket 从入门到落地》系列文章&#xff0c;通过实例和对比来介绍RSocket。主要围绕RSocket如何实现Polyglot RPC、Service Regis…

制作.sens数据集跑通bundlefusion

1. 主要参考这篇博客实现 https://blog.csdn.net/Wuzebiao2016/article/details/94426905 2. 首先就是将自己采集的RGBD图像的保存格式向Bundlefusion需要的格式对齐&#xff0c;如彩色图的命名格式是frame-000000.color.png&#xff0c;深度图的命名规则是frame-000000.depth…

python之moviepy库的安装与使用

目的&#xff1a;因为需要保存一个大大的.mp4视频&#xff0c;以防过程中设备出现异常导致整个长长的视频无法正常保存&#xff0c;所以采用分段保存视频的方式&#xff0c;每500帧保存一段&#xff0c;然后再将视频合到一起&#xff0e;最近刚开始学习python,发现python真的很…

使用iai_kinect2标定kinectV2相机

实验背景&#xff1a;因为需要制作bundlefusion需要的数据集&#xff0c;所以需要使用kinectV2相机获取rgbd图像&#xff0c;年前的时候在我的笔记本上安装了libfreenect2库和iai_kinect2&#xff0c;标定过一次kinecv2相机&#xff0c;然后使用kinectv2相机实时获取的图像实现…

Linux下配置tomcat+apr+native应对高并发

摘要&#xff1a;在慢速网络上Tomcat线程数开到300以上的水平&#xff0c;不配APR&#xff0c;基本上300个线程狠快就会用满&#xff0c;以后的请求就只好等待。但是配上APR之后&#xff0c;Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输…

Firefox 66 将阻止自动播放音频和视频

百度智能云 云生态狂欢季 热门云产品1折起>>> 当我们点击一个链接&#xff0c;或者打开新的浏览器选项卡时&#xff0c;浏览器就开始自动播放视频和声音&#xff0c;这是一件十分烦人的事。Chrome 浏览器早已对这些行为下手了&#xff0c;现在 Firefox 也明确表示要…

Windows 10 关闭Hyper-V

以管理员身份运行命令提示符 关闭 bcdedit /set hypervisorlaunchtype off 启用 bcdedit / set hypervisorlaunchtype auto 禁用DG 转载于:https://www.cnblogs.com/Robbery/p/8397767.html

bundlefusion论文阅读笔记

4. 全局位姿对齐(glob pose alignment) 输入系统的是使用消费级的传感器获取的RGBD数据流&#xff0c;并且保证这些数据中的彩色图像和深度图像是时间和空间上都对齐的。图像分辨率是640x480,频率是30hz。我们的目的就是要找到frames之间的3D对应&#xff0c;然后根据这些对应…

IOC和DI的区别详解

IOC 是英文inversion of control的缩写&#xff0c;意思是控制反转DI 是英文Dependency Injection的缩写&#xff0c;意思是依赖注入 下面用一个简单的例子来描述一下IOC和DI的关系 先看下总结&#xff1a; 依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情&#…

TOMCAT启动到一半停止如何解决

当你的项目过大的时候&#xff0c;往往会导致你的TOMCAT启动时间过长&#xff0c;启动失败&#xff0c;遇到该情况可以试一下下面两招&#xff1a; TOmcat启动到一半的时候停止了&#xff0c;以下原因&#xff1a; 1、 tomcat启动时间超过了设置时间&#xff1a; 解决办法&…

python中将四元数转换为旋转矩阵

在制作bundlefusion时,想测试TUM数据集,并且将groundtruth写入到数据集中,TUM中给定的groundtruth中的旋转是使用四元数表示的,而bundlefusion中需要SE3的形式,所以我需要首先将四元数转换为旋转矩阵,然后再将其与平移向量合并在一起,因为我之前关于生成bundlefusion数据集写了…

19、Fragment

一、Fragment 1.1、fragment介绍 fragment的出现是为了同时适应手机和平板&#xff0c;可以将其看做Activity的组成部分&#xff0c;甚至Activity界面完全由不同的Fragment组成&#xff0c;它拥有自己的生命 周期和接收、处理用户的事件&#xff0c;更为重要的是&#xff0c;可…

将TUM数据集制作成BundleFusion数据集

在上一篇文章中,我写到了如何将TUM数据生成BundleFusion所需要的数据集,生成的数据集如下图中所示.并且是将每一组数据的groundtruth.txt中的位姿数据写如到这里的pose文件中,作为每一帧图像的先验位姿. 今天我便将生成的数据集转换为了.sens格式,然后运行bundlefusion算法,第…

mysql盲注学习-1

mysql: 1.left() //left()函数 left(a,b)从左侧截取a,的b位 2.mid() //mid()函数 参数 描述 column_name 必需。要提取字符的字段。 start 必需。规定开始位置&#xff08;起始值是 1&#xff09;。 length 可选。要返回的字符数。如果省略&#xff0c;则 MID() 函数…

二分学习笔记

写在前面 二分是一种常用且非常精妙的算法&#xff0c;常常是我们解决问题的突破口。二分的基本用途是在单调序列或单调函数中做查找。因此当问题的答案具有单调性时&#xff0c;就可以通过二分把求解转化为判定。进一步地&#xff0c;我们还可以通过三分法解决单调函数的极值以…

ConcurrentHashMap 解读

初始化&#xff1a; 问题&#xff1a;如何当且仅只有一个线程初始化table 1 private final Node<K,V>[] initTable() {2 Node<K,V>[] tab; int sc;3 while ((tab table) null || tab.length 0) {4 if ((sc sizeCtl) < 0)5 …

BundleFusion那些事儿

背景&#xff1a;前面几篇博客中写了很多关于BundleFusion的东西&#xff0c;主要包括bundlefusion的论文阅读笔记&#xff0c;.sens数据集的生成等&#xff0c;经过最近几天的工作&#xff0c;我对bundlefusion又有了新的技术积累&#xff0c;在这里整理一下&#xff0c;也算是…