国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

在 ROS 中使用 Protobuf 替代 ros msg

Cobub / 2122人閱讀

摘要:在擁有更好的擴展性的同時,還能給對數據進行壓縮,減少的體積。然而,的要求必須使用標準的,并不是很方便換成。如果將轉成放在特定的中的話,則又失去了的類型信息。使用時,只要即可,完全符合的推薦使用方式。

Background

做 ROS 相關開發的,應該都知道 ros msg 有個非常大的槽點:

ros msg 擴展性較差,即如果 msg 的字段發生變化,則程序前后版本不兼容

因此,google 的 protobuf 相對就是一個更好的選擇。在擁有更好的擴展性的同時,還能給對數據進行壓縮,減少 rosbag 的體積。

然而,ROS 的 topic 要求必須使用標準的 ros message,并不是很方便換成 protobuf。如果將 protobuf 轉成 str 放在特定的 ros msg 中的話,則又失去了 msg 的類型信息。

在各種嘗試下,我找了一種更好的方法,將 msg 替換成 protobuf,同時與 ROS 盡可能的兼容。

注意:本文只探討 python 環境下的實現,c++ 版的實現由于是其他同事做的,因此不在本文的探討范圍內。

Solution 1. 通過 catkin_make 自動生成 protobuf 對應的代碼

可以利用 catkin 的 add_custom_command, 來自動生成代碼。這樣會自動 install 到相應的目錄。使用時,只要 source setup.bash 即可,完全符合 ROS 的推薦使用方式。

# 只節選最核心的部分
set(proto_dir ${PROJECT_SOURCE_DIR})
file(GLOB proto_files "${proto_dir}/*.proto")
message(STATUS "Proto Source Dir: ${proto_dir}")
message(STATUS "Proto Source Files: ${proto_files}")

catkin_destinations()
# 設置生成目標代碼文件的路徑
set(proto_gen_py_dir ${CATKIN_DEVEL_PREFIX}/${CATKIN_PACKAGE_PYTHON_DESTINATION})
file(MAKE_DIRECTORY ${proto_gen_py_dir})
# 這步很重要,讓目標路徑變為 python 的 package
# 否則的話,會出現 import 異常
file(WRITE ${proto_gen_py_dir}/__init__.py)

# Create lists of files to be generated.
set(proto_gen_py_files "")
foreach(proto_file ${proto_files})
    get_filename_component(proto_name ${proto_file} NAME_WE)
    list(APPEND proto_gen_py_files ${proto_gen_py_dir}/${proto_name}_pb2.py)
endforeach(proto_file ${proto_files})
message(STATUS "Generated proto files: ${proto_gen_py_files}")

# Run protoc and generate language-specific headers.
add_custom_command(
    OUTPUT  ${proto_gen_py_files}
    COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} --proto_path=${proto_dir} --python_out=${proto_gen_py_dir}  ${proto_files}
    DEPENDS ${PROTOBUF_PROTOC_EXECUTABLE} ${proto_files}
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
set_source_files_properties(${proto_gen_py_files} PROPERTIES GENERATED TRUE)

# 將生成的 py 文件拷貝到 install 對應的路徑下
install(DIRECTORY ${proto_gen_py_dir}/
  DESTINATION ${CATKIN_PACKAGE_PYTHON_DESTINATION}
  FILES_MATCHING PATTERN "*.py"
)
2. 實現一個 Adapter 類,來實現標準的 ROS message

隨便找一個簡單的 ros msg 所生成的 python 對應的代碼,會發現其實主要做了以下幾件事:

繼承了 genpy.Message。在使用時會強制校驗是否是 genpy.Message 的子類

實現了 serialize 方法,對內容進行序列化

實現了 deserialize 方法,對內容進行反序列化

因此,我們只要按照這種標準的方式,將 protobuf 格式的消息進行序列化或反序列化即可

Summary Reference

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41190.html

相關文章

  • ROS之Turtlebot:(1)安裝

    摘要:當打開一個新的終端時,環境變量會自動生效。安裝如果你采用我這種方式安裝,那么會在安裝時自動安裝了。需要轉換一個規則,以致于能夠可靠的檢測到工廠快速芯片。規則安裝問題答疑 注意這里只給出我實驗的安裝方式,具體所有的安裝方式請查看:http://wiki.ros.org/turtlebot... 1、安裝 sudo apt-get install ros-indigo-turtlebot ...

    Berwin 評論0 收藏0
  • 實踐指南-快速解鎖Rancher v1.2

    摘要:引言已經發布,相信眾多容器江湖的伙伴們正魔拳擦準備好好體驗一番。為了更好的體驗的完整特性,我們選取了測試比較嚴格的運行環境。 引言 Rancher v1.2已經發布,相信眾多容器江湖的伙伴們正魔拳擦準備好好體驗一番。由于Docker能夠落地的操作系統眾多,各種Docker版本不同的Graph driver,所以通常大版本的第一個release都會在兼容性上有一些小問題。為了更好的體驗R...

    KavenFan 評論0 收藏0
  • 【物聯網】33.物聯網開發 - 機器人

    摘要:針對這點,人們將機器人需要的各類軟件要素總結在一起,開發出了專門用于機器人的中間件。的開端要追溯到世紀初于斯坦福大學進行的一個個人機器人項目。 機器人的結構 其中還包括一些機器人特有的構成要素,例如驅動器和用于驅動的電機驅動等??刂频膬热菀膊⒎菃渭兊男盘柨刂?,還需要實現運轉控制乃至圖像識別...

    olle 評論0 收藏0
  • sublime-text3和pycharm無法import-rospy等ros-Python庫

    (轉載請注明作者和出處:https://yangningbocn.github.io 未經允許請勿用于商業用途) 背景 筆記本型號:聯想Y500 CPU : Intel? Core? i7-3630QM CPU @ 2.40GHz × 8 內存:7.7 GiB 顯卡:GeForce GT 750M/PCIe/SSE2 系統版本:ubuntu 14.04 LTS 64bit 軟件:...

    My_Oh_My 評論0 收藏0

發表評論

0條評論

Cobub

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<