二维与三维之间的桥梁——点云
在做圖像配準時就聽聞過一些點云的方法,卻沒對其有太多的認識,只是知道點云point cloud顧名思義就是一些離散點的集合?,F在在無人駕駛中一些激光雷達的作用其實就是生成點云數據,接下來介紹一下點云數據的含義和基礎的使用方法。
雖然特斯拉是堅定的純視覺自動駕駛路線的支持者,但其實更多的無人駕駛公司同時還會使用激光雷達LiDAR。經常見到無人駕駛的車頂會有一個旋轉的圓柱體,其實就是機械式激光雷達,通過旋轉鏡面將激光反射到不同角度,得到360度的數據:
雷達有很多種,激光雷達只是其實一種,它的全稱是light detection and ranging,就是使用激光進行探測和測距。
先來講測距的原理。
因為同時有發射器和接收器,而光速是已知的,所以很明顯可以利用波束傳播的時間來得到距離。那么怎么得到傳播時間呢?一個方法就大名鼎鼎的TOF,time of fly,又叫做光束法。這種方法依靠物體的漫反射,對脈沖寬度和接收器時間分辨率要求高,所以總體效果一般。第二種方法是相位法phase difference,這是一種相對的方法:不是發射一束而是成周期地發射,所以回波會產生相位差,從而可以估計傳播時間。
除了基于時間段測距,還有基于幾何的測距。三角測量法triangulation principle利用了三角形相似原理。
探測是基于測距的,目的是得到物體的三維坐標。以什么坐標系?
得到三維坐標及每個點對應的反射強度就構成了點云數據。接下來看一下真實的點云數據是什么樣子。從阿波羅項目頁可以下載到一些點云數據。這里百度提供了兩種數據格式:一種是.pcd,一種是.bin文件。.pcd是PCL庫官方指定的格式,每一個.pcd文件都會有一個文件頭,就和Opencv中的Mat一樣,會有一個數據頭去描述這個點云圖的一些基礎信息:
# .PCD v0.7 - Point Cloud Data file format VERSION 0.7 #指定PCD文件版本 FIELDS x y z intensity timestamp #指定一個點可以有的每一個維度和字段的名字 SIZE 4 4 4 1 8 #用字節數指定每一個維度的大小 TYPE F F F U F #一個字符指定每一個維度的類型,F是浮點 COUNT 1 1 1 1 1 #每一個維度包含的元素數目,一般都是1,但是描述子可能是128 WIDTH 101045 #無序點云的數目或者有序點云一行的數目 HEIGHT 1 #無序點云時設置為1,有序時表示一列的數目 VIEWPOINT 0 0 0 1 0 0 0 #視點信息被指定為三維平移+ 四元數,默認值為0001000 POINTS 101045 #指定點云中點的總數 DATA binary_compressed #指定存儲點云數據的數據類型:ASCII或者Bin,bin更快速按道理它就是一個文本,但是直接以文本打開的話除了剛才講到的文件頭,其余數據都是亂碼,python中使用utf-8和ISO-8859-1和rb都無法看到正常的點坐標。所以兜兜轉轉半天,還是通過安裝第三方庫輕松解決。
import open3d as o3d print("Load a ply point cloud, print it, and render it") pcd = o3d.io.read_point_cloud("20期.pcd") print(pcd) print(o3d.np.asarray(pcd.points)) o3d.visualization.draw_geometries([pcd])可以得到坐標及可視化結果:
[[ -8.39819813 ?-5.66665173 ?-0.9710691 ]
?[ -8.13930702 ?-5.81639719 ?-0.9073652 ]
?[-22.42602539 -21.35739517 ? 0.32076412]
?...
?[ -6.15335035 ?-5.64766216 ?-1.15699255]
?[ -6.67443991 ?-5.32205296 ?-1.74743378]
?[ -6.31309557 ?-5.57189178 ?-1.63395274]]
也可以安裝PCL,似乎需要自己編譯,暫未實現。
Reference:
1.https://www.zhihu.com/question/418827194/answer/1451606698
2.旋轉https://baijiahao.baidu.com/s?id=1695602953340739196&wfr=spider&for=pc
3.readhttps://www.cnblogs.com/zyber/p/9578240.html
4.格式https://blog.csdn.net/weixin_46098577/article/details/111594733
5安裝pclhttps://blog.csdn.net/McEason/article/details/105195285
總結
以上是生活随笔為你收集整理的二维与三维之间的桥梁——点云的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【每日SQL打卡】
- 下一篇: cocos2dx实现经典飞机大战