3D SLAM LeGo LOAM(2) 回環檢測

2021-10-08 16:01:20 字數 1494 閱讀 5734

lego-loam的回環檢測策略比較簡單,它同時對距離和時間作考量。

1.利用了pcl中基於半徑的近鄰搜尋演算法,以機械人當前位姿為搜尋點,查詢半徑為7m範圍內的若干個位姿;

2利用時間作為約束,如果歷史位姿對應時間與當前位姿對應時間的時間差太小,說明是個小回環,意義不大,作者在程式裡將時間差設定為大於30s。

下圖表述了兩種情況:

對應**也就是這一小段

// find the closest history key frame

std::vector<

int> pointsearchindloop;

std::vector<

float

> pointsearchsqdisloop;

kdtreehistorykeyposes-

>

setinputcloud

(cloudkeyposes3d)

;//構建位姿的kdtree

//查詢點為機械人的當前位姿、歷史關鍵幀搜尋半徑、查詢到的位姿索引,查詢到的位姿與機械人位姿之間的距離平方和

kdtreehistorykeyposes-

>

radiussearch

(currentrobotpospoint, historykeyframesearchradius, pointsearchindloop, pointsearchsqdisloop,0)

; closesthistoryframeid =-1

;for

(int i =

0; i < pointsearchindloop.

size()

;++i)

//遍歷查詢到的若干個位姿}if

(closesthistoryframeid ==-1

)//在指定的半徑內,沒有找到對應的位姿,結束;

拓展:關於pcl中關於radiussearch用法

// neighbors within radius search

std::vector<

int> pointidxradiussearch;

std::vector<

float

> pointradiussquareddistance;

float radius =7;

if(kdtree.radiussearch (searchpoint, radius, pointidxradiussearch, pointradiussquareddistance)

>0)

另外關於這一塊裡面的資料流差點兒把我弄暈了,這裡貼個圖理解一下。

專案2 洗牌(3)

all right reserved.檔名稱 test.cpp 作 者 韓雙志 完成日期 2016年6月16日 版本號 v1.0 問題描述 在撲克牌遊戲中,每次遊戲開始都要求把54張牌重新排列一下,稱為洗牌。試編寫程式將一副撲克牌 用54個整數1 54表示 隨機洗好後,順序輸出54張牌的情況。隨機交...

3 無名管道2

1.無名管道的快取是由大小的,快取滿了,會出現寫阻塞。2.例項1,計算快取大小 include unistd.h include stdio.h include stdlib.h include string.h int main ret pipe fd if ret 0 printf creat ...

3 基礎語法(2)

if語句 a 天上掉錢 字串的真假 空字串即長度為0的字串 if a print 我就發財了 print 開葷 print 日子還得過呀 我就發財了 開葷日子還得過呀 if.else.語句 a 字串的真假 空字串即長度為0的字串 if a print 我就發財了 print 開葷 else prin...