关于camera和odometer的标定

关于camera和odometer的标定关于 camera 和 odometer 的标定 关于相机和轮速计的标定 我之前开源过一个代码 主要参考了两篇论文 下面标定过程有些公式没有细讲 建议大家看看论文 由于各自标定的时候 需要根据自己需要做修改 光看代码又费时又不好理解原理 这里把原理和代码中 自己需要注意的地方说明一下 自己第一次写博客 写得不好 大家不要笑话 然后有什么问题 大家评论区一起交流学习 关于标定 我们需要

  camera和odometer的标定


坐标系





这里,我们可以说,相机提供三维观测,三维空间中的3D点,可以计算3维的位姿;而轮速计只提供二维观测,只有左轮速度和右轮速度,通过内参转换成2D的线速度和角速度. 轮速计建模如下:


轮速计模型
轮速计模型







注意, 这里面包含了我们要标定的内参 r l r r r_l r_r rlrr 和轮距a(也有公式写作b).在后面的标定中,外参R和t,会分解为yaw pitch roll 和 l x . l y . l z l_x.l_y.l_z lx.ly.lz 来标定. 了解这些基本的知识后,我们 开始标定.
 
第一步,标定外参pitch和roll 1:
根据 旋转约束:



在这里插入图片描述
在这里插入图片描述
在这里插入图片描述









 上面公式中, α \alpha α被单独提出来后, η i \eta_i ηi的最小值与 α \alpha α无关,只需要求()中的最小值即可.下面公式中,四元数q的左乘和右乘可以用左乘算子和右乘算子表示,并且相机的旋转q表示成绕 ( k x , k y , k z ) (k_x,k_y,k_z) (kx,ky,kz)轴,旋转了 ϕ i \phi_i ϕi
 问题变成了一个线性最小二乘问题.


在这里插入图片描述
在这里插入图片描述







第二步,求解 y a w l x l y yaw l_x l_y yawlxly 内参 r l r r a r_l r_r a rlrra.注意,外参 lz是标定不出来的,可从可观性分析得出这个结论 2.
估计出pitch和roll角度之后,就可以将相机坐标系下的pose,纠正到二维平面上.然后分两步估计剩下的内参和部分外参yaw lx ly.
首先,根据角度约束估计J21和J22:


在这里插入图片描述





然后,根据 二维平移约束,估计其他参数.

在这里插入图片描述



接下来说说开源的标定代码.
 
标定流程是这样的:
 数据筛选和插值对齐
 利用cam观测估计pitch和roll角,纠正cam观测到二维平面上
 估计J21 J22
 估计内参 r r . r l . a r_r . r_l . a rr.rl.a,部分外参 y a w . l x . l y yaw .l_x .l_y yaw.lx.ly
 再次估计pitch和roll角
 refine估计的所有外参
 
使用 代码需要注意的问题:
首先需要检查你的小车的camera安装方式,我们的小车camera是朝前的,camera的x,y,z轴分别和odom的-y,-z,x相同,这个关系是需要根据你自己的安装方式,在代码中做修改的.
1. 在main_node.cpp中,

if(axis(1)>0) { deltaTheta_cl *= -1; axis *= -1; } 
sync_tmp.scan_match_results[0] = camDatas[i].tlc[0]; sync_tmp.scan_match_results[1] = camDatas[i].tlc[2]; sync_tmp.scan_match_results[2] = camDatas[i].deltaTheta; 
 1. 修改config.yaml文件; 2. 根据自己camera和odom的坐标系关系部分代码,修改上面提到"代码需要注意的问题"; 3. 建立ros空间,catkin_make,然后source; 4. roslaunch cam_odo_cal S800.launch 5. rosbag play xxx.bag. 

  1. An Analytical Least-Squares Solution to the Odometer-Camera Extrinsic Calibration Problem ↩︎
  2. Simultaneous calibration of odometry and sensor parameters for mobile robots ↩︎

























































版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217088.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午10:22
下一篇 2026年3月18日 上午10:23


相关推荐

  • 前端报错400

    前端报错400前端报错400看控制台报错:Resolved[org.springframework.web.method.annotation.MethodArgumentTypeMismatchException:Failedtoconvertvalueoftype’java.lang.String’torequiredtype’java.util.Date’;nestede…

    2022年6月11日
    87
  • typora文章同步(跨平台)

    typora文章同步(跨平台)typora实现备份个人博客一、图片上传PicGo有提供默认的图床,可以直接使用,但是有上传的限制,有特定要求的可以自己配置github图床。1.配置github图床利用github搭建图床2.安装PicGo下载链接windows选择exe结尾文件即可mac选择dmg为后缀的文件安装的时候一路next即可。3.在picGo中配置使用github图床4.picGo设置开启时间戳重名防止图片上传出错ps:我当时一直传输失败,修改代理,重新生成厂库,toke

    2022年5月19日
    135
  • 频次最高的38道selenium面试题及答案(下)[通俗易懂]

    频次最高的38道selenium面试题及答案(下)[通俗易懂]20、selenium中隐藏元素定位,你该如何做?隐藏元素可以正常定位到,只是不能操作(定位元素和操作元素是两码事,操作元素是指click、clear、send_keys等这些方法)。我们可以用js来操作隐藏元素。js和selenium不同,只有页面上有的元素(在dom里面的)都能正常操作。21、如何判断一个页面上元素是否存在?法1:用try…except在代码块加上法2:用elements定义组元素方法然后根其元素个数len()<1存在返回True,不存在则返回F.

    2022年6月20日
    25
  • 字符串反转的实现方法总结「建议收藏」

    文章目录方法1:对称交换法方法2:函数递归法方法3:列表反转法方法4:循环反向迭代法方法5:倒序切片法方法6:遍历索引法方法7:反向遍历索引法方法8:列表弹出法方法9:反向循环迭代法方法10:累积相加法方法11:匿名函数法方法12:列表倒序法方法13:双向队列排序法方法14:双向队列反转法方法1:对称交换法str=’abcdef’deff(s):s=list(s)…

    2022年4月16日
    43
  • 做10年Windows程序员与做10年Linux程序员的区别

    如果一个程序员从来没有在linux,unix下开发过程序,一直在windows下面开发程序,同样是工作10年,大部分情况下与在linux,unix下面开发10年的程序员水平会差别很大。我写这篇文章

    2021年12月27日
    38
  • PHP artisan migrate 报错显示 could not find driver ,怎么办?

    PHP artisan migrate 报错显示 could not find driver ,怎么办?

    2021年11月9日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号