ROS2 C 自定義訊息型別

2021-10-11 15:26:22 字數 2686 閱讀 5591

首先注意一點,在ros 2 dashing發行版裡面,只有c++的功能包可以自定義訊息型別;也就是說,在建立包的時候,只有選擇 ament_cmake方式建立的包才可以自定義訊息,但是python型別的功能包可以匯入由c++型別包建立的自定義訊息。

進入工作空間

cd ~/ros_ws/src
建立功能包

ros2 pkg create --build-type ament_cmake test_msgs
由於這個功能包只是生成自定義訊息型別,所以我一般都是不在這裡新增任何演算法,所以這個包裡面也沒有可執行檔案,因此不需要指定節點名字。

cd test_msgs

mkdir msg

gedit testmsg.msg

testmsg.msg檔案內容如下:

float32 x

float32 y

注意事項:

testmsg.msg:檔名一定要以大寫開頭;

檔案中的變數一定全部都要小寫,不能有大寫出現;同時也不要出現特殊符號

在c++呼叫該標頭檔案時候,會以下劃線區分大寫,例如上面的檔案編譯得到後,在c++呼叫時如下:

#include 「test_msgs/msg/test_msg.hpp」
vector的定義是在資料型別後面增加乙個方括號[ ]

可以用自己定義的資料型別作為變數的資料型別,例如在另乙個msg檔案中定義這樣的乙個變數:

testmsg position
在find_package(ament_cmake required)下面新增:

find_package(builtin_inte***ces required)

find_package(geometry_msgs required)

find_package(rosidl_default_generators required)

find_package(std_msgs required)

set(msg_files

"msg/testmsg.msg"

)rosidl_generate_inte***ces($ $ dependencies builtin_inte***ces geometry_msgs std_msgs add_linter_tests)

ament_export_dependencies(rosidl_default_generators)

ament_export_dependencies(rosidl_default_runtime)

ament_export_include_directories(include)

由於介面依賴rosidl_default_generators來生成特定於語言的**,因此需要宣告對其的依賴。

在 ament_cmake下面新增:

>

rosidl_default_generatorsbuild_depend

>

>

rosidl_default_runtimeexec_depend

>

>

rosidl_inte***ce_packagesmember_of_group

>

cd

../../..

# 編譯

colcon build --packages-select test_msgs

# 新增環境

source install/setup.bash

# 檢視msg資料

ros2 msg show test_msgs/msg/testmsg

可以在終端看到我們定義的訊息型別

在package.xml裡新增

test_msgs
在原始檔裡新增

from test_msgs.msg import testmsg
使用的時候

msg = testmsg(

)1.0

)// 加入msg裡有signal這個訊息

在cmakelists.txt裡面新增

find_package(test_msgs required) # 根據你的名稱修改

ament_target_dependencies($_node std_msgs rclcpp test_msgs)

在package.xml裡面新增

>

test_msgsdepend

>

在原始檔中包含

特別注意,這裡的格式,訊息檔案是駝峰風格的命名方式,也就是通過大寫分割單詞,但是包含的時候要用下劃線風格,全部是小寫

#include

"test_msgs/msg/test_msg.hpp"

使用的時候

publisher =

this

->create_publisher

("test",10

);

ROS 自定義訊息型別 c

一 msg 用於發布 訂閱的通訊方式中。在包的src同級目錄下建立msg資料夾。在 sg資料夾中,建立.msg檔案 例 my msg.msg 編輯my msg.msg檔案 int32 data1 string data2 編輯package.xml 新增依賴 message generation m...

ROS 自定義訊息型別方法

1 在package中新建資料夾名為msg 2 在msg資料夾中建立訊息 此處以my msg.msg 為例,注意的是要以msg為字尾名 內容舉例如下 int32 data1 float64 data2關於訊息內容,需要注意的是如果型別錯誤,那麼將不能生成標頭檔案。例如float64寫成了float,...

自定義srv訊息之ros

在ros中,如果沒有現成的訊息型別來描述要去傳遞的訊息時,我們會自定義訊息。我們會新建乙個package來去自定義訊息,通常這個package寫任何的業務邏輯,只是用來宣告自定義的訊息型別,可以只定義一種訊息型別,也可以定義多種訊息型別,根據業務需求來定。所以,首先我們單獨的建立乙個package,...