0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于激光雷達(dá)傳感器如何投影成二維圖像

新機(jī)器視覺 ? 來源:CSDN技術(shù)社區(qū) ? 作者:W_Tortoise ? 2021-04-03 09:58 ? 次閱讀

“前視圖”投影

為了將激光雷達(dá)傳感器的“前視圖”展平為2D圖像,必須將3D空間中的點(diǎn)投影到可以展開的圓柱形表面上,以形成平面。

2a6759e6-8e94-11eb-8b86-12bb97331649.png

2a9336d8-8e94-11eb-8b86-12bb97331649.png

問題在于這樣做會將圖像的接縫直接放在汽車的右側(cè)。將接縫定位在汽車的最后部更有意義,因此前部和側(cè)部更重要的區(qū)域是不間斷的。讓這些重要區(qū)域不間斷將使卷積神經(jīng)網(wǎng)絡(luò)更容易識別那些重要區(qū)域中的整個對象。

以下代碼解決了這個問題。

沿每個軸配置刻度

變量h r e s h_{res}和v r e s v_{res}非常依賴于所使用的LIDAR傳感器。在KTTI數(shù)據(jù)集中,使用的傳感器是Velodyne HDL 64E。根據(jù)Velodyne HDL 64E的規(guī)格表,它具有以下重要特征:

垂直視野為26.9度,分辨率為0.4度,垂直視野被分為傳感器上方+2度,傳感器下方-24.9度

360度的水平視野,分辨率為0.08-0.35(取決于旋轉(zhuǎn)速度)

旋轉(zhuǎn)速率可以選擇在5-20Hz之間

可以按以下方式更新代碼:

然而,這導(dǎo)致大約一半的點(diǎn)在x軸負(fù)方向上,并且大多數(shù)在y軸負(fù)方向上。為了投影到2D圖像,需要將最小值設(shè)置為(0,0),所以需要做一些改變:

繪制二維圖像

將3D點(diǎn)投影到2D坐標(biāo)點(diǎn),最小值為(0,0),可以將這些點(diǎn)數(shù)據(jù)繪制成2D圖像。

完整代碼

把上面所有的代碼放在一個函數(shù)中。

def lidar_to_2d_front_view(points, v_res, h_res, v_fov, val=“depth”, cmap=“jet”, saveto=None, y_fudge=0.0 ): “”“ Takes points in 3D space from LIDAR data and projects them to a 2D ”front view“ image, and saves that image.

Args: points: (np array) The numpy array containing the lidar points. The shape should be Nx4 - Where N is the number of points, and - each point is specified by 4 values (x, y, z, reflectance) v_res: (float) vertical resolution of the lidar sensor used. h_res: (float) horizontal resolution of the lidar sensor used. v_fov: (tuple of two floats) (minimum_negative_angle, max_positive_angle) val: (str) What value to use to encode the points that get plotted. One of {”depth“, ”height“, ”reflectance“} cmap: (str) Color map to use to color code the `val` values. NOTE: Must be a value accepted by matplotlib‘s scatter function Examples: ”jet“, ”gray“ saveto: (str or None) If a string is provided, it saves the image as this filename. If None, then it just shows the image. y_fudge: (float) A hacky fudge factor to use if the theoretical calculations of vertical range do not match the actual data.

For a Velodyne HDL 64E, set this value to 5. ”“”

# DUMMY PROOFING assert len(v_fov) ==2, “v_fov must be list/tuple of length 2” assert v_fov[0] 《= 0, “first element in v_fov must be 0 or negative” assert val in {“depth”, “height”, “reflectance”}, ’val must be one of {“depth”, “height”, “reflectance”}‘

x_lidar = points[:, 0] y_lidar = points[:, 1] z_lidar = points[:, 2] r_lidar = points[:, 3] # Reflectance # Distance relative to origin when looked from top d_lidar = np.sqrt(x_lidar ** 2 + y_lidar ** 2) # Absolute distance relative to origin # d_lidar = np.sqrt(x_lidar ** 2 + y_lidar ** 2, z_lidar ** 2)

v_fov_total = -v_fov[0] + v_fov[1]

# Convert to Radians v_res_rad = v_res * (np.pi/180) h_res_rad = h_res * (np.pi/180)

# PROJECT INTO IMAGE COORDINATES x_img = np.arctan2(-y_lidar, x_lidar)/ h_res_rad y_img = np.arctan2(z_lidar, d_lidar)/ v_res_rad

# SHIFT COORDINATES TO MAKE 0,0 THE MINIMUM x_min = -360.0 / h_res / 2 # Theoretical min x value based on sensor specs x_img -= x_min # Shift x_max = 360.0 / h_res # Theoretical max x value after shifting

y_min = v_fov[0] / v_res # theoretical min y value based on sensor specs y_img -= y_min # Shift y_max = v_fov_total / v_res # Theoretical max x value after shifting

y_max += y_fudge # Fudge factor if the calculations based on # spec sheet do not match the range of # angles collected by in the data.

# WHAT DATA TO USE TO ENCODE THE VALUE FOR EACH PIXEL if val == “reflectance”: pixel_values = r_lidar elif val == “height”: pixel_values = z_lidar else: pixel_values = -d_lidar

# PLOT THE IMAGE cmap = “jet” # Color map to use dpi = 100 # Image resolution fig, ax = plt.subplots(figsize=(x_max/dpi, y_max/dpi), dpi=dpi) ax.scatter(x_img,y_img, s=1, c=pixel_values, linewidths=0, alpha=1, cmap=cmap) ax.set_axis_bgcolor((0, 0, 0)) # Set regions with no points to black ax.axis(’scaled‘) # {equal, scaled} ax.xaxis.set_visible(False) # Do not draw axis tick marks ax.yaxis.set_visible(False) # Do not draw axis tick marks plt.xlim([0, x_max]) # prevent drawing empty space outside of horizontal FOV plt.ylim([0, y_max]) # prevent drawing empty space outside of vertical FOV

if saveto is not None: fig.savefig(saveto, dpi=dpi, bbox_inches=’tight‘, pad_inches=0.0) else: fig.show()

以下是一些用例:

import matplotlib.pyplot as pltimport numpy as np

HRES = 0.35 # horizontal resolution (assuming 20Hz setting)VRES = 0.4 # vertical resVFOV = (-24.9, 2.0) # Field of view (-ve, +ve) along vertical axisY_FUDGE = 5 # y fudge factor for velodyne HDL 64E

lidar_to_2d_front_view(lidar, v_res=VRES, h_res=HRES, v_fov=VFOV, val=“depth”, saveto=“/tmp/lidar_depth.png”, y_fudge=Y_FUDGE)

lidar_to_2d_front_view(lidar, v_res=VRES, h_res=HRES, v_fov=VFOV, val=“height”, saveto=“/tmp/lidar_height.png”, y_fudge=Y_FUDGE)

lidar_to_2d_front_view(lidar, v_res=VRES, h_res=HRES, v_fov=VFOV, val=“reflectance”, saveto=“/tmp/lidar_reflectance.png”, y_fudge=Y_FUDGE)

產(chǎn)生以下三個圖像:

Depth

2ac4628a-8e94-11eb-8b86-12bb97331649.png

Height

2afb4796-8e94-11eb-8b86-12bb97331649.png

Reflectance

2b4c7080-8e94-11eb-8b86-12bb97331649.png

后續(xù)操作步驟

目前創(chuàng)建每個圖像非常慢,可能是因為matplotlib,它不能很好地處理大量的散點(diǎn)。

因此需要創(chuàng)建一個使用numpy或PIL的實現(xiàn)。

測試

需要安裝python-pcl,加載PCD文件。

sudo apt-get install python-pip

sudo apt-get install python-dev

sudo pip install Cython==0.25.2

sudo pip install numpy

sudo apt-get install git

git clone https://github.com/strawlab/python-pcl.git

cd python-pcl/

python setup.py build_ext -i

python setup.py install

可惜,sudo pip install Cython==0.25.2這步報錯:

Cannot uninstall ‘Cython’。 It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.”

換個方法,安裝pypcd:

pip install pypcd

查看 https://pypi.org/project/pypcd/ ,用例如下:

Example-------

。. code:: python

import pypcd# also can read from file handles.pc = pypcd.PointCloud.from_path(’foo.pcd‘)# pc.pc_data has the data as a structured array# pc.fields, pc.count, etc have the metadata

# center the x fieldpc.pc_data[’x‘] -= pc.pc_data[’x‘].mean()

# save as binary compressedpc.save_pcd(’bar.pcd‘, compression=’binary_compressed‘)

測試數(shù)據(jù)結(jié)構(gòu):

“ 》》》 lidar = pypcd.PointCloud.from_path(‘~/pointcloud-processing/000000.pcd’)

》》》 lidar.pc_data

array([(18.323999404907227, 0.04899999871850014, 0.8289999961853027, 0.0),

(18.3439998626709, 0.10599999874830246, 0.8289999961853027, 0.0),

(51.29899978637695, 0.5049999952316284, 1.944000005722046, 0.0),

…,

(3.7139999866485596, -1.3910000324249268, -1.7330000400543213, 0.4099999964237213),

(3.9670000076293945, -1.4739999771118164, -1.8569999933242798, 0.0),

(0.0, 0.0, 0.0, 0.0)],

dtype=[(‘x’, ‘《f4’), (‘y’, ‘《f4’), (‘z’, ‘《f4’), (‘intensity’, ‘《f4’)])

》》》 lidar.pc_data[‘x’]

array([ 18.3239994 , 18.34399986, 51.29899979, …, 3.71399999,

3.96700001, 0. ], dtype=float32) ”

加載PCD:

import pypcd

lidar = pypcd.PointCloud.from_path(’000000.pcd‘)

x_lidar:

x_lidar = points[’x‘]

結(jié)果:

Depth

2bc5c4ee-8e94-11eb-8b86-12bb97331649.png

Height

2c287c7e-8e94-11eb-8b86-12bb97331649.png

Reflectance

2c7f18cc-8e94-11eb-8b86-12bb97331649.png

編輯:lyn

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2551

    文章

    51168

    瀏覽量

    754177
  • 投影
    +關(guān)注

    關(guān)注

    0

    文章

    143

    瀏覽量

    24710
  • 激光雷達(dá)
    +關(guān)注

    關(guān)注

    968

    文章

    3981

    瀏覽量

    190021

原文標(biāo)題:點(diǎn)云處理——將激光雷達(dá)數(shù)據(jù)投影到二維圖像

文章出處:【微信號:vision263com,微信公眾號:新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    激光雷達(dá)在SLAM算法中的應(yīng)用綜述

    SLAM算法運(yùn)行的重要傳感器?;?b class='flag-5'>激光雷達(dá)的SLAM算法,對激光雷達(dá)SLAM總體框架進(jìn)行介紹,詳細(xì)闡述前端里程計、后端優(yōu)化、回環(huán)檢測、地圖構(gòu)建模塊的作用并總結(jié)所使用的算法;按由2D到 3D,單
    的頭像 發(fā)表于 11-12 10:30 ?689次閱讀
    <b class='flag-5'>激光雷達(dá)</b>在SLAM算法中的應(yīng)用綜述

    激光雷達(dá)技術(shù)的基于深度學(xué)習(xí)的進(jìn)步

    空間信息。這使得激光雷達(dá)在自動駕駛、無人機(jī)、機(jī)器人等領(lǐng)域具有廣泛的應(yīng)用前景。 、深度學(xué)習(xí)技術(shù)的發(fā)展 深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個分支,它通過模擬人腦的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)來處理和分析數(shù)據(jù)。近年來,深度學(xué)習(xí)技術(shù)在圖像識別、語音
    的頭像 發(fā)表于 10-27 10:57 ?417次閱讀

    激光雷達(dá)與其他傳感器的比較

    在現(xiàn)代科技領(lǐng)域,傳感器技術(shù)的發(fā)展日新月異,為各行各業(yè)提供了強(qiáng)大的數(shù)據(jù)支持。激光雷達(dá)作為一種高精度的遙感技術(shù),近年來在多個領(lǐng)域得到了廣泛應(yīng)用。然而,激光雷達(dá)并非萬能,它與其他傳感器相比,
    的頭像 發(fā)表于 10-27 10:41 ?668次閱讀

    agv叉車激光導(dǎo)航和二維碼導(dǎo)航有什么區(qū)別?適用什么場景?選哪種比較好?

    無人叉車激光導(dǎo)航和二維碼導(dǎo)航在多個方面存在顯著差異,以下是它們的主要區(qū)別: 一、原理不同 激光導(dǎo)航:利用激光雷達(dá)掃描地面環(huán)境,實時獲取機(jī)器人當(dāng)前位置和周圍環(huán)境信息,然后根據(jù)事先建立的地
    的頭像 發(fā)表于 10-15 17:45 ?328次閱讀
    agv叉車<b class='flag-5'>激光</b>導(dǎo)航和<b class='flag-5'>二維</b>碼導(dǎo)航有什么區(qū)別?適用什么場景?選哪種比較好?

    二維傳感器怎么安裝,在安裝二維傳感器的安裝步驟

    二維傳感器是一種精密的測量設(shè)備,用于檢測物體在平面內(nèi)的力和力矩。為了確保其測量結(jié)果的準(zhǔn)確性和穩(wěn)定性,正確的安裝步驟至關(guān)重要。本文將詳細(xì)介紹二維傳感器的安裝方法。
    的頭像 發(fā)表于 09-27 17:14 ?338次閱讀
    <b class='flag-5'>二維</b>力<b class='flag-5'>傳感器</b>怎么安裝,在安裝<b class='flag-5'>二維</b>力<b class='flag-5'>傳感器</b>的安裝步驟

    半導(dǎo)體激光雷達(dá)傳感器件產(chǎn)業(yè)化項目落地德州

    協(xié)議,雙方將投資建設(shè)半導(dǎo)體激光雷達(dá)傳感器件產(chǎn)業(yè)化項目,引進(jìn)激光雷達(dá)、半導(dǎo)體激光器、光收發(fā)器件等自動化生產(chǎn)、檢測及輔助系統(tǒng)等設(shè)備,主要產(chǎn)品為激光雷達(dá)
    的頭像 發(fā)表于 06-04 09:48 ?1.8w次閱讀

    森思泰克全新推出96線激光雷達(dá)和192線激光雷達(dá)產(chǎn)品

    傳感器融合方案是智能駕駛感知技術(shù)的必然趨勢。它以攝像頭、毫米波雷達(dá)、超聲波雷達(dá)以及激光雷達(dá)等多種傳感器協(xié)同配合來感知外界信息。
    的頭像 發(fā)表于 05-28 10:03 ?1756次閱讀
    森思泰克全新推出96線<b class='flag-5'>激光雷達(dá)</b>和192線<b class='flag-5'>激光雷達(dá)</b>產(chǎn)品

    瑞識科技推出用于激光雷達(dá)二維可尋址VCSEL芯片并獲量產(chǎn)訂單

    隨著汽車智能化和自動駕駛技術(shù)的快速發(fā)展,車載激光雷達(dá)市場近年呈現(xiàn)出高速增長的態(tài)勢。近日,瑞識科技推出新款二維可尋址激光雷達(dá)VCSEL芯片,可應(yīng)用于搭載固態(tài)激光雷達(dá)的智駕方案,以實現(xiàn)更高
    的頭像 發(fā)表于 04-01 11:16 ?870次閱讀
    瑞識科技推出用于<b class='flag-5'>激光雷達(dá)</b>的<b class='flag-5'>二維</b>可尋址VCSEL芯片并獲量產(chǎn)訂單

    Phlux推出一種新型傳感器以進(jìn)軍汽車激光雷達(dá)(LiDAR)市場

    英國初創(chuàng)公司Phlux Technology(以下簡稱“Phlux”)正致力于通過一種新型傳感器進(jìn)軍汽車激光雷達(dá)(LiDAR)市場,并籌集項目資金。Phlux計劃成為“激光雷達(dá)(LiDAR)中的英偉達(dá)(Nvidia)”。
    的頭像 發(fā)表于 03-18 09:20 ?1123次閱讀

    華為詳細(xì)解讀激光雷達(dá)

    來源:華為智能汽車解決方案,謝謝 編輯:感知芯視界 Link 激光雷達(dá)(LiDAR)作為智能駕駛系統(tǒng)的核心傳感器,其三環(huán)境重建能力為車輛提供了豐富而精確的環(huán)境信息,主動發(fā)光,不受黑夜光照條件
    的頭像 發(fā)表于 03-15 10:19 ?659次閱讀

    車載激光雷達(dá)到底安不安全?

    激光雷達(dá)(LiDAR)作為智能駕駛系統(tǒng)的核心傳感器,其三環(huán)境重建能力為車輛提供了豐富而精確的環(huán)境信息,主動發(fā)光,不受黑夜光照條件影響的特性
    的頭像 發(fā)表于 03-08 09:41 ?2560次閱讀
    車載<b class='flag-5'>激光雷達(dá)</b>到底安不安全?

    SolidVue為激光雷達(dá)傳感器設(shè)計SoC,可評估周圍物體的形狀和距離

    據(jù)麥姆斯咨詢報道,韓國目前唯一一家專門從事CMOS激光雷達(dá)(LiDAR)傳感器芯片開發(fā)的廠商SolidVue近期宣布其兩篇激光雷達(dá)相關(guān)論文被“2024年國際固態(tài)電路會議(ISSCC)”接收,這再次證明了SolidVue全球領(lǐng)先的
    的頭像 發(fā)表于 02-28 09:56 ?838次閱讀

    現(xiàn)代汽車和起亞汽車宣布開發(fā)片上激光雷達(dá)傳感器

    2月21日,現(xiàn)代汽車公司和起亞汽車公司宣布,他們將與韓國頂尖大學(xué)KAIST(韓國科學(xué)技術(shù)院)合作,在韓國大田KAIST總部建立“現(xiàn)代汽車集團(tuán)-KAIST片上激光雷達(dá)聯(lián)合實驗室”,開發(fā)用于高級自動駕駛汽車的激光雷達(dá)(LiDAR)傳感器
    的頭像 發(fā)表于 02-23 09:36 ?669次閱讀
    現(xiàn)代汽車和起亞汽車宣布開發(fā)片上<b class='flag-5'>激光雷達(dá)</b><b class='flag-5'>傳感器</b>

    華為激光雷達(dá)參數(shù)怎么設(shè)置

    華為激光雷達(dá)是一種常用的傳感器技術(shù),可用于距離測量和感應(yīng)。它的參數(shù)設(shè)置對于確保其性能和功能至關(guān)重要。在本文中,我們將詳細(xì)介紹華為激光雷達(dá)的參數(shù)設(shè)置以及其影響和應(yīng)用。 首先,我們需要了解激光雷達(dá)
    的頭像 發(fā)表于 01-19 14:17 ?1820次閱讀

    偏振成像激光雷達(dá)與短波紅外復(fù)合光學(xué)接收系統(tǒng)設(shè)計與分析介紹

    成像激光雷達(dá)因具備主動照明、角度分辨率高、可探測距離信息等優(yōu)勢,被視為是被動遙感和微波雷達(dá)后的下一代技術(shù)產(chǎn)品,與傳統(tǒng)被動傳感器成像及微波雷達(dá)
    的頭像 發(fā)表于 01-05 10:29 ?1603次閱讀
    偏振成像<b class='flag-5'>激光雷達(dá)</b>與短波紅外復(fù)合光學(xué)接收系統(tǒng)設(shè)計與分析介紹