自定義srv訊息之ros

2021-10-07 23:10:35 字數 3161 閱讀 6699

在ros中,如果沒有現成的訊息型別來描述要去傳遞的訊息時,我們會自定義訊息。

我們會新建乙個package來去自定義訊息,通常這個package寫任何的業務邏輯,只是用來宣告自定義的訊息型別,可以只定義一種訊息型別,也可以定義多種訊息型別,根據業務需求來定。

所以,首先我們單獨的建立乙個package,我們取名為demo_srvs,一定要要新增roscpprospyrosmsg的依賴。

這個包名取名也是有講究的,業務名_srvs

在pakage目錄下新建srv目錄,刪除掉includesrc目錄

建立的這個numoption.srv檔案就是自定義訊息檔案,需要去描述訊息的格式。

我們可以編輯**如下

float64 a

float64 b

string option

---float64 result

這個.srv檔案以---分隔為兩部分,上面一部分包含aboption,下面一部分包含乙個result.

在這裡,上面部分是request的資料,下面部分是response的資料。

此案例中,我們要去做的就是,傳送request,例如,a=3b=3option=*,那麼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++的標頭檔案

來到develinclude目錄下,如果生成了標頭檔案說明,自定義訊息建立成功。

python的py檔案

來到devellib/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,...