在ros上使用mrpt icp slam

2021-09-02 05:50:20 字數 1352 閱讀 9510

該slam演算法通過使用icp演算法將新範圍掃瞄與點點或占用網格圖對齊來逐步建立地圖。

icp演算法 根據點集p1中的點座標,在曲面s上搜尋相應最近點點集p2; 計算兩個點集的重心位置座標,並進行點集中心化生成新的兩個點集; 由新的兩個點集計算矩陣w=∑ni=1qiq′ti,並對這個矩陣進行分解為w=u∑vt,r=u∗vt. 得到旋轉矩陣和平移矩陣rt,就可以計算點集p2進行剛體變換之後的新點集p3,由計算p2到p3的距離平方和,以連續兩次距離平方和之差絕對值,作為是否收斂的依據。若小於閾值,就收斂,停止迭代。重複計算,直到收斂或達到既定的迭代次數。   

我最近手裡面只有一台雷射雷達,於是就嘗試了使用mrpt_icp_slam_2d在ros上進行建圖.

首先需要轉殖pkg到自己的工作空間, git clone

這個包下面有非常多的使用mrpt庫的slam方法,今天主要介紹graph slam,其他的使用方法請看我其他部落格.

接下來就是編譯了,我習慣用catkin_make --only-pkg-with-deps這個命令編譯,方便定位package可能出現的error. 

它的移植是非常簡單的,只需要修改frame id和sensor source,然後刪除有關bag的語句(我們不跑資料集)就可以了.

但是這個包有個問題是,在rviz下laserscan常常會讀取不到資料,這一點很不穩定. 我仔細看了一下,最後通過tf_monitor定位到問題在於map的頻率非常之高,會導致tf變換的時候出現問題. 但這不影響建圖.充其量只是在rviz上看不到雷射資訊而已.

我對比了一下其他的slam,發覺只有icp_slam的頻率如此之高,也就不去管了.

可以從上圖看出,其實效果也不差,幾乎是沒有散射的.這個slam方式是基於大量點座標匹配渲染而成的,也就是說,建立地圖時需要在空間當中來回走,才能夠給予它足夠數量的有效點,我走的回合不多,就可以看到辦公室裡一些地方都有丟失,沒有去做匹配.

ROS教程(二十二) ROS在多機械人上的使用

description 本教程將展示如何在兩台機器上使用ros系統,詳述了使用 ros master uri 來配置多台機器使用同乙個master。tutorial level intermediate next tutorial 自定義訊息型別 目錄 概述跨機器執行的 talker listene...

在ubuntu16 04上安裝ros

1.新增映象源 sudo sh c etc lsb release echo deb distrib codename main etc apt sources.list.d ros latest.list 2.新增key sudo apt key adv keyserver hkp recv ke...

在ROS中使用nodelet

nodelet的作用 減少在ros中傳遞資料的延遲。在同乙個程序內,執行多個node,通過指標傳遞資料,使得程序內訊息傳遞時不產生複製成本。下面是乙個使用nodelet原始檔的例子 namespace nodelet tutorial math private virtual void oninit...