位置: IT常识 - 正文

相机与IMU标定教程(什么叫相机标定)

编辑:rootadmin
相机与IMU标定教程

推荐整理分享相机与IMU标定教程(什么叫相机标定),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:什么叫相机标定,相机标定csdn,imu 相机标定,emgucv相机标定,最详细、最完整的相机标定讲解,相机标定原理步骤,相机标定技术,imu 相机标定,内容如对您有帮助,希望把文章链接给更多的朋友!

标定教程

way

相机与IMU联合标定1、imu_utils 标定IMU的内参

1、 imu_utils标定IMU的内参,可以校准IMU的噪声密度和随机游走噪声

2、kalibr包标定相机的内外参数,相机与IMU之间的外参

1.1安装环境

这里使用的包是 imu_utils ,使用这个包可以校准IMU的噪声密度和随机游走噪声

step1: 安装ceres库

sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-devsudo apt-get install libgoogle-glog-dev libgtest-dev

下载编译 ceres-solver

git clone https://github.com/ceres-solver/ceres-solver.gitcd ceres-solvermkdir buildcd buildcmake ..make sudo make install

step2: 安装 code_utils

构建工作空间

mkdir -p ~/kalibr_workspace/srccd ~/kalibr_workspacecatkin_make

注意:这里需要修改 code_utils 的 CMakeLists.txt 文件, CMAKE_CXX_FLAGS “-std=c++11” 改为 CMAKE_CXX_STANDARD 14 并在添加 include_directories(include/code_utils)

sudo apt-get install libdw-devcd kalibr_workspace/srcgit clone https://github.com/gaowenliang/code_utils.gitcd ..catkin_make

step3: 安装 imu_utils (imu_utils依赖code_utils 先编译code_utils 再编译imu_utils。)

注意:这里需要t同样修改 imu_utils 的 CMakeLists.txt 文件, CMAKE_CXX_FLAGS “-std=c++11” 改为 CMAKE_CXX_STANDARD 14

cd kalibr_workspace/srcgit clone https://github.com/gaowenliang/imu_utils.gitcd ..catkin_make1.2、录制IMU数据集

step4: 静止情况下采集IMU的数据,并录制为ROS包,我采集的时间为2小时20分钟。

rosbag record /imu/data -O imu_xsens.bag

step5: 标定 配置xsens.launch文件为如下内容:(指定IMU的topic)

<launch> <node pkg="imu_utils" type="imu_an" name="imu_an" output="screen"> <param name="imu_topic" type="string" value= "/imu/data"/>#话题名称 <param name="imu_name" type="string" value= "xsens"/> <param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/> <param name="max_time_min" type="int" value= "120"/> #加载多长时间的数据 <param name="max_cluster" type="int" value= "100"/> </node></launch>

这里有一个max_time_min表示使用bag数据的最大时长,单位是分钟,默认是120分钟, step6:启动 imu_utils 标定IMU

roslaunch imu_utils xsens.launchrosbag play -r 200 imu_xsens.bag

这一步是关键,在执行上上步roslaunch imu_utils xsens.launch之后,程序会进入等待话题的状态。 得到如下输出结果: 尽快执行rosbag play -r 200 自己的.bag,程序进入bag读取,并计算allan方差。当bag包加速回放完毕后,执行launch的窗口仍然会显示wait for imu data.,等待一段时间计算,计算完毕后会显示计算结果。 显示done之后,在catkin_ws/src/imu_utils/data这个文件夹下会出现一系列的data文件,打开xsens_imu_param.yaml这个文件,会看到计算出来的噪声和随机游走的系数值。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/319e45ea36804a1aa6bf7611742df814.png

%YAML:1.0---type: IMUname: xsensGyr: unit: " rad/s" avg-axis: gyr_n: 5.0034702036714999e-02 gyr_w: 2.4583978028785876e-03 x-axis: gyr_n: 2.5852284735645492e-02 gyr_w: 1.8303245177389645e-03 y-axis: gyr_n: 9.8883151331650182e-02 gyr_w: 4.8477797168896648e-03 z-axis: gyr_n: 2.5368670042849317e-02 gyr_w: 6.9708917400713272e-04Acc: unit: " m/s^2" avg-axis: acc_n: 9.1440795637947525e-01 acc_w: 2.1004351612340905e-02 x-axis: acc_n: 2.0238764067980461e-01 acc_w: 1.7432126284010131e-02 y-axis: acc_n: 4.8601261496646220e-01 acc_w: 2.0739830749315680e-02 z-axis: acc_n: 2.0548236134921587e+00 acc_w: 2.4841097803696900e-022、kalibr 标定工具2.1安装sudo apt-get install python-setuptools python-rosinstall ipython libeigen3-dev libboost-all-dev doxygen libopencv-devsudo apt-get install libopencv-dev ros-kinetic-vision-opencv ros-kinetic-image-transport-plugins ros-kinetic-cmake-modules python-software-properties software-properties-common libpoco-dev python-matplotlib python-scipy python-git python-pip ipython libtbb-dev libblas-dev liblapack-dev python-catkin-tools libv4l-devsudo pip install python-igraph (sudo apt install python-pip (python2.7))//若出现问题,用以下命令安装sudo apt-get install python-igraph

编译kalibr,这里要确保电脑联网,编译时间有点长.

cd ~/kalibr_workspace/srcgit clone https://github.com/ethz-asl/Kalibr.gitcd ~/kalibr_workspacecatkin build -DCMAKE_BUILD_TYPE=Release -j4source ~/kalibr_workspace/devel/setup.bash

node:若编译出现如下问题,参考链接[2].

2.2 校准相机的内外参

标定板使用二维码aprilgrid或者棋盘格checkerboard都是可以的,使用时做好相应yaml的修改即可。标定板下载见https://github.com/ethz-asl/kalibr/wiki/downloads,需要有google帐号且要有谷歌云端硬盘的访问权限。如果不可以(比方说我就不可以),可参照https://github.com/ethz-asl/kalibr/wiki/calibration-targets,使用kalibr_create_target_pdf命令自己创建指定标定板然后打印就可以了。 本篇使用了二维码标定板,创建或修改apriltag.yaml

target_type: 'aprilgrid' #gridtypetagCols: 6 #number of apriltagstagRows: 6 #number of apriltagstagSize: 0.088 #size of apriltag, edge to edge [m]tagSpacing: 0.3 #ratio of space between tags to tagSize

其中tagsize和tagspacing是要根据实际打印出来的标定板做修改的,其参数意义可参照下图,该图同样来自https://github.com/ethz-asl/kalibr/wiki/calibration-targets。

step1 运行相机节点

rosrun sensor_driver stereo_left_noderosurn sensor_driver stereo_right_node

step2 修改话题的频率为4 启动相机节点,因为kalibr处理时建议图像频率不能太高,此处使用topic_tools/throttle对输出的图像话题降频,4Hz也是官方推荐的频率。

rosrun topic_tools throttle messages /stereo_left_node/left 4.0 /leftrosrun topic_tools throttle messages /stereo_right_node/right 4.0 /right 相机与IMU标定教程(什么叫相机标定)

node:对命令解释说明 rosrun topic_tools throttle messages 修改后的话题名 频率 原始话题名 该命令可以修改话题的名和频率,本文修改了话题的频率,话题名称修改为/left /right

step3 录制bag数据

rosbag record -0 stereo_calibar.bag /left_img /right_img

node:双目采集数据说明 将相机对准标定板,不断移动相机达到获取不同角度图像,大概采集200张图片(50s左右)

step4 用Kalibr双目相机标定

// 进入到kalibr工具目录下source devel/setup.bashrosrun kalibr kalibr_calibrate_cameras --bag xxx/stereo_calibra.bag --topics /left_img /right_img --models omni-radtan omni-radtan --target xxx/april_6x6_80x80cm_A0.yamlrosrun kalibr kalibr_calibrate_cameras --bag src/data/2021-09-02-16-24-01.bag --topics /left_img /right_img --models omni-radtan omni-radtan --target src/data/april_6x6_80x80cm_A0.yaml --show-extraction --approx-sync 0.05

node:对命令解释说明

rosrun kalibr kalibr_calibrate_cameras --bag xxx/stereo_calibra.bag --topics /left_img /right_img --models omni-radtan omni-radtan --target xxx/april_6x6_80x80cm_A0.yaml --bag-from-to 5 105

xxx/stereo_calibra.bag stpe3 录制的bag路径/left_img /right_img 话题名omni-radtan omni-radtan 后面是相机/畸变模型,有几目相机就要写几个,这里是两个omni-radtan模型相机,所以是两个omni-radtan;相应地,其他支持的模型可以查看https://github.com/ethz-asl/kalibr/wiki/supported-models。xxx/april_6x6_80x80cm_A0.yaml 标定板配置文件 (使用标准的标定板,从官网下载的yaml文件参数不用修改, 笔记本中有这个文件 可以直接用)–show-extraction 是在标定过程中的一个显示界面,可以看到图片提取的过程,可以不要;–approx-sync 0.05 时间戳不对齐问题–bag-from-to后面是想要使用数据时间段的起始时间和结束时间,单位:秒(s),这个参数可以剔除掉刚开始录制和结束时一些出入视野等画面

个人遇到的问题记录:

标定运行过程中报错,RuntimeError: Optimization failed!

可以参照github上作者的回答https://github.com/ethz-asl/kalibr/issues/41,提高timeOffsetPadding (https://github.com/ethz-asl/kalibr/blob/master/aslam_offline_calibration/kalibr/python/kalibr_calibrate_imu_camera#L171)再次尝试。

标定完成会生成下面3个文件,其中命名为camchain的.yaml文件是后续联合标定要继续用到的,里面包含了所需的相机的内外参。

可以查看report的pdf,重投影误差(reprojection errors)在1个像素以内标定就是比较好的了。

3、相机和IMU联合标定

step1 录制数据集

把IMU和相机固定在一起录制ROS bag包, 录制的时候要注意按照官方的说法-充分激励IMU- 绕3个轴旋转和3个方向的平移,这里有个[官方视频3] 可以参考 录制数据包时同样也要控制图像数据频率。

rosrun topic_tools throttle messages /camleft/video_image 4.0 /camlrosrun topic_tools throttle messages /camright/video_image 4.0 /camrrosbag record -O stereo_imu_calibra.bag /stereo_left_node/left /stereo_right_node/right /imu_node/imu0

注意事项:

采集数据的起始和结束阶段注意别晃动太大,如从桌子上拿起或者放下。如果有这样的动作,在标定阶段应该跳过bag数据集的首尾的数据.采集数据的时候应该给imu各个轴足够的激励,如先依次绕各个轴运动,运动完后来个在空中画8字之类的操作,当然也要注意别运动太剧烈,图像都模糊了。

联合标定中imu内参yaml格式如下,并不能直接拿imu_utils的标定结果yaml文件来用,否则会报错RuntimeError: [ImuConfig Reader]: Could not read configuration from …

#Accelerometersaccelerometer_noise_density: 4.8641695361661035e-03 #Noise density (continuous-time)accelerometer_random_walk: 2.3944306307068487e-04 #Bias random walk#Gyroscopesgyroscope_noise_density: 5.4583665041817392e-04 #Noise density (continuous-time)gyroscope_random_walk: 6.1968037914410386e-06 #Bias random walkrostopic: /imu #the IMU ROS topicupdate_rate: 100.0 #Hz (for discretization of the values above)

step2 标定

source devel/setup.bashrosrun kalibr kalibr_calibrate_imu_camera --target src/data/april_6x6_80x80cm_A0.yaml --cam src/data/camera.yaml --imu src/data/A1_ium.yaml --bag src/data/stereo_imu_calibra.bagrosrun kalibr kalibr_calibrate_imu_camera --target april_6x6_55x55mm.yaml --bag ~/bagfiles/zed_xsens.bag --bag-from-to 5 50 --cam src/data/camera.yaml --imu src/data/A1_ium.yaml --imu-models scale-misalignment --timeoffset-padding 0.1

node:对命令解释说明

1、--target src/data/april_6x6_80x80cm_A0.yaml :标定板的参数文件;

2、--bag images_imu.bag指定数据包

3、–bag-from-to 5 50设定bag包开始时间和结束时间,避开拿起和放下IMU的时间段内的数据

2、--cam src/data/camera.yaml :camera的参数文件,格式参考【文档1:camera.yaml】。使用标定好的相机参数替换对应的内容; 3、--imu src/data/ium.yaml  :imu的配置文件,格式参考【文档2:imu.yaml】,用标定好的imu参数替换相应的参数; 4、–imu-models scale-misalignment IMU的参数模型

camera.yaml文件内容如下:

cam0: cam_overlaps: [1] camera_model: pinhole distortion_coeffs: [-0.1734857772863602, 0.026545178121976657, 0.0004291887376674085, -3.4873170616746686e-05] distortion_model: radtan intrinsics: [693.131838769146, 692.5498277671763, 616.3486206381017, 379.6677572220899] resolution: [1280, 720] rostopic: /stereo/left/image_rawcam1: T_cn_cnm1: - [0.9999658061828064, 0.0005632950824424241, 0.0082504038578218, -0.11947602055948268] - [-0.0006621128372211408, 0.9999280240823567, 0.011979493367486592, 0.0004870068672051519] - [-0.008243062037729159, -0.011984546441186855, 0.9998942056912012, -0.0028910358303400464] - [0.0, 0.0, 0.0, 1.0] cam_overlaps: [0] camera_model: pinhole distortion_coeffs: [-0.17456713089475154, 0.027410444232267236, 0.0006360696559962682, -0.0002450168896166665] distortion_model: radtan intrinsics: [694.2107729740508, 693.480347118504, 617.3114354961933, 380.800130116761] resolution: [1280, 720] rostopic: /stereo/right/image_raw

imu.yaml文件内容如下:

#Accelerometersaccelerometer_noise_density: 5.43036e-03 #Noise density (continuous-time)accelerometer_random_walk: 1.44598e-04 #Bias random walk#Gyroscopesgyroscope_noise_density: 4.9700e-03 #Noise density (continuous-time)gyroscope_random_walk: 6.8522e-05 #Bias random walkrostopic: /imu/data #the IMU ROS topicupdate_rate: 100.0 #Hz (for discretization of the values above)

标定完成以后同样会生成一个报表和在终端里面打印校准信息;

标定结果的重投影误差应该在零点几个像素 标定出来的位移和实际测量或估计的IMU 和相机中心位移比较一致

参考文献Kalibr 标定双目内外参数以及 IMU 外参数使用kalibr对双目-IMU进行标定(小觅相机)[相机标定] 用Kalibr标定diy的双目相机《视觉SLAM进阶:从零开始手写VIO》第二讲作业没有libelf.h libdw.himu_utils IMU内参标定工具 imu_utils安装教程 imu_utils使用教程VIO 中 IMU 的标定流程 (1/3) - imu_utils 使用备忘VIO 中 IMU 的标定流程 (2/3) - kalibr_allan 使用备忘VIO 中 IMU 的标定流程 (3/3) - imu_tk 使用备忘相机与IMU联合标定_熊猫飞天的博客-CSDN博客_相机和imu联合标定
本文链接地址:https://www.jiuchutong.com/zhishi/297312.html 转载请保留说明!

上一篇:Vue获取子组件实例对象 ref 属性(vue子组件获取dom元素的方法)

下一篇:如何将html模板资源转为vuecli项目(怎么把html转成图片)

  • vivo手机来信息闪光灯在哪里设置(vivo手机来信息不显示内容怎么设置)

    vivo手机来信息闪光灯在哪里设置(vivo手机来信息不显示内容怎么设置)

  • DFU模式是什么意思(dfu模式数据还在吗)

    DFU模式是什么意思(dfu模式数据还在吗)

  • 荣耀x10返回键在哪设置(荣耀x10max返回键)

    荣耀x10返回键在哪设置(荣耀x10max返回键)

  • 华为荣耀20与30s对比(华为荣耀20与华为荣耀v20)

    华为荣耀20与30s对比(华为荣耀20与华为荣耀v20)

  • 常说的2g3g4g手机的g指的是什么(手机2g3g4g是什么意思)

    常说的2g3g4g手机的g指的是什么(手机2g3g4g是什么意思)

  • 抖音怎么设置不让别人下载我视频(抖音怎么设置不让别人看我关注的人)

    抖音怎么设置不让别人下载我视频(抖音怎么设置不让别人看我关注的人)

  • 笔记本cpu占用过高怎么解决(笔记本cpu占用率太高怎么办)

    笔记本cpu占用过高怎么解决(笔记本cpu占用率太高怎么办)

  • 如何查看网线是几类线(如何查看网线是不是千兆)

    如何查看网线是几类线(如何查看网线是不是千兆)

  • 华为畅享10plus来电闪光灯怎么弄(华为畅享10plus来微信不显示)

    华为畅享10plus来电闪光灯怎么弄(华为畅享10plus来微信不显示)

  • 抖音里面购物地址怎么删除(抖音里面购物地址怎么填)

    抖音里面购物地址怎么删除(抖音里面购物地址怎么填)

  • 苹果共享位置未找到位置什么意思(苹果共享位置未关联手机号)

    苹果共享位置未找到位置什么意思(苹果共享位置未关联手机号)

  • snapdragon855是什么处理器(snapdragon855是什么处理器怎么样)

    snapdragon855是什么处理器(snapdragon855是什么处理器怎么样)

  • 抖音账号无法点关注和赞(抖音号点不进去)

    抖音账号无法点关注和赞(抖音号点不进去)

  • 佳能打印机怎么扫描文件到电脑(佳能打印机怎么重置)

    佳能打印机怎么扫描文件到电脑(佳能打印机怎么重置)

  • 快充跟数据线有关系吗(快充跟数据线有关系吗知乎)

    快充跟数据线有关系吗(快充跟数据线有关系吗知乎)

  • 如何从手机上传照片到电脑(如何从手机上传到u盘)

    如何从手机上传照片到电脑(如何从手机上传到u盘)

  • qq注销要多久才能通过(qq注销要多久才消失)

    qq注销要多久才能通过(qq注销要多久才消失)

  • 运营商虚商是什么意思(运营商虚商是什么)

    运营商虚商是什么意思(运营商虚商是什么)

  • 苹果11音量键没弹性怎么修复(苹果11音量键没反应)

    苹果11音量键没弹性怎么修复(苹果11音量键没反应)

  • 每个ip地址分为哪两个部分(每个ip地址长度是)

    每个ip地址分为哪两个部分(每个ip地址长度是)

  • 微信下载的东西在哪个文件夹(微信可以下载两个吗)

    微信下载的东西在哪个文件夹(微信可以下载两个吗)

  • 华为手机自动锁屏怎么办(华为手机自动锁屏怎么解除)

    华为手机自动锁屏怎么办(华为手机自动锁屏怎么解除)

  • 小米6x支持qc4.0吗

    小米6x支持qc4.0吗

  • 京东付款后怎么取消订单(京东付款后怎么改地址)

    京东付款后怎么取消订单(京东付款后怎么改地址)

  • 微信双击顶部不能返回是什么原因(微信双击置顶怎么用不了了)

    微信双击顶部不能返回是什么原因(微信双击置顶怎么用不了了)

  • 微信京东白条在哪里(微信京东白条在哪里关闭啊)

    微信京东白条在哪里(微信京东白条在哪里关闭啊)

  • 陌陌怎么随机视频聊天(陌陌随机视频聊天怎么没有了)

    陌陌怎么随机视频聊天(陌陌随机视频聊天怎么没有了)

  • 苹果能充电吗(苹果能充电吗手机)

    苹果能充电吗(苹果能充电吗手机)

  • 抖音隐私设置有什么用(抖音隐私设置有点赞和评论)

    抖音隐私设置有什么用(抖音隐私设置有点赞和评论)

  • 一加7支持无线充吗(一加7t pro支持无线)

    一加7支持无线充吗(一加7t pro支持无线)

  • 17种Vue适用于移动端的ui框架(vue做移动端适配最佳解决方案,亲测有效)

    17种Vue适用于移动端的ui框架(vue做移动端适配最佳解决方案,亲测有效)

  • 经营性现金净流量为负数怎么解释
  • 过了汇算清缴期后发现错误
  • 关联交易纳税调整期限
  • 实收资本账
  • 出口退税不退税主要适用于
  • 季度预缴所得税可以不交吗
  • 红字发票的蓝字发票要退回吗
  • 跨月负数发票会计分录
  • 预交电费有发票吗
  • 分公司背书给总公司
  • 外资企业所得税税率25
  • 运费发票备注栏新规定
  • 委任方名称代表的是什么意思?
  • 同一地级行政区怎么划分
  • 税控维护费发票图片
  • 复合增长率什么函数
  • 业务招待费如何进行纳税调整
  • 有限合伙人的投资风险有哪些
  • windows hello用不了怎么办
  • 三星笔记使用攻略
  • 委托软件开发费用怎么入账
  • mediacache是什么文件夹
  • 时序模型算法
  • php变量用什么符号
  • 计算企业应纳税所得额时,可以扣除的税种
  • 应付票据和应收票据的关系
  • 老板垫付的员工怎么入账
  • 哪些费用可以在开办费中列支
  • php中execute
  • 固定资产未提完折旧可以报废吗
  • 小规模纳税人交税怎么做会计分录
  • 会计分录怎么分借方和贷方
  • 泛化的理解
  • 个税手续费增值税
  • 资产减值损失如何确定
  • 红字记账是什么意思
  • js回调函数如何返回值
  • 异地工程增值税按几个点预缴
  • 承兑汇票上能手写名字吗
  • mssqlserver服务安装
  • 哪些情况下可以使用食品添加剂
  • 付款人和开票人必须相符吗
  • 有进项发票没有销项发票怎样做账
  • 固定资产出售通过什么科目
  • 调整凭证能不能做2个贷方
  • 已认证抵扣的发票如何做账
  • 在建工程物资属于存货吗
  • 员工报销签字流程
  • 税收返还会计核算
  • 盈余公积必须提折旧吗
  • mysql导入sql脚本指定编码
  • MySQL的存储过程保存在哪里
  • centos下安装jdk
  • Win7旗舰版系统安装
  • win2003server远程设置
  • ubuntu 11
  • 你不知道的关于现代主义的故事
  • win1020h2版本千万别更新
  • linux怎么下载安装腾讯Tim?
  • linux 使用
  • cocos2d schedule
  • node.js+express
  • Python定时器实例代码
  • jquery延时器
  • cmd下在win上做vpn的命令分享
  • javascript的change
  • js 运算符
  • 九宫寓意和象征
  • node中的事件循环
  • LocalBroadcastManager原理和机制
  • python操作db2数据库
  • python dict.get()和dict['key']的区别详解
  • Python判断字符串结尾并输出yes或no
  • 辽宁税务遴选
  • 一般纳税人取得苗木普票可以抵扣吗
  • 印花税为什么不计入资产成本
  • 上海网上申报软件怎样下载
  • 荆州区国税局
  • 上海房产税交易中心电话
  • 航天金税怎么导入发票
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设