imu-相机标定_imu与相机外参标定-程序员宅基地

技术标签: 数码相机  

目录

标定介绍

内参-外参

标定方法

imu标定中的注意事项:

kalibr imu-相机标定

kalibr安装

双目标定

相机驱动

 标定

imu-相机标定

所遇问题:


标定介绍

内参-外参

标定分为内参和外参标定,其中内参标定是确定传感器自身的模型参数,即确定仅与传感器自身存在关系的参数,所以imu和相机都需要进行内参标定。外参标定则是确定imu和相机之间的刚体变换关系,也就是确定两个传感器坐标之间的三维变换矩阵。

标定方法

其中相机内参和外参可以使用kalibr标定,具体步骤可以参考下面的kalibr imu-相机标定;

imu标定则需要使用其他工具,如Allan_variance_ros工具、imu-utils工具进行随即误差标定,一般不需要进行imu的系统误差标定,默认imu性能较好,尺度、工装误差(3个轴之间不正交)在出厂时的校正效果可以直接使用,而加速度计和陀螺仪的bias偏差、重力矢量会在标定算法、SLAM算法中估计,无需确定。

此外,最近发现一个已经集成的ros-imu工具箱,可以在rviz中查看imu姿态:https://github.com/CCNYRoboticsLab/imu_tools

imu标定中的注意事项:

结合之前的几篇博客:

imu 标定_scjdas的博客-程序员宅基地

airsim IMU仿真_scjdas的博客-程序员宅基地(介绍Imu误差模型,连续时间误差与离散时间误差)

结合其他几个大牛技术团队的建议,在imu随机误差标定完成后,可以适当放大随机误差,以保证没有被建模到的误差也被融入算法中。

ORB-SLAM3、kalibr、TUM-VI都这样建议(依次展示):

kalibr imu-相机标定

参考:

Kalibr 之 Camera-IMU 标定 (总结)_晨光ABC的博客-程序员宅基地

Kalibr标定工具箱使用详细过程_随机游走321的博客-程序员宅基地

手机上的SLAM(7):Kalibr相机+IMU离线标定 - 知乎

kalibr安装

参考官方安装教程:

参考官方安装教程: https://github.com/ethz-asl/kalibr/wiki/installation

安装完成后使用官方提供的数据包测试

双目标定

相机驱动

双目分为单设备和多设备,我们的双目相机是单设备,也就是双目图像拼接在一起。

使用usb-cam发布ros图像,在其launch文件中设置分辨率的宽度为2倍。这里的分辨率不能乱取,可以根据报错反推对应分辨率!

再写ros包分割拼接在一起的双目图像

相关代码见:

        ROS调用USB双目摄像头模组_ros usb_cam_昼行plus的博客-程序员宅基地

 标定

rosbag录制

rosbag record /left_cam/image_raw /right_cam/image_raw -O images.bag

标定板配置文件



#example for aprilgrid
  # target_type: 'aprilgrid' #gridtype
  # tagCols: 6                  #number of apriltags
  # tagRows: 6                  #number of apriltags
  # tagSize: 0.088              #size of apriltag, edge to edge [m]
  # tagSpacing: 0.3             #ratio of space between tags to tagSize
                              #example: tagSize=2m, spacing=0.5m --> tagSpacing=0.25[-]

#example for checkerboard
 target_type: 'checkerboard' #gridtype
 targetCols: 13              #number of internal chessboard corners
 targetRows: 11              #number of internal chessboard corners
 rowSpacingMeters: 0.05       #size of one chessboard square [m]
 colSpacingMeters: 0.05       #size of one chessboard square [m]

标定命令

rosrun kalibr kalibr_calibrate_cameras  --target checkBoard_13x11.yaml     --bag images.bag --bag-from-to 5 60     --models pinhole-radtan  --topics /left_cam/image_raw  --show-extraction

imu-相机标定

checkborad

rosrun kalibr kalibr_calibrate_imu_camera  --target checkBoard_13x11.yaml     --bag images_imu.bag    --bag-from-to 5 60     --cam images-camchain.yaml    --imu imu.yaml     --imu-models scale-misalignment

april_tag 

rosrun kalibr kalibr_calibrate_imu_camera  --target april_6x6.yaml     --bag images_imu.bag    --bag-from-to 5 160     --cam images_imu-camchain.yaml    --imu imu.yaml     --imu-models calibrated

所遇问题:

assert(_bufferTmin <= _time.toScalar() < _bufferTmax) failed [1.40473e+09 <= 1.40473e+09 < 1.40473e+

 解决参考:Kalibr进行相机-IMU联合标定踩坑记录RuntimeError: Optimization failed!_HyperZhu的博客-程序员宅基地

但此处要注意,调大博客中提到的参数会导致计算量增大,运行结果的重投影误差也很大,所以要慎重调整参数,一般这里报错说明数据录制效果不好或者设备采集到的数据质量差,需要重新录制或者更换高质量设备

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/scjdas/article/details/130523905

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法