日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(五)carla中世界坐标系与相机坐标系、像素坐标系变换

發(fā)布時(shí)間:2023/12/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (五)carla中世界坐标系与相机坐标系、像素坐标系变换 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

(五)carla中世界坐標(biāo)系與相機(jī)坐標(biāo)系、像素坐標(biāo)系變換

由于實(shí)驗(yàn)需要將 carlacarlacarla 中世界坐標(biāo)系下的坐標(biāo)點(diǎn)畫到相機(jī)采集的前視圖上,故需要進(jìn)行坐標(biāo)系之間的轉(zhuǎn)換。

轉(zhuǎn)換中遇到的問題

參考這篇博客中給出的方法: link


發(fā)現(xiàn)將世界坐標(biāo)系轉(zhuǎn)到像素坐標(biāo)系下顯示的不對(duì)。因此仔細(xì)從頭到尾仔細(xì)分析一下,原來是 carlacarlacarlaget_transform().get_matrix()get\_transform().get\_matrix()get_transform().get_matrix() 函數(shù)的問題。具體解釋如下。

轉(zhuǎn)換過程

1.世界坐標(biāo)系到相機(jī)坐標(biāo)系

首先,車輛在 carlacarlacarla 中運(yùn)行時(shí)可以獲取實(shí)時(shí)的世界坐標(biāo),例如下圖所示 locationlocationlocation 中的 x,yx,yx,y 坐標(biāo)。
獲取方式為:

#創(chuàng)建了一輛車my_vehicle t = my_vehicle.get_transform() global_location_x = t.location.x global_location_y = t.location.y global_location_z = t.location.z global_rotation_yaw = t.rotation.yaw global_rotation_pitch = t.rotation.pitch global_rotation_roll = t.rotation.roll


獲取到世界坐標(biāo)系后,首先需要轉(zhuǎn)到相機(jī)坐標(biāo)系下。
這篇博客 link 中說相機(jī)的外參矩陣直接可以通過下方函數(shù)來獲得。

camera.get_transform().get_matrix()

但是,經(jīng)過測試發(fā)現(xiàn)不是。
carlacarlacarla 官方文檔:

文檔中說 transformtransformtransform 計(jì)算以當(dāng)前點(diǎn)為原點(diǎn)的坐標(biāo)系 AAA 與世界坐標(biāo)系 BBB 之間的變換。

get_matrix()get\_matrix()get_matrix() 函數(shù)獲取從當(dāng)前點(diǎn)為原點(diǎn)的坐標(biāo)系 AAA 到世界坐標(biāo)系 BBB 之間的變換矩陣。
重點(diǎn): 但是,get_matrix()get\_matrix()get_matrix() 默認(rèn)相機(jī)位置為原點(diǎn)的這個(gè)坐標(biāo)系的 x,y,zx,y,zx,y,z 軸與世界坐標(biāo)系的 x,y,zx,y,zx,y,z 軸是相同方向的,沒有考慮軸旋轉(zhuǎn)。
而實(shí)際上,相機(jī)坐標(biāo)系是相機(jī)的正前方,光心方向總是 zzz 軸方向。

世界坐標(biāo)系是這樣的:


這兩個(gè)坐標(biāo)系軸的關(guān)系存在一個(gè)旋轉(zhuǎn)矩陣。
camera.get_transform().get_matrix()camera.get\_transform().get\_matrix()camera.get_transform().get_matrix() 獲得的是不考慮軸旋轉(zhuǎn)的局部到全局的變換矩陣。
camera.get_transform().get_matrix()camera.get\_transform().get\_matrix()camera.get_transform().get_matrix() 獲得的矩陣取逆得到的是不考慮軸旋轉(zhuǎn)的全局到局部的變換矩陣。
而世界坐標(biāo)系到相機(jī)局部坐標(biāo)系考慮軸旋轉(zhuǎn)關(guān)系的對(duì)應(yīng)矩陣為:
[010001100]\left[ \begin{matrix} 0 & 1 & 0\\ 0 & 0 & 1\\ 1 & 0& 0 \end{matrix} \right] ???001?100?010????
因此將 camera.get_transform().get_matrix()camera.get\_transform().get\_matrix()camera.get_transform().get_matrix() 獲得的矩陣取逆再乘以世界坐標(biāo)系軸與相機(jī)坐標(biāo)系軸之間的旋轉(zhuǎn)矩陣,就真正得到世界坐標(biāo)系到相機(jī)坐標(biāo)系的變換矩陣。
得到變換矩陣 RRR 后,假設(shè)世界坐標(biāo)系下點(diǎn)的坐標(biāo)是 Pw=(xw,yw,zw)TP_{w} = (x_{w},y_{w},z_{w})^TPw?=(xw?,yw?,zw?)T
Pc=R.PwP_{c} = R.P_{w} Pc?=R.Pw?
注:如果使用上面世界坐標(biāo)系到相機(jī)局部坐標(biāo)系考慮軸旋轉(zhuǎn)關(guān)系的對(duì)應(yīng)矩陣發(fā)現(xiàn)效果不對(duì)時(shí),可能是由于光軸是朝向相機(jī)正后方。

世界坐標(biāo)系到相機(jī)局部坐標(biāo)系考慮軸旋轉(zhuǎn)關(guān)系的對(duì)應(yīng)矩陣為:
[0?10001?100]\left[ \begin{matrix} 0 & -1 & 0\\ 0 & 0 & 1\\ -1 & 0 & 0 \end{matrix} \right] ???00?1??100?010????

2.相機(jī)坐標(biāo)系到像素坐標(biāo)系

參考這篇博客鏈接 link

參考這篇博客 link

carlacarlacarla 中沒有找到內(nèi)參獲取函數(shù),但是根據(jù)上述兩篇博客中的解釋,內(nèi)參可以估計(jì)得到。
在參考文檔中 Sensorsrefernece/RGBcamera/AdvancedcameraattributesSensors\;\;refernece/RGB\;\;camera/Advanced camera attributesSensorsrefernece/RGBcamera/Advancedcameraattributes 中,可以得到相機(jī)的焦距。

光心一般是相機(jī)采集圖片的中心。根據(jù)這些信息可以估計(jì)出相機(jī)內(nèi)參。
假設(shè)相機(jī)坐標(biāo)系下點(diǎn)的坐標(biāo)是 Pc=(xc,yc,zc)TP_{c} = (x_{c},y_{c},z_{c})^TPc?=(xc?,yc?,zc?)T,相機(jī)內(nèi)參是 KKK
Pp=K.PcP_{p} = K.P_{c} Pp?=K.Pc?

轉(zhuǎn)換效果

首先記錄車輛行駛過程中的軌跡點(diǎn),然后將當(dāng)前位置后20幀車輛的世界坐標(biāo)系下坐標(biāo)轉(zhuǎn)化到當(dāng)前圖像坐標(biāo)系下,轉(zhuǎn)換結(jié)果如下:

程序后續(xù)整理上傳到我的 githubgithubgithub 中。

總結(jié)

以上是生活随笔為你收集整理的(五)carla中世界坐标系与相机坐标系、像素坐标系变换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。