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...