您好,
会员登录 快速注册
退出 ( 条未读消息)
关于本站 意见反馈 首页

公告:小宅博客网可以开发票了,需要发票的,去群里找群主哈!!
全部文章分类
  • 人工智能 >

  • 编程语言 >

  • WPF系列 >

  • ASP.NET系列 >

  • Linux >

  • 数据库 >

  • 嵌入式 >

  • WEB技术 >

  • PLC系列 >

  • 微服务与框架 >

  • 小宅DIY >

  • 学习资料 >

OpenCv基础 ANN车牌识别 yolov5车牌识别 指针式仪表识别 ROS系列 YOLO Halcon Detectron2 昇腾AI ChatGPT在线体验 英伟达JETSON ChatGLM ChatTTS FunASR 地平线 ByteTrack 魔搭社区 LangChain
C C# C++ Python Java Go
WPF
ASP.NET小功能 GPS定位系统-MVC GPS定位系统-VUE ASP.NET WebRTC
Linux Linux内核 Shell MakeFile
MySql SqlServer Oracle
STM8 STM32 51单片机
VUE入门 HTML JavaScript CSS layui镜像网站 ElementUi中文官网 element-plus 图标
三菱 欧姆龙 西门子 施耐德 松下 台达
IOTSharp IOTGateway ABP FRAMEWORK Docker
亚克力音响 编程仙途:智驭万法
面试题与技巧 Python入门技能树 微软C#教程
首页 编程之美 工具下载 全国就业 流量地图 文心一言
ROS系列
ROS - 介绍 ROS1-常规安装方法 ROS1-Linux下的ROS环境搭建 ROS1-ROS话题:发布者 ROS1-发布者与订阅者通讯 ROS1-服务器与客户端节点通讯 ROS1-动作服务器与客户端通讯 ROS1-发布imu和gps消息 ROS2-新建Ubuntu环境 ROS2-创建一个简单节点 ROS2-Python之消息的发布与订阅 ROS2-C++之消息的发布与订阅 ROS2-调用USB免驱摄像头 ROS2-地瓜机器人笔记 ROS2 控制小车进行矩形运动 ROS2 设置节点开机自启 ROS2 添加自定义msg ROS2 URDF建模 ROS2 Gazebo 仿真环境搭建 ROS2 XACRO建模 ROS2 在Gazebo加载机器人模型 ROS2 Carttographer安装 ROS2 配置cartographer进行建图 ROS2 Nav2导航仿真-新建工程 ROS2 Nav2导航仿真 ROS2 Nav2 API导航
ROS2 设置节点开机自启
ROS2 URDF建模
激萌の小宅 小宅博客 ROS系列

文章作者:激萌の小宅

促销:¥0

价格:¥0

配送方式: 购买后立即生效(如购买异常,请联系站长)
付款之后一定要等待自动跳转结束,否则购买可能会失败
  • 0 天

    有效期

  • 0

    总销量

  • 0

    累计评价

ROS2 添加自定义msg

参考博客:https://blog.csdn.net/wei242425445/article/details/115278114


新建我们的消息包

colcon build --packages-select system_msg


删除include和src文件夹,然后新建个msg目录,创建两个消息包Yolo.msg和YoloArray.msg

微信截图_20250511132014.jpg


消息包命名规则:首字母必须大写,不然编译会报错。


Yolo.msg 内容如下:

string class_name
float32 conf
int32[4] box


YoloArray.msg 内容如下:

Yolo[] yolo_array


变量名命名规则:首字母必须小写,不然编译会报错。


然后在CMakeLists.txt文件中添加下面内容

find_package(rosidl_default_generators REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME}
  "msg/Yolo.msg"
  "msg/YoloArray.msg"
 )


如下:

微信截图_20250511132401.jpg


package.xml文件添加内容如下:

  <build_depend>rosidl_default_generators</build_depend>
  <exec_depend>rosidl_default_runtime</exec_depend>
  <member_of_group>rosidl_interface_packages</member_of_group>

如下:

微信截图_20250511132451.jpg


然后编译

ros2 pkg create --build-type ament_cmake system_msg

# 验证是否可用
ros2 interface show system_msg/msg/Yolo
ros2 interface show system_msg/msg/YoloArray


如下:

微信截图_20250511132709.jpg


验证代码如下:

import cv2 
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Image  
from system_msg.msg import Yolo, YoloArray
from cv_bridge import CvBridge, CvBridgeError  

class Subscriber(Node):
    def __init__(self):
        super().__init__("system_yolo_test")

        self.publisher_ = self.create_publisher(YoloArray, 'yolo_detections', 10)

        self.subscription = self.create_subscription(YoloArray, 'yolo_detections', self.listener_callback, 10)

        self.timer = self.create_timer(1.0, self.timer_callback)
 

    def timer_callback(self):
        msg = YoloArray()
        # 创建3个模拟检测结果
        for i in range(3):
            detection = Yolo()
            detection.class_name = f'person_{i}'
            detection.conf = 0.8 + i * 0.05
            detection.box = [100 + i*50, 200 + i*30, 40, 80]  # [x, y, width, height]
            msg.yolo_array.append(detection)
        self.publisher_.publish(msg)
        self.get_logger().info(f'Publishing: {len(msg.yolo_array)} detections')


    def listener_callback(self, msg):
        self.get_logger().info(f'Received {len(msg.yolo_array)} detections')
        for idx, detection in enumerate(msg.yolo_array):
            print(f"idx:{idx} {detection.class_name} {detection.conf:.2f} {detection.box}")

def main(args=None):
    rclpy.init(args=args)
    node = Subscriber()
    rclpy.spin(node)
    rclpy.shutdown()
 
 
if __name__ == "__main__":
    main()


如下:

微信截图_20250511135023.jpg

ROS2 设置节点开机自启
ROS2 URDF建模

友情链接: CSDN激萌の小宅 95知识库 自考题库 罗分明个人网络博客 精益编程leanboot

小宅博客  www.bilibili996.com All Rights Reserved. 备案号: 闽ICP备2024034575号

网站经营许可证  福建省福州市 Copyright©2021-2025 版权所有

小宅博客
首页 智能家居 地图定位
公告:小宅博客网可以开发票了,需要发票的,去群里找群主哈!!

文章作者:激萌の小宅

促销:¥0

价格:¥0

配送方式: 购买后立即生效(如购买异常,请联系站长)
付款之后一定要等待自动跳转结束,否则购买可能会失败
  • 0 天

    有效期

  • 0

    总销量

  • 0

    累计评价

ROS2 添加自定义msg

参考博客:https://blog.csdn.net/wei242425445/article/details/115278114


新建我们的消息包

colcon build --packages-select system_msg


删除include和src文件夹,然后新建个msg目录,创建两个消息包Yolo.msg和YoloArray.msg

微信截图_20250511132014.jpg


消息包命名规则:首字母必须大写,不然编译会报错。


Yolo.msg 内容如下:

string class_name
float32 conf
int32[4] box


YoloArray.msg 内容如下:

Yolo[] yolo_array


变量名命名规则:首字母必须小写,不然编译会报错。


然后在CMakeLists.txt文件中添加下面内容

find_package(rosidl_default_generators REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME}
  "msg/Yolo.msg"
  "msg/YoloArray.msg"
 )


如下:

微信截图_20250511132401.jpg


package.xml文件添加内容如下:

  <build_depend>rosidl_default_generators</build_depend>
  <exec_depend>rosidl_default_runtime</exec_depend>
  <member_of_group>rosidl_interface_packages</member_of_group>

如下:

微信截图_20250511132451.jpg


然后编译

ros2 pkg create --build-type ament_cmake system_msg

# 验证是否可用
ros2 interface show system_msg/msg/Yolo
ros2 interface show system_msg/msg/YoloArray


如下:

微信截图_20250511132709.jpg


验证代码如下:

import cv2 
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Image  
from system_msg.msg import Yolo, YoloArray
from cv_bridge import CvBridge, CvBridgeError  

class Subscriber(Node):
    def __init__(self):
        super().__init__("system_yolo_test")

        self.publisher_ = self.create_publisher(YoloArray, 'yolo_detections', 10)

        self.subscription = self.create_subscription(YoloArray, 'yolo_detections', self.listener_callback, 10)

        self.timer = self.create_timer(1.0, self.timer_callback)
 

    def timer_callback(self):
        msg = YoloArray()
        # 创建3个模拟检测结果
        for i in range(3):
            detection = Yolo()
            detection.class_name = f'person_{i}'
            detection.conf = 0.8 + i * 0.05
            detection.box = [100 + i*50, 200 + i*30, 40, 80]  # [x, y, width, height]
            msg.yolo_array.append(detection)
        self.publisher_.publish(msg)
        self.get_logger().info(f'Publishing: {len(msg.yolo_array)} detections')


    def listener_callback(self, msg):
        self.get_logger().info(f'Received {len(msg.yolo_array)} detections')
        for idx, detection in enumerate(msg.yolo_array):
            print(f"idx:{idx} {detection.class_name} {detection.conf:.2f} {detection.box}")

def main(args=None):
    rclpy.init(args=args)
    node = Subscriber()
    rclpy.spin(node)
    rclpy.shutdown()
 
 
if __name__ == "__main__":
    main()


如下:

微信截图_20250511135023.jpg