自動駕駛中的坐標系概念及相互間的轉換公式推導
在自動駕駛系統中,多個坐標系用于描述車輛、傳感器和環境的相對位置。這些坐標系之間的轉換是實現定位、感知和控制的關鍵。下面我將逐步解釋常見坐標系的概念,并推導相互轉換的公式。推導基于標準幾何變換和齊次坐標表示,確保公式正確可靠。
一、坐標系概念
在自動駕駛中,主要涉及以下坐標系:
- 世界坐標系(World Coordinate System):全局坐標系,固定在地球上(如基于GPS或地圖),原點通常為固定參考點(如起點)。用于描述車輛和環境在全局中的位置。
- 車輛坐標系(Vehicle Coordinate System):以車輛為中心,原點通常在車輛重心或后軸中心。xxx軸指向車輛前進方向,yyy軸指向左側,zzz軸向上。用于描述車輛自身狀態。
- 傳感器坐標系(Sensor Coordinate System):以傳感器(如激光雷達、攝像頭)為中心,原點在傳感器安裝點。每個傳感器有自己的坐標系,用于描述傳感器測量數據。
- 相機坐標系(Camera Coordinate System):針對攝像頭,原點在相機光心,zzz軸沿光軸方向,xxx軸和yyy軸平行于圖像平面。用于描述點在相機空間的位置。
- 像素坐標系(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?)通過標定獲得,可能涉及優化算法(如最小二乘法)減少誤差。
- 應用:這些轉換用于傳感器融合(如融合攝像頭和激光雷達數據)、路徑規劃等。確保轉換鏈一致,避免累積誤差。
這個推導基于標準幾何原理,在自動駕駛系統中廣泛應用。如果您有具體場景(如特定傳感器類型),我可以進一步細化推導。