【第2話:基礎知識】 自動駕駛中的世界坐標系、車輛坐標系、相機坐標系、像素坐標系概念及相互間的轉換公式推導

自動駕駛中的坐標系概念及相互間的轉換公式推導

在自動駕駛系統中,多個坐標系用于描述車輛、傳感器和環境的相對位置。這些坐標系之間的轉換是實現定位、感知和控制的關鍵。下面我將逐步解釋常見坐標系的概念,并推導相互轉換的公式。推導基于標準幾何變換和齊次坐標表示,確保公式正確可靠。

在這里插入圖片描述

一、坐標系概念

在自動駕駛中,主要涉及以下坐標系:

  1. 世界坐標系(World Coordinate System):全局坐標系,固定在地球上(如基于GPS或地圖),原點通常為固定參考點(如起點)。用于描述車輛和環境在全局中的位置。
  2. 車輛坐標系(Vehicle Coordinate System):以車輛為中心,原點通常在車輛重心或后軸中心。xxx軸指向車輛前進方向,yyy軸指向左側,zzz軸向上。用于描述車輛自身狀態。
  3. 傳感器坐標系(Sensor Coordinate System):以傳感器(如激光雷達、攝像頭)為中心,原點在傳感器安裝點。每個傳感器有自己的坐標系,用于描述傳感器測量數據。
  4. 相機坐標系(Camera Coordinate System):針對攝像頭,原點在相機光心,zzz軸沿光軸方向,xxx軸和yyy軸平行于圖像平面。用于描述點在相機空間的位置。
  5. 像素坐標系(Pixel Coordinate System):針對圖像傳感器,原點在圖像左上角,uuu軸向右,vvv軸向下。用于描述像素位置。

這些坐標系相互關聯,需要通過旋轉和平移進行轉換。轉換通常使用齊次坐標(Homogeneous Coordinates)來表示,以簡化矩陣運算。齊次坐標形式為 [xyz1]\begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}?xyz1??
在這里插入圖片描述

二、坐標系轉換公式推導

轉換公式推導基于歐幾里得變換,包括旋轉矩陣(Rotation Matrix)和平移向量(Translation Vector)。旋轉矩陣表示方向變化,平移向量表示位置偏移。推導從簡單到復雜,逐步構建完整轉換鏈。

步驟1: 世界坐標系到車輛坐標系的轉換
  • 概念:車輛坐標系相對于世界坐標系的位置和方向變化,由車輛的位姿(位置和姿態)定義。
  • 推導
    • 設點 Pw=[xwywzw]P_w = \begin{bmatrix} x_w \\ y_w \\ z_w \end{bmatrix}Pw?=?xw?yw?zw??? 在世界坐標系。
    • 設旋轉矩陣 RwvR_{wv}Rwv?(從世界到車輛)表示方向變化,平移向量 twv=[txtytz]t_{wv} = \begin{bmatrix} t_x \\ t_y \\ t_z \end{bmatrix}twv?=?tx?ty?tz??? 表示車輛原點在世界坐標系中的位置。
    • 在車輛坐標系中,點 PvP_vPv? 的坐標為:
      Pv=Rwv(Pw?twv) P_v = R_{wv} (P_w - t_{wv}) Pv?=Rwv?(Pw??twv?)
    • 使用齊次坐標簡化:
      [Pv1]=[Rwv?Rwvtwv01][Pw1] \begin{bmatrix} P_v \\ 1 \end{bmatrix} = \begin{bmatrix} R_{wv} & -R_{wv} t_{wv} \\ 0 & 1 \end{bmatrix} \begin{bmatrix} P_w \\ 1 \end{bmatrix} [Pv?1?]=[Rwv?0??Rwv?twv?1?][Pw?1?]
    • 定義變換矩陣 Twv=[Rwv?Rwvtwv01]T_{wv} = \begin{bmatrix} R_{wv} & -R_{wv} t_{wv} \\ 0 & 1 \end{bmatrix}Twv?=[Rwv?0??Rwv?twv?1?],則:
      [Pv1]=Twv[Pw1] \begin{bmatrix} P_v \\ 1 \end{bmatrix} = T_{wv} \begin{bmatrix} P_w \\ 1 \end{bmatrix} [Pv?1?]=Twv?[Pw?1?]
    • 其中,RwvR_{wv}Rwv? 是正交矩陣,滿足 RwvRwvT=IR_{wv} R_{wv}^T = IRwv?RwvT?=I(單位矩陣),表示純旋轉。
步驟2: 車輛坐標系到傳感器坐標系的轉換
  • 概念:傳感器(如激光雷達)安裝在車輛上,其坐標系相對于車輛坐標系有固定偏移。
  • 推導
    • 設點 Pv=[xvyvzv]P_v = \begin{bmatrix} x_v \\ y_v \\ z_v \end{bmatrix}Pv?=?xv?yv?zv??? 在車輛坐標系。
    • 設旋轉矩陣 RvsR_{vs}Rvs?(從車輛到傳感器)和平移向量 tvs=[tsxtsytsz]t_{vs} = \begin{bmatrix} t_{sx} \\ t_{sy} \\ t_{sz} \end{bmatrix}tvs?=?tsx?tsy?tsz???(傳感器原點在車輛坐標系中的位置)。
    • 在傳感器坐標系中,點 PsP_sPs? 的坐標為:
      Ps=Rvs(Pv?tvs) P_s = R_{vs} (P_v - t_{vs}) Ps?=Rvs?(Pv??tvs?)
    • 齊次坐標形式:
      [Ps1]=[Rvs?Rvstvs01][Pv1] \begin{bmatrix} P_s \\ 1 \end{bmatrix} = \begin{bmatrix} R_{vs} & -R_{vs} t_{vs} \\ 0 & 1 \end{bmatrix} \begin{bmatrix} P_v \\ 1 \end{bmatrix} [Ps?1?]=[Rvs?0??Rvs?tvs?1?][Pv?1?]
    • 定義變換矩陣 Tvs=[Rvs?Rvstvs01]T_{vs} = \begin{bmatrix} R_{vs} & -R_{vs} t_{vs} \\ 0 & 1 \end{bmatrix}Tvs?=[Rvs?0??Rvs?tvs?1?],則:
      [Ps1]=Tvs[Pv1] \begin{bmatrix} P_s \\ 1 \end{bmatrix} = T_{vs} \begin{bmatrix} P_v \\ 1 \end{bmatrix} [Ps?1?]=Tvs?[Pv?1?]
    • 結合步驟1,世界到傳感器的轉換:
      [Ps1]=TvsTwv[Pw1] \begin{bmatrix} P_s \\ 1 \end{bmatrix} = T_{vs} T_{wv} \begin{bmatrix} P_w \\ 1 \end{bmatrix} [Ps?1?]=Tvs?Twv?[Pw?1?]
步驟3: 相機坐標系到像素坐標系的轉換
  • 概念:攝像頭將3D點投影到2D圖像平面,轉換涉及相機內參(焦距、光心)。
  • 推導
    • 設點 Pc=[xcyczc]P_c = \begin{bmatrix} x_c \\ y_c \\ z_c \end{bmatrix}Pc?=?xc?yc?zc??? 在相機坐標系。
    • 使用針孔相機模型:點投影到圖像平面,坐標 (xp,yp)(x_p, y_p)(xp?,yp?) 滿足:
      xp=fxxczc,yp=fyyczc x_p = \frac{f_x x_c}{z_c}, \quad y_p = \frac{f_y y_c}{z_c} xp?=zc?fx?xc??,yp?=zc?fy?yc??
      其中 fxf_xfx?fyf_yfy? 是等效焦距(考慮像素縮放)。
    • 轉換到像素坐標系,考慮光心偏移 (cx,cy)(c_x, c_y)(cx?,cy?)
      u=fxxczc+cx,v=fyyczc+cy u = f_x \frac{x_c}{z_c} + c_x, \quad v = f_y \frac{y_c}{z_c} + c_y u=fx?zc?xc??+cx?,v=fy?zc?yc??+cy?
    • 寫成矩陣形式:
      [uv1]=1zc[fx0cx0fycy001][xcyczc] \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \frac{1}{z_c} \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x_c \\ y_c \\ z_c \end{bmatrix} ?uv1??=zc?1??fx?00?0fy?0?cx?cy?1???xc?yc?zc???
    • 定義相機內參矩陣 K=[fx0cx0fycy001]K = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix}K=?fx?00?0fy?0?cx?cy?1??,則:
      [uv1]≡K[xc/zcyc/zc1] \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} \equiv K \begin{bmatrix} x_c / z_c \\ y_c / z_c \\ 1 \end{bmatrix} ?uv1??K?xc?/zc?yc?/zc?1??
      (其中 ≡\equiv 表示齊次坐標等價,需歸一化處理)。
完整轉換鏈示例:世界坐標系到像素坐標系
  • 場景:給定世界坐標系中的點,如何得到其在圖像中的像素位置(如用于目標檢測)。
  • 推導
    • 結合所有步驟:世界坐標系 → 車輛坐標系 → 傳感器坐標系(相機) → 像素坐標系。
    • 設傳感器是相機,則從步驟2:Ps=PcP_s = P_cPs?=Pc?(相機坐標系)。
    • 轉換鏈:
      [Pc1]=TvsTwv[Pw1] \begin{bmatrix} P_c \\ 1 \end{bmatrix} = T_{vs} T_{wv} \begin{bmatrix} P_w \\ 1 \end{bmatrix} [Pc?1?]=Tvs?Twv?[Pw?1?]
      [uv1]=1zcK[I0][Pc1] \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \frac{1}{z_c} K \begin{bmatrix} I & 0 \end{bmatrix} \begin{bmatrix} P_c \\ 1 \end{bmatrix} ?uv1??=zc?1?K[I?0?][Pc?1?]
      (其中 [I0]\begin{bmatrix} I & 0 \end{bmatrix}[I?0?] 提取 PcP_cPc? 的前三維)。
    • 完整公式:
      [uv1]=1zcK[I0]TvsTwv[Pw1] \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \frac{1}{z_c} K \begin{bmatrix} I & 0 \end{bmatrix} T_{vs} T_{wv} \begin{bmatrix} P_w \\ 1 \end{bmatrix} ?uv1??=zc?1?K[I?0?]Tvs?Twv?[Pw?1?]
    • 簡化:令 zcz_czc?PcP_cPc?zzz 分量,計算時需先求解 PcP_cPc?
三、關鍵注意事項
  • 旋轉矩陣計算:旋轉矩陣通常由歐拉角或四元數推導。例如,繞 zzz 軸旋轉 θ\thetaθ 角:
    Rz(θ)=[cos?θ?sin?θ0sin?θcos?θ0001] R_z(\theta) = \begin{bmatrix} \cos \theta & -\sin \theta & 0 \\ \sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz?(θ)=?cosθsinθ0??sinθcosθ0?001??
  • 誤差處理:實際系統中,轉換參數(如 RwvR_{wv}Rwv?, twvt_{wv}twv?)通過標定獲得,可能涉及優化算法(如最小二乘法)減少誤差。
  • 應用:這些轉換用于傳感器融合(如融合攝像頭和激光雷達數據)、路徑規劃等。確保轉換鏈一致,避免累積誤差。

這個推導基于標準幾何原理,在自動駕駛系統中廣泛應用。如果您有具體場景(如特定傳感器類型),我可以進一步細化推導。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/92192.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/92192.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/92192.shtml

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

相關文章

深度拆解Dify:開源LLM開發平臺的架構密碼與技術突圍

注:此文章內容均節選自充電了么創始人,CEO兼CTO陳敬雷老師的新書《GPT多模態大模型與AI Agent智能體》(跟我一起學人工智能)【陳敬雷編著】【清華大學出版社】 清華《GPT多模態大模型與AI Agent智能體》書籍配套視頻課程【陳敬雷…

tomcat處理請求流程

1.瀏覽器在請求一個servlet時,會按照HTTP協議構造一個HTTP請求,通過Socket連接發送給Tomcat. 2.Tomcat通過不同的IO模型接收到Socket的字節流數據。 3.接收到數據后,按照HTTP協議解析字節流,得到HttpServletRequest對象 4.通過HttpServletRequest對象,也就是請求信息,找到該請求…

【音視頻】WebRTC 一對一通話-信令服

一、服務器配置 服務器在Ubuntu下搭建,使用C語言實現,由于需要使用WebSocket和前端通訊,同時需要解析JSON格式,因此引入了第三方庫:WebSocketpp和nlonlohmann,這兩個庫的具體配置方式可以參考我之前的博客…

Spring(以 Spring Boot 為核心)與 JDK、Maven、MyBatis-Plus、Tomcat 的版本對應關系及關鍵注意事項

以下是 Spring(以 Spring Boot 為核心)與 JDK、Maven、MyBatis-Plus、Tomcat 的版本對應關系及關鍵注意事項,基于最新技術生態整理: 一、Spring Boot 與 JDK 版本對應 Spring Boot 2.x 系列 最低要求:JDK 1.8推薦版本…

03-基于深度學習的鋼鐵缺陷檢測-yolo11-彩色版界面

目錄 項目介紹🎯 功能展示🌟 一、環境安裝🎆 環境配置說明📘 安裝指南說明🎥 環境安裝教學視頻 🌟 二、系統環境(框架/依賴庫)說明🧱 系統環境與依賴配置說明&#x1f4c…

24. 前端-js框架-Vue

文章目錄前言一、Vue介紹1. 學習導圖2. 特點3. 安裝1. 方式一:獨立版本2. 方式二:CDN方法3. 方式三:NPM方法(推薦使用)4. 搭建Vue的開發環境(大綱)5. 工程結構6. 安裝依賴資源7. 運行項目8. Vue…

Spring 的依賴注入DI是什么?

口語化答案好的,面試官,依賴注入(Dependency Injection,簡稱DI)是Spring框架實現控制反轉(IoC)的主要手段。DI的核心思想是將對象的依賴關系從對象內部抽離出來,通過外部注入的方式提…

匯川PLC通過ModbusTCP轉Profinet網關連接西門子PLC配置案例

本案例是匯川的PLC通過開疆智能研發的ModbusTCP轉Profient網關讀寫西門子1200PLC中的數據。匯川PLC作為ModbusTCP的客戶端網關作為服務器,在Profinet一側網關作為從站接收1200PLC的數據并轉成ModbusTCP協議被匯川PLC讀取。配置過程:匯川PLC配置Modbus TC…

【計組】數據的表示與運算

機器數與真值機器數真值編碼原碼特點表示范圍求真值方法反碼特點補碼特點表示范圍求真值方法移碼特點表示范圍求真值方法相互轉換原碼<->補碼補碼<->移碼原碼<->反碼反碼<->補碼移位左移右移邏輯右移算術右移符號擴展零擴展整數小數符號擴展運算器部件…

視頻水印技術中的變換域嵌入方法對比分析

1. 引言 隨著數字視頻技術的快速發展和網絡傳輸的普及,視頻內容的版權保護問題日益突出。視頻水印技術作為一種有效的版權保護手段,通過在視頻中嵌入不可見或半可見的標識信息,實現對視頻內容的所有權認證、完整性驗證和盜版追蹤。在視頻水印技術的發展歷程中,變換域水印因…

電動汽車電池管理系統設計與實現

電動汽車電池管理系統設計與實現 1. 引言 電動汽車電池管理系統(BMS)是確保電池組安全、高效運行的關鍵組件。本文將詳細介紹一個完整的BMS系統的MATLAB實現,包括狀態估計(SOC/SOH)、參數監測、電池平衡和保護功能。系統設計為模塊化結構,便于擴展和參數調整。 2. 系統架構…

JVM(Java Virtual Machine,Java 虛擬機)超詳細總結

一、JVM的基礎概念1、概述JVM是 Java 程序的運行基礎環境&#xff0c;是 Java 語言實現 “一次編寫&#xff0c;到處運行” &#xff08;"write once , run anywhere. "&#xff09;特性的關鍵組件&#xff0c;具體從以下幾個方面來理解&#xff1a;概念層面JVM 是一…

Balabolka軟件調用微軟離線自然語音合成進行文字轉語音下載安裝教程

首先&#xff0c;需要準備安裝包 Balabolka NaturalVoiceSAPIAdapterMicrosoftWindows.Voice.zh-CN.Xiaoxiao.1_1.0.9.0_x64__cw5n1h2txyewy.Msix MicrosoftWindows.Voice.zh-CN.Yunxi.1_1.0.4.0_x64__cw5n1h2txyewy.Msix借助上面這個工具&#xff1a;NaturalVoiceSAPIAdapter&…

Java修仙之路,十萬字吐血整理全網最完整Java學習筆記(高級篇)

導航&#xff1a; 【Java筆記踩坑匯總】Java基礎JavaWebSSMSpringBootSpringCloud瑞吉外賣/谷粒商城/學成在線設計模式面試題匯總性能調優/架構設計源碼解析 推薦視頻&#xff1a; 黑馬程序員全套Java教程_嗶哩嗶哩 尚硅谷Java入門視頻教程_嗶哩嗶哩 推薦書籍&#xff1a; 《Ja…

接口測試用例和接口測試模板

一、簡介 3天精通Postman接口測試&#xff0c;全套項目實戰教程&#xff01;&#xff01;接口測試區別于傳統意義上的系統測試&#xff0c;下面介紹接口測試用例和接口測試報告。 二、接口測試用例模板 功能測試用例最重要的兩個因素是測試步驟和預期結果&#xff0c;接口測試…

linux查看kafka的消費組里是否有積壓

flink消費數據時&#xff0c;有時候需要在頁面展示的數據&#xff0c;不能實時展示。那就需要查看下&#xff0c;kafka的消費組里是否有數據積壓了。flink的任務flink的消費情況kafka中的信息總結可以看出來&#xff0c;kafka的消費組里的數據&#xff0c;已經實時的消費完了。…

【Unity筆記】Unity 音游模板與免費資源:高效構建節奏游戲開發全指南

Unity 音游模板與免費資源&#xff1a;高效構建節奏游戲開發全指南 文章摘要&#xff1a; 本文為Unity開發者提供一套針對下落式與軌道式音樂游戲的實用模板工程與免費資源指南&#xff0c;內容涵蓋項目目錄結構、核心功能模塊、視覺特效與音效素材、開源腳本框架及輔助打譜工具…

【RabbitMQ】高級特性—持久性、重試機制詳解

持久性 我們在前面說了消息端處理消息時&#xff0c;消息如何不丟失&#xff0c;但是如何保證當 RabbitMQ 服務器停掉之后&#xff0c;生產者發送的消息不丟失呢&#xff1f; 默認情況下&#xff0c;RabbitMQ 退出或者由于某種原因崩潰時&#xff0c;會忽視隊列和消息&#xff…

零基礎人工智能學習規劃之路

一、引言&#xff1a;為什么選擇人工智能&#xff1f;人工智能&#xff08;AI&#xff09;是當前科技領域最炙手可熱的方向之一&#xff0c;涵蓋機器學習、深度學習、計算機視覺、自然語言處理等多個分支。無論是就業市場的高需求&#xff0c;還是技術改變生活的潛力&#xff0…

【科研繪圖系列】R語言繪制誤差棒圖

文章目錄 介紹 加載R包 數據下載 導入數據 數據預處理 畫圖 系統信息 參考 介紹 【科研繪圖系列】R語言繪制誤差棒圖 加載R包 library(tidyverse) library(ggplot2) library(ggsignif) library(RColorBrewer) library(waterfalls) library(reshape2