導航:首頁 > 源碼編譯 > ros導航演算法

ros導航演算法

發布時間:2023-03-16 11:18:41

A. ROS(機器人操作系統)

現在還只是個草稿,後面會陸續更新改正,保證大家一看就會,絕對不廢

只是幫助大家理解,很多知識點只是類比推理,是有錯誤的,哈哈,勿噴

蠻多人在學習ROS的時候,其實還是不太理解什麼是ROS,為什麼要去ROS,以及怎麼樣去學習ROS,我大二的時候開始接觸到ROS,也經歷過比較痛苦的一段時間,所以希望用這篇文章來幫助大家對ROS有一個較好的理解。

首先我們拋開ROS來說,如果我們要寫一個程序,程序需要完成特定的功能,就拿C語言中的加法函數來說吧。我們定義了一個加法函數,輸入兩個整數最後返回兩個整數的和,然後定義完函數以後,在main()函數里調用這個加法函數,就可以在鍵盤上輸入兩個整數,然後計算兩個整數的和了。

那麼問題來了   如果我要在別的程序需要使用加法函數所返回的值,應該怎麼做呢?

一種方式  定義一個全局變數,將加法函數返回的值賦給這個全局變數,那麼在一個工程文件下的程序都可以使用這個全局變數了,這就達到了其他程序使用這個變數的目的了

那麼問題又來了,如果不是在同一個工程目錄下的程序,要怎麼樣才能使用到這個加法函數的返回值呢?

一種方式  將第一個程序的加法返回值寫到一個文檔中,然後其他程序去讀這個文件,這樣也可以達到使用這個數據的目的了

上面的例子,想給大家傳遞的知識點就是  我們在寫程序的時候,大多數人是只有一個main()函數的,也就是只有一個可執行文件,那麼問題就來了,要是不同的main()函數之間需要相互使用對方的數據,那應該怎麼辦呢,這就引申出了程序與程序之間到交流問題,也就是通信問題。這也是ROS裡面我個人覺得必須首先要搞清楚的問題。大家先理解到這個地方,然後往下看。

開始進入主題  到底什麼是ROS,ROS就是Robot Operating System 的縮寫,這大家都知道,對吧,翻譯成中文也就是機器人操作系統,可是除了這個大家對操作系統是什麼大家有了解過么,為什麼需要操作系統,也就是操作系統能幹什麼,大家有簡單的了解過么

操作系統(先空白,後面再填坑)

在了解操作系統以後,我們就可以開始分析我們的機器人操作系統了,話不多說,先放狗,不不不,先放圖:

我們知道,操作系統本身也是一個軟體,但是他的特殊之處在於能夠完成對硬體的調配,而其他的應用軟體,比如網易雲,他如果想放歌,他需要打開播放器,是得需要操作系統去完成的,它本身沒有這個能力去直接打開播放器,而是對操作系統說,大哥,能不能幫我打開一下播放器,求求你了,哈哈。

我們也知道,在win上安裝了許許多多的軟體,向上面的solidworks(三維制圖軟體),matalab(數據計算軟體) QQ(聊天軟體)   網易雲 (聽歌軟體) 騰訊視頻(播放軟體)......

那麼問題又來了  你能讓你的扣扣去跟網易雲說  我想聽歌,然後網易雲就會打開播放么,當然你要是杠桿定理學得好,那我認了,哈哈,大多數人是應該是覺得這應該不可以,因為扣扣怎麼跟網易雲通信嘛,對吧。

所以我們安裝在win上的各個軟體只負責自己的問題,不會跟其他的軟體有過多的交流。

哈哈,所以我有了一個大膽的想法,讓我的電腦同時登錄3個扣扣,那麼這三個扣扣總該可以相互發消息了吧,沒錯,這就是我想要講的東西,我只在我的電腦上安裝三個軟體 也就是3個扣扣軟體,他們肯定是可以相互交流的。因為他們是同一類軟體。

是的,ROS也是這么乾的,在ROS上也安裝了向扣扣這樣的可執行程序,只不過在ROS中換了個說法,可執行程序叫做節點,這應該不拿理解吧。要記住在ROS上安裝了許許多多的軟體哦,也就是許許多多的可執行程序,也就是許許多多的節點,如果你現在理解了節點是什麼了,那麼恭喜你,已經邁出了一小步了,你說巧不巧,安裝在ROS上的這些程序,它還可以相互通信,也就是相互交流,哈哈。

好了,理解到這一步呢就理解了節點是個什麼東西了。

下面又開始了一個新的例子,我們的手機上有一個扣扣,我們需要和其他人聊天對吧,那麼你知道你要和別人聊天需要先做什麼么,你肯定說,登錄賬號加好友啊,不對的,首先要做的就是把騰訊的伺服器打開,不然你登錄不上去的,也就是說,騰訊的伺服器不打開,你是登錄不上扣扣的,只不過這一步不是我們操作的,人家的伺服器他已經給我門打開了,然後我們再登錄扣扣,想一下,我們在登錄的時候,做了什麼,對吧,大家都知道,我們也就是輸入賬號密碼就可以登錄了吧對吧,這個過程呢就是向騰訊的伺服器注冊自己的信息,告訴騰訊伺服器,我上線了,然後騰訊伺服器就把你加入到注冊表中,裡麵包含了你的一些信息,你想要和別人連天,那麼別人是不是也要跟你一樣,也要先登錄,過程和你的一樣,所以這個時候,騰訊伺服器那邊是已經有了你和你想要聊天的對象的一些信息的,比如ip地址之類的東西,這樣,你想發消息給你的朋友(後面再填坑)

類比一下 伺服器 就相當於ROS裡面的ros master

只不過這個rosmaster需要我們自己開啟而已。

事實上,ros並不是一個操作系統,他並不能直接運行在硬體之上,只不過他把硬體做了一個給操作系統的介面  和網易雲一樣   網易雲大不了就使用一個喇叭唄,只不過ros使用了太多的硬體,比如激光雷達,相機,編碼器,imu等等。

因此ROS本身也就是一個軟體,和qq一樣,運行在操作系統之上,所不同的是,在ROS上又可以安裝許許多多的同類軟體,這些安裝在ROS上的程序(節點)之間可以按照ROS所規定的通訊機制進行相互交流通訊。比如激光雷達節點(程序)通過ROS提供的介面,讓操作系統把激光數據傳上來,交給建圖所需要的Gmapping節點使用,然後Gmaping節點把所構建的地圖給move_base節點使用,move_base節點的輸入是一個速度和角度的命令,先由move_base下發給ros,然後ros下發給操作系統,然後操作系統調用硬體,在這里是電機,讓電機按照ROS下發的速度的角速度進行運動.

大家應該會有一點點理解了吧

總結下  就是ros是一個類似於win上的一個軟體,但是這個軟體上又安裝了很多軟體,在ros上安裝的這些軟體可以相互通信,然後可以藉助ROS,去調用操作系統去調用硬體。

這就是為什麼我們每次想要聊天的時候,需要先打開qq這個軟體,也就是我們想要用ROS的時候,先運行roscore這個命令打開ROS了吧

接下來是 

ros中的通訊方式

ros中的一些工具

ros中的一些已經有了的功能包(演算法

慢慢寫,不著急

B. 激光雷達SLAM演算法

機器人研究的問題包含許許多多的領域,我們常見的幾個研究的問題包括:建圖(Mapping)、定位(Localization)和路徑規劃(Path Planning),如果機器人帶有機械臂,那麼運動規劃(Motion Planning)也是重要的一個環節,SLAM需要機器人在未知的環境中逐步建立起地圖,然後根據地區確定自身位置,從而進一步定位。

ROS系統通常由大量節點組成,其中任何一個節點均可以通過發布/訂閱的方式與其他節點進行通信。舉例來說,機器人上的一個位置感測器如雷達單元就可以作為ROS的一個節點,雷達單元可以以信息流的方式發布雷達獲得的信息,發布的信息可以被其他節點如導航單元、路徑規劃單元獲得。

ROS的通信機制:

ROS(機器人操作系統)中SLAM的一些功能包,也就是一些常用的SLAM演算法,例如Gmapping、Karto、Hector、Cartographer等演算法。我們不會去關注演算法背後的數學原理,而是更注重工程實現上的方法,告訴你SLAM演算法包是如何工作的,怎樣快速的搭建起SLAM演算法。

地圖 : ROS中的地圖很好理解,就是一張普通的灰度圖像,通常為pgm格式。這張圖像上的黑色像素表示障礙物,白色像素表示可行區域,灰色是未探索的區域

地圖在ROS中是以Topic的形式維護和呈現的,這個Topic名稱就叫做 /map ,由於 /map 中實際上存儲的是一張圖片,為了減少不必要的開銷,這個Topic往往採用鎖存(latched)的方式來發布。地圖如果沒有更新,就維持著上次發布的內容不變,此時如果有新的訂閱者訂閱消息,這時只會收到一個 /map 的消息,也就是上次發布的消息;只有地圖更新了(比如SLAM又建出來新的地圖),這時 /map 才會發布新的內容。 這種方式非常適合變動較慢、相對固定的數據(例如地圖),然後只發布一次,相比於同樣的消息不定的發布,鎖存的方式既可以減少通信中對帶寬的佔用,也可以減少消息資源維護的開銷。

Gmapping ,Gmapping演算法是目前基於激光雷達和里程計方案裡面比較可靠和成熟的一個演算法,它基於粒子濾波,採用RBPF的方法效果穩定,許多基於ROS的機器人都跑的是gmapping_slam。

gmapping的作用是根據激光雷達和里程計(Odometry)的信息,對環境地圖進行構建,並且對自身狀態進行估計。因此它得輸入應當包括激光雷達和里程計的數據,而輸出應當有自身位置和地圖。

論文支撐:R-LINS: A Robocentric Lidar-Inertial State Estimator for Robust and Efficient Navigation

6軸 IMU:高頻,聚焦自身運動,不採集外界環境數據
3D LiDAR:低頻,聚焦車體運動,採集外界環境數據

R-LINS使用以上兩種感測器來估計機器人的運動姿態, 對於任一感測器而言,單獨的依靠自己的數據是很難實現地圖構建的, 比如純雷達模型使用的感測器是激光雷達,可以很好的探測到外界的環境信息。但是,同樣的,也會受到這些信息的干擾,再長時間的運算中會產生一定的累計誤差。為了防止這種誤差干擾到後續的地圖構建中,需要使用另一種感測器來矯正機器人自身的位姿信息, 即IMU感測器,IMU感測器由於是自身運動估計的感測器,所以,採集的都是自身運動的姿態信息。可以很好的矯正激光雷達里程計的位姿信息。所以,通常使用激光雷達和慣導來進行數據融合,實現姿態信息的矯正。

一共分為三大塊:

閱讀全文

與ros導航演算法相關的資料

熱點內容
pdf數字不顯示 瀏覽:888
convertwordtopdf 瀏覽:251
程序編譯基本單位 瀏覽:21
python分析圖片角度 瀏覽:60
阿里雲伺服器能復制數據嗎 瀏覽:560
python拼音轉換文字 瀏覽:563
動畫遺傳演算法 瀏覽:63
php如何解析xml文件 瀏覽:702
如何改變appstore的語言 瀏覽:462
javahtmlxml 瀏覽:34
單片機啟動文件 瀏覽:811
橙app如何開啟聊天 瀏覽:899
訪問伺服器公網地址 瀏覽:666
pdf列印底色去掉 瀏覽:463
java快遞介面 瀏覽:397
哪個app可以教新爸爸 瀏覽:210
如何查看伺服器系統版本信息 瀏覽:524
成都市土地出讓金演算法 瀏覽:704
鋼筋加密標記 瀏覽:578
ps中擴展功能在文件夾的什麼位置 瀏覽:905