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

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

發布時間: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環境中傳遞矩陣和圖像數據。下一章將帶你探索更多高級話題。

閱讀全文

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

熱點內容
分析大數據如何催化電商企業 瀏覽:854
微信顏值小程序是什麼 瀏覽:913
a2技術怎麼樣 瀏覽:777
如何面試資料庫工程師 瀏覽:510
借款信息多久消除 瀏覽:738
如何處罰代理記賬從業人員 瀏覽:410
股票與期貨哪個交易手續費高 瀏覽:465
什麼數據網路 瀏覽:933
單元格數據如何全部替換 瀏覽:843
曲筱綃代理什麼品牌 瀏覽:27
黃石經濟技術開發區哪些公司好 瀏覽:615
如何從事金融交易 瀏覽:980
愛一茶代理商怎麼樣 瀏覽:709
交易貓租完號錢多久到賬 瀏覽:767
如何快速找到自己電腦里的資料庫 瀏覽:650
強拆什麼程序 瀏覽:442
上海薺菜批發市場有哪些 瀏覽:128
菜市場買魚怎麼做 瀏覽:532
微信如何編輯用戶信息 瀏覽:539
搜集數據用什麼方法 瀏覽:446