導航:首頁 > 數據處理 > 如何定義一個消息數據結構

如何定義一個消息數據結構

發布時間:2024-12-30 08:59:09

A. 一文讀懂——Protobuf

快速理解Protocol Buffers


Protocol Buffers(簡稱Protobuf),是Google為內部通信和數據存儲設計的一種高效輕量級的數據結構格式。全球已有超過48,162種報文格式定義和12,183個.proto文件應用於RPC系統和持久化存儲。它的優勢在於結構化數據的序列化與跨語言、平台的兼容性,適用於即時通訊和數據存儲等領域。


與XML和JSON相比,Protobuf體積更小,解析速度更快,特別適合像即時通訊這樣對數據傳輸效率要求高的場景。它的核心特性體現在簡化了服務端開發:服務端間通信只需關注介面方法(service)和參數(message),無需關注底層協議和欄位解析,大大降低了開發成本。


在Proto3版本中,相較於Proto2,語法更為簡潔,例如移除了"required"和"optional"等復雜的規則,強調約定而非語法。Proto3的repeated標量數值類型默認為packed編碼,而Proto2默認非packed,同時增加了Go、Ruby、JavaNano等更多語言支持。


定義數據結構時,Protobuf提供一套基礎數據類型,每個欄位都有唯一編號,用於二進制標識。雖然編號范圍廣,但要避免使用19000~19999的預留區間。為了優化編碼後的數據大小,高頻率的欄位建議使用1~15范圍的編號,但需留有擴展空間。


Proto3中repeated欄位的規則有所變化,而Proto2中的可擴展欄位規定有所不同。在編寫消息類型時,可以在一個.proto文件中定義多個相關消息,方便擴展和組織。


添加註釋支持C/C++風格,通過預留欄位處理更新後的兼容性問題。默認值根據欄位類型設定,如字元串、布爾值等。在枚舉定義上,需確保第一個枚舉值為0且無重復,除非啟用別名選項。


使用.proto文件定義的數據結構需通過protoc編譯器生成介面代碼,以支持序列化和反序列化。然而,使用CMake的execute_process命令可能存在重新生成源碼導致頻繁編譯的問題。


實例演示包括定義.proto文件、編寫讀寫函數以及配置文件的使用,展示了如何在實際項目中應用Protocol Buffers。更多詳細信息,請參考官方文檔。

B. Windows上玩轉ROS(二)想要傳遞一個矩陣,多維數組或者圖像試試std_msgs包或者自定義消息

上一章概述了在Windows上使用ROS的基本流程,但留有疑問——如何處理復雜的數據類型,如矩陣或自定義數據結構。本文將著重介紹std_msgs包和自定義消息的使用方法。

如果你的發布者需要傳輸的數據類型暫時未知,不必急於自定義消息。std_msgs包內已經提供了豐富的內置數據類型,如一維的int16數組。首先,確保你熟悉這些已有的選項,如在ROS wiki中查看它們的列表:

通過std_msgs傳遞一維數組的示例,例如在C++中:

cpp
// 在message/src目錄下創建pub_array.cpp
// 使用array_pool話題發布int16數組

Python同樣支持,例如:

python
// 在message/scripts中編寫pub_array.py
// 使用array_pool發布一維數組

對於圖像的傳遞,盡管std_msgs並非專門設計用於高效圖像處理,但可以作為傳遞二維數組的起點。例如,用opencv處理圖像並發布到image_pool。

自定義消息則允許你創建完全符合特定需求的數據結構。首先,創建一個msg文件夾並定義消息格式,如:

markdown
// 在msg文件中定義自定義圖像消息

然後在C++和Python中使用這些自定義消息,如在C++中:

cpp
// 在pub_image2.cpp中使用自定義圖像消息

Python同樣支持,但需要注意解碼比特流問題:

python
// 在pub_image2.py中使用自定義圖像消息

結論是,std_msgs提供了基本的數據類型支持,而自定義消息則允許處理復雜數據。通過這兩個工具,你已經能夠有效地在Windows上的ROS環境中傳遞矩陣和圖像數據。下一章將帶你探索更多高級話題。

閱讀全文

與如何定義一個消息數據結構相關的資料

熱點內容
ppt怎麼做數據表格 瀏覽:904
股市數字貨幣怎麼交易 瀏覽:402
現在還有什麼可以代理的 瀏覽:672
車貸分期公司怎麼可以代理 瀏覽:423
NBA2k20手游怎麼交易安東尼 瀏覽:907
北京拍攝什麼市場大 瀏覽:108
鋁壓鑄模生產的產品怎麼有氣孔 瀏覽:940
學習中醫推拿技術哪個好 瀏覽:278
德陽市公共資源交易中心在哪裡 瀏覽:668
小米雲盤信息怎麼刪除 瀏覽:4
怎麼做自運轉產品 瀏覽:875
滬深市場動力煤股票有哪些 瀏覽:524
生物大數據挖掘用什麼語言 瀏覽:304
產品為什麼要按照班產量做 瀏覽:900
哪些學校文科生可以報航海技術 瀏覽:767
安徽省立醫院的就診信息會保留多久 瀏覽:198
應用層數據流向哪裡 瀏覽:170
如何辦理兵役登記社保卡信息採集 瀏覽:555
怎麼轉移相片數據到另一方手機 瀏覽:681
什麼東西屬於農產品 瀏覽:672