自动驾驶两个传感器之间的坐标系转换

news/2025/2/23 10:13:53/文章来源:https://www.cnblogs.com/yanghailin/p/18731873

有两种方式可以实现两个坐标系的转换。
车身坐标系下一个点p_car,需要转换到相机坐标系下,旋转矩阵R_car2Cam,平移矩阵T_car2Cam。点p_car在相机坐标系下记p_cam.

方法1:先旋转再平移

p_cam = T_car2Cam * p_car + T_car2Cam
需要注意的是,这里的平移矩阵T_car2Cam是车身坐标系原点在相机坐标系下面的坐标!
用具体数值表示如下:

import numpy as nprot = np.array([[ 4.6776832e-04, -9.9942386e-01, -3.3936482e-02],[ 3.1350527e-02,  3.3934463e-02, -9.9893224e-01],[ 9.9950832e-01, -5.9665786e-04,  3.1348340e-02]])tran = np.array([0.106073,  1.411398, -1.971551])p_veh = np.array([3, 6, 8]).reshape(3, 1)
p_cam_1 = rot.dot(p_veh) + tran.reshape(3,1)
print(p_cam_1)#[[-6.16055871]#[-6.28240156]#[ 1.27418073]]

方法2:先平移再旋转

在方法1中, 是把p经过旋转,转到相机坐标系, 再加上平移向量,这个平移向量就是相机坐标系的,所以可以直接相加减。
同样的,我们这里的方法2是需要先平移,就要求平移的向量是车身坐标系下的才能相加减。就是我们如果现在需要先平移,那么就要求这个平移向量是在车身坐标系下的才能直接相加减。
即需要知道相机坐标原点相对于车身坐标系。

如图就是把左边的相机坐标系原点(0,0,0)先平移到车身坐标系。然后再旋转,注意这个时候的旋转矩阵是需要相机坐标系到车身坐标系的,直接R_car2Cam取个逆就是。

Cam_0_to_car = inv(R_car2Cam) * (Cam_0 - T_car2Cam)

import numpy as npR_car2Cam = np.array([[ 4.6776832e-04, -9.9942386e-01, -3.3936482e-02],[ 3.1350527e-02,  3.3934463e-02, -9.9893224e-01],[ 9.9950832e-01, -5.9665786e-04,  3.1348340e-02]])T_car2Cam = np.array([0.106073,  1.411398, -1.971551])p_car = np.array([3, 6, 8]).reshape(3, 1)
p_cam_1 = R_car2Cam.dot(p_car) + T_car2Cam.reshape(3,1)
print(p_cam_1)#旋转矩阵的逆等于其转置
Cam_0_to_car = (np.dot(R_car2Cam.T, (np.array([[0, 0, 0]]).T - T_car2Cam[..., np.newaxis])).T).reshape(3,1)
p_cam_2 = R_car2Cam.dot(p_car - Cam_0_to_car)
print(p_cam_2)
输出:
[[-6.16055871][-6.28240156][ 1.27418073]]
[[-6.16055872][-6.28240152][ 1.27418082]]

RT矩阵的逆

import numpy as npR_car2Cam = np.array([[ 4.6776832e-04, -9.9942386e-01, -3.3936482e-02],[ 3.1350527e-02,  3.3934463e-02, -9.9893224e-01],[ 9.9950832e-01, -5.9665786e-04,  3.1348340e-02]])T_car2Cam = np.array([0.106073,  1.411398, -1.971551])p_car = np.array([3, 6, 8]).reshape(3, 1)
p_cam_1 = R_car2Cam.dot(p_car) + T_car2Cam.reshape(3,1)
print(p_cam_1)Cam_0_to_car = (np.dot(R_car2Cam.T, (np.array([[0, 0, 0]]).T - T_car2Cam[..., np.newaxis])).T).reshape(3,1)
p_cam_2 = R_car2Cam.dot(p_car - Cam_0_to_car)
print(p_cam_2)rt = np.eye(4)
rt[:3, :3] = R_car2Cam
rt[:3, -1] = T_car2Cam
rt_1 = np.linalg.inv(rt)print("===>rt")
print(rt)
print("===>inv rt")
print(rt_1)print("==>>Cam_0_to_car")
print(Cam_0_to_car)
[[-6.16055871][-6.28240156][ 1.27418073]]
[[-6.16055872][-6.28240152][ 1.27418082]]
===>rt
[[ 4.6776832e-04 -9.9942386e-01 -3.3936482e-02  1.0607300e-01][ 3.1350527e-02  3.3934463e-02 -9.9893224e-01  1.4113980e+00][ 9.9950832e-01 -5.9665786e-04  3.1348340e-02 -1.9715510e+00][ 0.0000000e+00  0.0000000e+00  0.0000000e+00  1.0000000e+00]]
===>inv rt
[[ 4.67768326e-04  3.13505285e-02  9.99508364e-01  1.92628402e+00][-9.99423904e-01  3.39344610e-02 -5.96657759e-04  5.69405203e-02][-3.39364847e-02 -9.98932217e-01  3.13483392e-02  1.47529553e+00][ 0.00000000e+00  0.00000000e+00  0.00000000e+00  1.00000000e+00]]
==>>Cam_0_to_car
[[1.92628394][0.05694051][1.47529556]]

这里求相机坐标原点在车身坐标系下的坐标, 其实用RT矩阵再求逆就可以得到。

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

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

相关文章

8-2 MySQL 索引的设计原则(超详细说明讲解)

8-2 MySQL 索引的设计原则(超详细说明讲解) @目录8-2 MySQL 索引的设计原则(超详细说明讲解)1. 测试数据准备2. 哪些情况适合创建索引2.1 字段的数值有唯一性的限制2.2 频繁作为 WHERE 查询条件的字段2.3 经常 GROUP BY 和 ORDER BY 的列2.4 UPDATE、DELETE 的 中的WHERE 条件列…

北京时间同步

本地时间与北京时间 同步 参考:https://blog.csdn.net/qq_46092061/article/details/128748789 本地显示秒数while True:current_time = time.strftime("%H:%M:%S")if current_time >= "19:59:59":print("start")breaktime.sleep(0.5) # 减…

客流统计自动识别摄像头

客流统计自动识别摄像头提供了重要的决策依据。通过分析客流数据,商家可以了解顾客的消费习惯与高峰时段,从而优化营业时间、调整商品布局和促销策略。例如,如果某个时间段内顾客数量明显增加,商家可以考虑在此时推出促销活动,以吸引更多消费者。此外,通过长期的数据积累…

老人摔倒自动监控摄像头

老人摔倒自动监控摄像头通过智能识别技术,可以实时监测到老年人的活动状态。一旦系统检测到异常情况,比如老人摔倒,它会立即向家庭成员或护理人员发送警报。这种及时性大大提高了救助的效率,使得老人能够在最短时间内得到帮助。此外,一些先进的监控系统还配备了语音通话功…

在Odoo18.0中使用韵达速递

本文给大家带来的的是odoo与韵达速递的免费对接方案。 注册韵达开放平台 想要使用韵达速递,首先我们就需要注册一个韵达开放平台的账号,并创建一个开放平台应用。 创建完应用之后,我们需要以下4个参数:AppKey: 应用的key AppSecret: 应用的密钥 PartnerId: 韵达网点分配的…

积水自动监控摄像头

积水自动监控摄像头主要通过安装在关键路段、排水口和易积水区域的摄像头,对降雨和积水情况进行实时监控。这些摄像头配备了先进的图像识别技术,能够自动识别地面是否存在积水,并及时将数据传输到城市管理中心。一旦监测到积水情况,系统会立即发出警报,提醒相关部门迅速采…

清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!

前言 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单。该份教程旨在通过AI技术重构传统科研模式,提升研究效率与智能化水平。DeepSeek访问地址:https://chat.deepseek.com 清华大学推出的 DeepSeek 从入门到精通(104页)免费教程! 清华大学推出第二…

读DAMA数据管理知识体系指南02数据管理(下)

数据管理涵盖数据优化、元数据管理、多角度思考、生命周期管理、风险管理、领导力及战略制定,需确保数据质量、安全并降低风险,利用DAMA框架等指导数据管理实践。1. 数据优化计划 1.1. 数据也许被视为独立于业务流程存在 1.2. 业务流程与支持它们的技术之间的关系 1.3. 系统的…

全新方案80M/S,告别限速!

聊一聊 资源和文件转载的最佳方式是通过网盘链接分享,这种方式的优点在于可以避免地区、局域网和文件大小的限制。近年来,随着123云盘、阿里云盘和夸克网盘等网盘逐步崭露头角,各具优势。然而,依然没能撼动百度网盘老大哥的位置,据统计,百度网盘的依然是众多网盘中用户群…

windows zookeeper启动

如果启动后闪退则 在 zkEnv.cmd 配置日志输出级别 增加 TRACEFILE: 重新启动后在 logs 目录下查看日志输出 : 出现8080 端口占用 在zoo.cfg 增加jetty 启动的端口: admin.serverPort=9000 参考:https://blog.csdn.net/l123lgx/article/details/136627491

markdown笔记软件,windows端选用

要求从剪切板粘贴图片,可以自定义相对位置。 类似typora的所见即所得渲染。 代码块高亮(最好有一键复制功能) 大纲功能。层级关系用起来会更舒服。 Typora几乎是没有对手的,如果不收费就没有别的软件什么事了。淘汰项 ide工具 vscode和idea是我首先排除的,专业的工具做专业…

广州移动大众从化0月租卡在哪里购买?怎么办理?

https://xsjcloud.com V*x:gzydc00月租卡的好处有哪些呢 1,真正的零月租 (接电话免费),不用不扣费 2,不用不扣费,打电话即可触发 3,需到广州指定移动营业厅激活号码(广州润粤移动厅,从化移动综合楼厅),到手如实 4,可注册其他平台账号,微信号等, 广州润粤服务厅办…