说明
自定义创建一个数组类型的消息,使用python创建ROS2节点,并将消息进行发布
参考链接:https://blog.csdn.net/qq_32618327/article/details/128793362
1.创建自定义消息
初始化工作空间
mkdir -p myros_ws/src
1.1 创建自定义消息
创建独立的功能包来保存自定义消息,自定义消息的说明如下:
- 发布的topic是一个包含了多个元素的数组,针对同一次输入有多个格式相同的输入(如同一张图像有多个目标检测结果)
- 每个数组元素包含多个数据类型
cd myros_ws/src
ros2 pkg create --build-type ament_cmake box_interfaces
cd box_interfaces/
mkdir msg && cd msg
touch Box3d.msg Box3dArray.msg
创建成功会有LOG打印:
将以下内容添加到对应的消息文件:
# Box3d.msg
是一个基础的检测框的信息,包括了检测目标的类别、得分、中心点位置、长宽高、yaw角等信息
# Box3d.msg
int8 class_id
float32 score
geometry_msgs/Point center
float32 dx
float32 dy
float32 dz
float32 yaw
Box3dArray.msg
是一个数组类消息,用于存放同一帧数据的多个检测结果,数组中的数据类型是上面定义的OBJBox3d
,数组的名词为obj_box3d_array
# Box3dArray.msg
std_msgs/Header header
Box3d[] obj_box3d_array
1.2 修改CMakeLists.txt和package.xml
在CMakeLists.txt
的 find dependencies
下添加相应的依赖和自定义消息目录
# find dependencies
find_package(ament_cmake REQUIRED)
find_package(geometry_msgs REQUIRED)
find_package(rosidl_default_generators REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/Box3d.msg"
"msg/Box3dArray.msg"
DEPENDENCIES geometry_msgs
)
在package.xml
中添加相应依赖
<buildtool_depend>rosidl_default_generators</buildtool_depend>
<member_of_group>rosidl_interface_packages</member_of_group>
<export>
<build_type>ament_cmake</build_type>
<depend>rclpy</depend>
<depend>std_msgs</depend>
<depend>geometry_msgs</depend>
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
</export>
2.创建发布者
2.1 创建发布者并编写发布节点