在ros中,如果沒有現成的訊息型別來描述要去傳遞的訊息時,我們會自定義訊息。
我們會新建乙個package來去自定義訊息,通常這個package寫任何的業務邏輯,只是用來宣告自定義的訊息型別,可以只定義一種訊息型別,也可以定義多種訊息型別,根據業務需求來定。
所以,首先我們單獨的建立乙個package,我們取名為demo_srvs
,一定要要新增roscpp
,rospy
,rosmsg
的依賴。
這個包名取名也是有講究的,業務名_srvs
。
在pakage目錄下新建srv
目錄,刪除掉include
和src
目錄
建立的這個numoption.srv
檔案就是自定義訊息檔案,需要去描述訊息的格式。
我們可以編輯**如下
float64 a
float64 b
string option
---float64 result
這個.srv
檔案以---
分隔為兩部分,上面一部分包含a
,b
,option
,下面一部分包含乙個result
.
在這裡,上面部分是request
的資料,下面部分是response
的資料。
此案例中,我們要去做的就是,傳送request,例如,a=3
,b=3
,option=*
,那麼server端接收到資料後,做a option b
的操作,即3 * 3
,結果放到response中。
這個srv
檔案遵循一定規範的,每一行表示一種資料。前面是型別,後面是名稱。和msg的規範一致,更多型別參考附錄
在package.xml種新增如下配置:
tipmessage_generation
是訊息生成工具,在打包編譯時會用到
message_runtime
執行時訊息處理工具
在find_package
新增message_generation
,結果如下:
find_package(catkin required components
roscpp
rosmsg
rospy
message_generation
)
新增add_message_file
,結果如下:
add_service_files(
files
numoption.srv
)
tip
這裡的numoption.srv
要和你建立的srv檔名稱一致,且必須時在srv目錄下,否則編譯會出現問題
新增generation_msg
,結果如下:
generate_messages(
dependencies
std_msgs
)
tip
這個配置的作用是新增生成訊息的依賴,預設的時候要新增std_msgs
修改catkin_package
,結果如下:
catkin_package(
# include_dirs include
# libraries demo_msg
# catkin_depends roscpp rosmsg rospy
# depends system_lib
catkin_depends message_runtime
)
tip
為catkin編譯提供了依賴message_runtime
來到工作空間目錄下,執行編譯
catkin_make
c++的標頭檔案
來到devel
的include
目錄下,如果生成了標頭檔案說明,自定義訊息建立成功。
python的py檔案
來到devel
的lib/python2.7/dist-package
目錄下,檢視是否生成和package名稱相同的目錄,以及目錄內是否生成對應的py
檔案。
rossrv show demo_srvs/numoption
檢視執行結果,執行結果和自己定義的相一致,說明成功。
在開發過程種,自定義訊息是以乙個package存在的,其他package需要用到這個自定義訊息的package,是需要新增依賴的。
來到package.xml
中,新增如下:
demo_srvs
demo_srvs
demo_srvs
來到cmakelists.txt
檔案中,找到find_package
,新增demo_msgs
自定義訊息依賴,新增結果如下:
find_package(catkin required components
roscpp
rosmsg
rospy
demo_srvs
)
#include "demo_srvs/numoption.h"
tip
訊息依賴加入後,具體型別是demo_srvs::numoption
from demo_srvs.srv import numoption
tip
python匯入自定義訊息模組,遵循一定的規範,from 模組名.srv import 具體的訊息
ROS學習之自定義srv型別
1.建立srv檔案 cd catkin ws src my package mkdir srv echo int64 a int64 b int64 sum srv addtwoints.srv 2.更改cmakelist.txt檔案 更改find package 函式 在cmakelist.txt...
ros編寫自定義的服務( srv)
1 編寫自定義的服務檔案 即.srv 檔案。2 儲存,catkin make編譯,要生成可以被 include 包 addtwoints.h 注意cmakelist.txt檔案的配置 cmake minimum required version 2.8.3 project learing commu...
ROS 自定義訊息型別方法
1 在package中新建資料夾名為msg 2 在msg資料夾中建立訊息 此處以my msg.msg 為例,注意的是要以msg為字尾名 內容舉例如下 int32 data1 float64 data2關於訊息內容,需要注意的是如果型別錯誤,那麼將不能生成標頭檔案。例如float64寫成了float,...