雷射雷達學習筆記(五)圓弧

2021-08-19 21:21:37 字數 1782 閱讀 6101

除了直線,在雷射雷達獲取的資料中,最重要的就是圓弧了,圓弧的位置確定本生沒有直線的精度高,

因此不適合用作定位的基準,但是機械人在執行動作時,需要確定圓弧的位置,或則根據圓弧確定目標是

什麼或者目標的位置。

圓弧的檢測包括圓弧的位置(x,y)和大小r,常用的方法包括hough變換和最小二乘法擬合。

一般圓弧位置檢測的精度比較低,不能作為定位的標準,不過可以確定機械人和目標之間的位置。

1、hough變換

圓弧檢測之前都需要對資料進行分割,將一系列的點分割成不同的區域,然後計算圓弧的位置。hough變換

不需要知道某區域是否有圓弧,以類似於投票的機制,某引數獲得的票數越多,則存在圓弧的可能性越大,

大於某閾值時,則可以認為該處存在圓弧。

x - a = r*cos(theta)

y - b = r*sin(theta)

對於每乙個點x y,有無數個點滿足上式,即有無數個圓在經過該點的,每個圓對應一組(a,b,r)引數,設立一

個票箱,裡面有所有可能的(a,b,r)引數,當某組引數出現一次,就將該票箱中的票數加1,所有的點都掃瞄之

後,檢視票箱,票數最多的點即是圓出現概率最大的情況。此時應該設定乙個閾值,如果最多的票數小於該閾值,

則認為不存在圓,否則認為有圓存在。

//這是乙個簡化的hough圓演算法,假設半徑已知的情況,如果想看完整的hough圓變換,檢視另一篇部落格:

[cpp] 

view plain

copy

inthougharc(

intx , 

inty , 

intcnt ,

intr, arcpara * arc)else

if(a 

if(b > maxb)  

else

if(b 

}  }  //確定a,b的範圍之後,即確定了票箱的大小

intascale = maxa - mina + 1;  

intbscale = maxb - minb + 1;  

int*votebox = 

newint

[ascale*bscale];  

//votebox初始化為0

for(

inti = 0; i 

//開始投票

for(

inti = 0; i 

}  //篩選票箱

intvotemax = 0;  

intvotemaxx,votemaxy;  

for(

inti = 0; i 

}  }  int

count = 0;  

printf("votemax: %d"

,votemax);  

for(

inti = 0; i 

}  }  printf("   %d \n"

,count);  

//釋放記憶體

2、最小二乘法擬合

最小二乘法擬合則需要先判定是否是圓弧,是圓弧才能進行擬合,否則擬合的結果肯定是不准的。

但是目前直線的判定可以通過多邊形擬合尋角點、擬合後看個點與直線距離等方法來判定,圓弧並沒有

很好的判定方法,起碼我目前是沒有發現的。

雷射雷達 什麼是雷射雷達?

toc 本文引用 雷射雷達和老式雷達對比 來至 雷達 radar 是無線電探測和測距,即用無線電發現目標,並測定他們的空間位置,也稱為 無線電定位 雷達是利用電磁波探測目標的電子裝置。雷達發射電磁波對目標進行照射,並接收其回波,從而獲得目標至電磁波發射點的距離 距離變化率 徑向速度 方位 高度等資訊...

雷射雷達(一) 知名雷射雷達公司

目前大部分企業都以無人車 機械人及無人車領域雷射雷達為主要研究方向。而傳統機械式雷射雷達已逐漸向固態雷射雷達方向轉變。在 方面,無人駕駛領域的雷射雷達少則上萬,多則幾十萬元,普遍要高於機械人及a 等領域 而機械人領域的雷射雷達相對來說售價更低,國內思嵐科技及玩智商等企業已低至上百元。目前在用的就是思...

固態雷射雷達

與傳統機械掃瞄技術的雷達相比,利用光學相控陣掃瞄技術的固態雷射雷達有很多優勢 結構簡單 尺寸小 由於不需要旋轉部件,可以大大壓縮雷達的結構和尺寸,提高使用壽命,並降低成本。標定簡單 機械式雷射雷達由於光學結構固定,適配不同車輛往往需要精密調節其位置和角度,固態雷射雷達可以通過軟體進行調節,大大降低了...