除了直線,在雷射雷達獲取的資料中,最重要的就是圓弧了,圓弧的位置確定本生沒有直線的精度高,
因此不適合用作定位的基準,但是機械人在執行動作時,需要確定圓弧的位置,或則根據圓弧確定目標是
什麼或者目標的位置。
圓弧的檢測包括圓弧的位置(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 等領域 而機械人領域的雷射雷達相對來說售價更低,國內思嵐科技及玩智商等企業已低至上百元。目前在用的就是思...
固態雷射雷達
與傳統機械掃瞄技術的雷達相比,利用光學相控陣掃瞄技術的固態雷射雷達有很多優勢 結構簡單 尺寸小 由於不需要旋轉部件,可以大大壓縮雷達的結構和尺寸,提高使用壽命,並降低成本。標定簡單 機械式雷射雷達由於光學結構固定,適配不同車輛往往需要精密調節其位置和角度,固態雷射雷達可以通過軟體進行調節,大大降低了...