以下內容為本人的學習筆記,如需要轉載,請宣告原文鏈接 微信公眾號「englyf」https://mp.weixin.qq.com/s/APaJheSbgTW3jNssWsp5Ng
地圖資料來源于機器人演算法模塊,一般通過SLAM演算法完成建圖的程序,

建圖程序中,基礎資料涉及到各種實時的傳感器,比如陀螺儀、激光雷達、線激光等等,這些傳感器并不都是需要的,而是按照實際設計方案要求添加,比如目前市面上的那些掃地機器人里,廉價的最多只用了陀螺儀,主流的用了激光雷達,高檔新潮的可能還加上線激光來達到宣稱的三維建圖,甚至有的還宣稱用了攝像頭達到AI識別障礙物,
why & what ?
內容
地圖資料里邊一般會包含解析度,長寬方向的點數和每個點的位置特征,解析度用來表明每個點占據多大空間,代表著物理世界位置的尺寸單元,點的位置特征,通常表示為點的型別,用來分辨每個點代表什么東西,比如這個點是障礙物,懸空點或者正常的可通行位置,
地圖里也會包含其它的一些位置資訊,比如充電樁的坐標等,現在的自主式移動機器人都是使用電池供電的,因此充電樁也需要配套有,
其它需要包含的資訊視乎需求而定,
資料量
由于地圖資料包含了每個點的特征,因此資料量的總大小視乎地圖的面積大小,面積越大地圖資料也會越大,
既然地圖資料大,那么就有必要在同步之前對資料進行壓縮了,一般業內都采用LZ4的格式來壓縮地圖資料,
關于LZ4,看看官方的介紹
LZ4 is lossless compression algorithm, providing compression speed > 500 MB/s per core (>0.15 Bytes/cycle). It features an extremely fast decoder, with speed in multiple GB/s per core (~1 Byte/cycle). LZ4 library is provided as open source software using a BSD license.
https://lz4.github.io/lz4/
意思就是LZ4壓縮和解壓的速度非常快,而且是無損壓縮哦,壓縮每秒可以去到500MB,解壓每秒可以去到GB等級,用來處理一般的地圖資料而言,綽綽有余了,LZ4源代碼工程遵循BSD授權,所以是免費使用的,
分類
外部節點需要做的事情無非就是提供個可視化的界面給用戶,用戶再從中了解接收到地圖的相關資訊,重點是看得到的地圖資訊,那么,演算法模塊產生的地圖資料就可以劃分為兩部分,一部分是只包含了圖形化的資訊(方便繪制地圖),另一部分就包含了演算法重定位的資訊,
how ?
為了分離資料與外部節點的同步程序,地圖資料的外發需要交給一個單獨的模塊處理,這里使用網路代理模塊來稱呼,
1.實時地圖更新上傳
自主移動式機器人在移動程序中,根據傳感器的實時資料,演算法模塊生成地圖資料,然后傳遞給網路代理模塊,網路代理模塊負責實時發往手機app等用戶終端程式,
由于資料量大,如果資料經過任何第三方轉發,比如IOT云,勢必會擠占IOT云的帶寬,導致IOT云的負擔過重,所以這種大資料的傳輸只會從點到點,也就是我們常常用到的P2P傳輸方法,

地圖資料在壓縮后通常使用檔案的形式來暫存,傳輸也以檔案為單位把內容發送出去,
雖然地圖資料走P2P的通道傳送,但是傳送的資料量畢竟比較大,一直傳輸地圖資料會占用大量的本地帶寬,而且接收端還得不斷更新和對比接收到的資料,如果用戶端在某些時段壓根就不想要接收地圖資料,比如使用的手機app頁面切換到了和地圖無關的設定界面,app這時就不需要接收任何的地圖資料和浪費算力在這些無用的資料上面,
那么,可以通過設計一套心跳機制,只要app在一定的時間范圍內有下發心跳包給到機器,機器的網路代理模塊就知道在什么時候需要上傳地圖資料,

這種思路不會影響到演算法模塊對地圖資料的生成,
2.云端多地圖
有些用戶希望可以在不同的地方,比如不同的樓層各有一份地圖,并且保存下來方便在終端app隨時呼叫,這就引出了對多地圖的管理需求,
無論是云端還是本地,地圖存在哪里都是可以的,不過,由于嵌入式的片內或者板上存盤資源比較緊張,機器在本地一般只會存一份當前的臨時地圖資料檔案,而其它的地圖資料需要存放在云端,然后通過終端app呼叫管理,
鑒于有多份地圖,那么終端app怎么區分哪一份云端地圖和機器當前地圖是對應的呢?這就需要在地圖資料中引入地圖ID的資訊,這個ID由機器自分配和云端無關,
云端管理多地圖,包括保存、洗掉、切換等,
保存
將機器本地中的當前地圖,以檔案的形式上傳到云端,上傳的目的地址URL由云端分配,上傳的資料包括圖形化的地圖資料以及用于地圖重定位的資訊,共兩份,
但是,如果機器建圖還沒完成就觸發了保存到云端,這樣豈不是不合理?所以又有必要在地圖資料中引入一個量來表示地圖是否穩定,終端app可以根據這個量來判斷是否允許保存到云端,
洗掉
洗掉保存在云端的地圖資料,操作程序僅涉及云端,無需機器參與,
切換
通過下發指定的云端地圖URL給到機器,由機器自主下載使用,由于云端保存的地圖資料有兩部分,機器其實只需要用到地圖重地位的資訊,那么下發的URL也只需指向用于地圖重定位的資料檔案即可,
其實,上面的內容也適合掃地機之外的移動機器人,關于地圖還有很多可以聊,不過暫時聊到這,下次見...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/525978.html
標籤:其他
上一篇:演算法題--從尾到頭列印鏈表
