自動駕駛兩個傳感器之間的坐標系轉換

有兩種方式可以實現兩個坐標系的轉換。
車身坐標系下一個點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)先平移到車身坐標系的原點(0,0,0)處,注意平移后的還是在相機坐標系下,現在tran = np.array([0.106073, 1.411398, -1.971551])是相機坐標系下,car坐標系原點的位置。
就是在相機坐標系下一個點Q(0.106073, 1.411398, -1.971551),我現在就要把我相機坐標系原點挪到這個Q點。就是Q點在新相機坐標系下是(0, 0, 0). 所以之前的點n轉到以Q點為原點的新相機坐標系需要經過n-(0.106073, 1.411398, -1.971551),

比如之前的原點(0,0,0)轉到新平移后的Q為原點相機坐標系下是:(0,0,0)-(0.106073, 1.411398, -1.971551)

相機坐標系原點平移到車身坐標系原點,這個時候還差一步旋轉。旋轉,注意這個時候的旋轉矩陣是需要相機坐標系到車身坐標系的,因為我們現在點都在相機坐標系下,只是平移了,需要相機到車身的旋轉矩陣,直接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.pswp.cn/news/896245.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896245.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896245.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

k8s ssl 漏洞修復

針對Kubernetes集群中SSL/TLS協議信息泄露漏洞(CVE-2016-2183)的修復,需重點修改涉及弱加密算法的組件配置。以下是具體修復步驟及驗證方法: 一、漏洞修復步驟 1. 修復etcd服務 修改配置文件 : 編輯 /etc/kubernetes/…

數字IC后端培訓教程| 芯片后端實戰項目中base layer drc violation解析

今天分享一個咱們社區IC后端訓練營學員遇到的一個經典DRC案例。這個DRC Violation的名字為PP.S.9(這里的PP就是Plus P)。這一層是屬于管子的base layer。更多關于base layer的介紹,可以查看下面這份教程。 https://alidocs.dingtalk.com/api/doc/transit?spaceId5…

從零到一學習c++(基礎篇--筑基期十一-類)

從零到一學習C(基礎篇) 作者:羨魚肘子 溫馨提示1:本篇是記錄我的學習經歷,會有不少片面的認知,萬分期待您的指正。 溫馨提示2:本篇會盡量用更加通俗的語言介紹c的基礎,用通俗的語言去…

DeepSeek技術全景解析:架構創新與行業差異化競爭力

一、DeepSeek技術體系的核心突破 架構設計:效率與性能的雙重革新 Multi-head Latent Attention (MLA):通過將注意力頭維度與隱藏層解耦,實現顯存占用降低30%的同時支持4096超長上下文窗口。深度優化的MoE架構:結合256個路由專家…

插入排序:一種簡單而直觀的排序算法

大家好!今天我們來聊聊一個簡單卻非常經典的排序算法——插入排序(Insertion Sort)。在所有的排序算法中,插入排序是最直觀的一個。 一、插入排序的基本思想 插入排序的核心思想是:將一個待排序的元素,插…

2025年校園網絡招聘會匯總

1、衛生健康行業2025屆畢業生春季校園網絡招聘會 企業數量職位數量崗位數量10020002000 訪問地址: https://www.weirenjob.com/zph/zph_wsjkxy2025jbyscjxywlzph/ 2、山東地區面向2025屆高校畢業生網絡招聘活動 企業數量職位數量崗位數量909271052434 訪問地址&a…

Windows 10 GPU STACK 0.5.1 安裝

Windows 10 GPU STACK 0.5.1 安裝 1 GPUStack 安裝1.Python安裝(3.10/11/12)2.GPUStack 下載3.生成密碼4.訪問5.設置模型下載目錄6.禁用開機自啟并重啟服務7.安裝模型8.查看安裝的進度 2.試驗場聊天測試1.對話模式 3.API Key 測試 1 GPUStack 安裝 1.Py…

【數據結構】快指針和慢指針

一、 給你單鏈表的頭結點 head ,請你找出并返回鏈表的中間結點。如果有兩個中間結點,則返回第二個中間結點。 要求:只遍歷一遍鏈表 可以使用快慢指針:fast 一次走兩步,slow 一次走一步。當 fast NULL(偶數個結點)或…

1.3 嵌入式系統的固件

嵌入式系統的固件,一般情況下的作用是: 1.硬件抽象層(HAL):固件提供了一個硬件抽象層,它將硬件的復雜性隱藏起來,為上層軟件提供了一套標準的接口。這樣,操作系統和應用程序不需要直接與硬件打交…

中國工業互聯網研究院:人工智能大模型年度發展趨勢報告

當前,以大模型為代表的人工智能正快速演進,激發全球科技之變、產業之變、時代之變,人工智能發展迎來新高潮。隨著大模型推理、多模態生成、智能體等創新技術的發展,大模型賦能千行百業將進一步提速。中國工業互聯網研究院全方位剖…

【cv】vs2022配置opencv

release下配置包含目錄和庫目錄 E:\sdk\sdk_cuda12.3\opencv490\include E:\sdk\sdk_cuda12.3\opencv490\include\opencv2 E:\sdk\sdk_cuda12.3\opencv490\lib release下配置包含鏈接器輸入的依附依賴項 opencv_world490.lib release編譯文件夾下需手動復制opencv_world49…

Python Pandas庫使用指南:從入門到精通

1. 引言 Pandas 是 Python 中用于數據處理和分析的核心庫之一。它提供了高效的數據結構(如 DataFrame 和 Series),能夠輕松處理結構化數據,支持數據清洗、過濾、聚合、合并等操作。Pandas 在數據分析、機器學習和科學計算領域中被廣泛使用。 本文將詳細介紹 Pandas 的基本…

Visual Studio中打開多個項目

1) 找到解決方案窗口 2) 右鍵添加→ 選擇現有項目 3) 選擇.vcxproj文件打開即可

react路由總結

目錄 一、腳手架基礎語法(16~17) 1.1、hello react 1.2、組件樣式隔離(樣式模塊化) 1.3、react插件 二、React Router v5 2.1、react-router-dom相關API 2.1.1、內置組件 2.1.1.1、BrowserRouter 2.1.1.2、HashRouter 2.1.1.3、Route 2.1.1.4、Redirect 2.1.1.5、L…

內外網隔離文件傳輸解決方案|系統與釘釘集成+等保合規,安全提升70%

一、背景與痛點 在內外網隔離的企業網絡環境中,員工與外部協作伙伴(如釘釘用戶)的文件傳輸面臨以下挑戰: 1. **安全性風險**:內外網直連可能導致病毒傳播、數據泄露。 2. **操作繁瑣**:傳統方式需頻繁切…

多線程篇學習面試

多線程 1.樂觀鎖、CAS思想 java樂觀鎖機制: ? 樂觀鎖體現的是悲觀鎖的反面。它是一種積極的思想,它總是認為數據是不會被修改的,所以是不會對數據上鎖的。但是樂觀鎖在更新的時候會去判斷數據是否被更新過。樂觀鎖的實現方案一般有兩種&a…

云服務器和物理服務器該如何選擇

隨著互聯網的快速發展,企業大多都會選擇云服務器和物理服務器進行使用,那么對于云服務器和物理服務器兩者之間該如何進行選擇呢? 云服務器可以為用戶和企業提供網站處理中等到高流量所需要的一切,云服務器中的高可用能性功能&…

將產品照片(form.productPhotos)轉為 JSON 字符串發送給后端

文章目錄 1. 前端 form.productPhotos 的當前處理a. 組件綁定b. 當前發送邏輯 2. 如何將 form.productPhotos 轉為 JSON 字符串發送給后端a. 修改前端 save() 方法b. 確保 esave API 支持接收字符串 基于你提供的 identify-form.vue 代碼,我將分析如何將產品照片&a…

SpringCloud系列教程:微服務的未來(二十五)-基于注解的聲明隊列交換機、消息轉換器、業務改造

前言 在現代分布式系統中,消息隊列是實現服務解耦和異步處理的關鍵組件。Spring框架提供了強大的支持,使得與消息隊列(如RabbitMQ、Kafka等)的集成變得更加便捷和靈活。本文將深入探討如何利用Spring的注解驅動方式來配置和管理隊…

國產編輯器EverEdit - 文本編輯器的關鍵特性:文件變更實時監視,多頭編輯不掉坑

1 監視文件變更 1.1 應用場景 某些時候,用戶會使用多個編輯器打開同一個文件,如果在A編輯器修改保存,但是B編輯器沒有重新打開,直接在B編輯器修改再保存,則可能造成在A編輯器中修改的內容丟失,因此&#x…