0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ROS 传感器模块的通用架构设计与跨中间件扩展实践

康谋keymotek 2025-10-11 17:32 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

自动驾驶机器人仿真领域,传感器数据的高效交互是连接虚拟仿真与实际系统的关键纽带ROS(Robot Operating System) 作为行业通用的机器人操作系统,其传感器数据交互机制直接影响仿真的真实性系统集成的便捷性。

本文基于对aiSim 中各类 ROS 传感器时钟、GPS、IMU、激光雷达、车辆、相机)模块的源码学习,梳理了它们的共性架构实现要点,并结合 aiSim‑SDK 中相机模块的通用设计,对跨中间件扩展性提出思考。

通用架构与设计模式

aiSim 中 ROS 传感器模块的设计遵循了一系列通用原则,这些原则构成了整个系统的 “骨架”,确保了不同传感器在交互方式数据处理等方面的一致性

双层分离:职责清晰的架构基础

aiSim 的 ROS 传感器模块采用双层分离架构,将与仿真引擎的交互和与 ROS 的桥接功能明确分开:

实现层(xxx_ros_sensor.cpp/.h):专注于与仿真引擎的交互,负责从仿真中采集数据、进行时间同步处理,并将仿真数据封装成 ROS 消息;

代理层(xxx_ros_sensor_proxy.h):作为 ROS 节点与仿真系统的连接枢纽,承担节点延迟初始化、ROS 回调函数注册及话题消息筛选等核心功能。通过封装标准化的 ROS 通信接口(如自定义消息类型、服务接口),实现了对实现层与应用层模块的有效解耦,避免了实现层内部接口直接暴露给应用层节点。

这种架构使得模块的维护和扩展更加便捷,当 ROS 版本更新或中间件更换时,主要修改代理层即可,对实现层的影响较小。

发布者创建流程与消息发布机制

发布者的创建和消息发布是传感器与 ROS 进行数据交互的核心流程:

发布者创建:首先通过单例模式获取 ROS 节点,auto& ros_bridge = RosBridge::Instance(true); auto node = ros_bridge.GetNode();,然后在构造函数中创建发布者并绑定话题,m_publisher = node->create_publisher("/topic_name", qos);,确保了发布者与特定话题的关联;

消息发布机制:在SendMsg函数中,将仿真输出的数据转换为 ROS 消息格式,设置消息头的时间戳为当前节点时间,msg.header.stamp = node->now();,然后填充数据并发布,m_publisher->publish(msg);,保证了数据的及时传递。

动态注册与QoS

通过动态注册和QoS 与时间同步两大机制,分别实现了部署灵活性的提升与数据处理可靠性的保障:

动态注册:借助 SensorFactory 和 ConfiguratorApplication,从 JSON 配置文件中动态创建传感器实例,摆脱了对硬编码的依赖。这意味着在不修改代码的情况下,通过修改配置文件就能添加或修改传感器,极大地提高了系统的灵活性。

QoS 及时间同步:QoS 的队列长度设置保证了未处理消息的缓存,防止高频数据丢失;而 ClockRosSensor 发布的/clock话题,为各节点提供了统一的仿真时间基准,确保了整个系统时钟的一致性,避免了因时间不同步导致的数据处理错误。

各传感器模块要点

在通用架构的基础上,不同类型的传感器根据其功能特点,有着各自独特的实现要点,共同构成了整个传感器系统。

3556b302-a685-11f0-8ce9-92fbcf53809c.png

aiSim‑SDK 传感器模块:通用化示例

虽然上面的内容聚焦在 ROS 中间件上,aiSim‑SDK 的传感器模块(以camera为例)设计却不依赖 ROS,可直接扩展至其他通信框架,为跨中间件扩展提供了可能,其相机模块的通用化设计具有代表性。

357b275a-a685-11f0-8ce9-92fbcf53809c.gif

消息定义(camera_sensor_messages.h)

MessageType 枚举:列举了传感器初始化、订阅、配置查询及各种相机输出(颜色、深度、分割、边界框、车道、元数据等)的一致化消息类型。

Config与请求/响应机制:通过 InitRequest/InitResponse、SubscribeRequest、GetConfigRequest/GetConfigResponse 等消息,实现对更新间隔、时间偏移和可选功能的动态配置管理。

统一消息封装:以 CameraMessage 为基类衍生多种具体数据消息,并使用std::variant 将它们封装为单一类型以简化处理。

357b275a-a685-11f0-8ce9-92fbcf53809c.gif

代理层(camera_sensor_proxy.h)

初始化与配置:构造函数通过 InitRequest 向底层传感器发送配置并校验响应错误,以确保代理层与模拟传感器的对接正确。

统一回调订阅:模板化的 SubscribeToNotification 方法为所有 CameraMessageTypes 注册同一回调,且对高频大数据的 ColorImageMessage 采用零拷贝以降低性能开销。

可插拔通信接口:依赖 BinarySerializerClient 抽象,代理层仅需替换该序列化/传输实现,便可对接不同中间件或网络协议。

357b275a-a685-11f0-8ce9-92fbcf53809c.gif

核心处理(camera_sensor.cpp)

异步捕获与处理:使用 CaptureNonBlocking 非阻塞地获取图像帧,并在 ProcessDataAsync 中按需生成多种消息(如彩色图、深度图、分割图等)。

功能插件化:通过可选的 BoundingBoxCalculator 和 LaneCalculator 模块,动态启用目标边界框计算和车道线检测,无需修改核心流程即可扩展新算法

统一消息发布:FillCommonMessageFields 在所有消息中注入车辆名、传感器名、时间戳与序列号,并通过零拷贝或常规方式一次性发布所有可用数据。

模块化与可扩展性总结

aiSim中ROS传感器模块的设计充分体现了模块化可扩展性的理念。通过通用架构的搭建,确保了不同传感器在交互方式上的一致性;各传感器模块根据自身特点进行个性化实现,满足了不同的数据采集需求;而 aiSim-SDK 的通用化设计,则突破了 ROS 中间件的限制,为系统向更多通信框架扩展奠定了基础。

这种设计不仅提高了仿真系统的开发效率和维护便捷性,也使得仿真数据能够更顺畅地与实际自动驾驶系统进行集成,为自动驾驶技术的研发提供了有力的支撑。在未来,随着技术的不断发展,这种模块化、可扩展的设计思路将在更多领域发挥重要作用。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2577

    文章

    55460

    浏览量

    793779
  • 自动驾驶
    +关注

    关注

    794

    文章

    14979

    浏览量

    181397
  • ROS
    ROS
    +关注

    关注

    1

    文章

    296

    浏览量

    18859
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于SOA的数字电视中间件系统的研究与实现

    基于SOA的数字电视中间件系统的研究与实现针对数字电视制播系统应用集成时存在的异构问题.对数字电视中间件系统进行研究。提出数字电视发送端制播系统中间件的基本思想。该系统技术架构为SOA
    发表于 10-06 10:03

    将集群技术引入到RFID中间件的设计讨论

    和SAP 系统。在整合RFID 中间件和ERP 系统时,我们遇到了很多挑战。对于大多数的ERP 系统,高可靠性、高可用性、高扩展性、高性能是至关重要的,因此在RFID 中间件与ERP 系统整合过程中
    发表于 07-25 06:22

    一个基于漏洞扫描的安全中间件架构设

    本文结合漏洞扫描技术和安全中间件技术,提出了一种基于漏洞扫描的安全中间件的系统结构。该系统将扫描控制和扫描实现相分离,提供统一接口,具有良好的封装性和可扩
    发表于 09-03 09:18 18次下载

    基于JMS的RFID中间件设计与实现

    介绍了Radio Frequency Identification (RFID) 和物联网的RFID 中间件技术,设计了RFID 中间件整体框架,在此基础上设计并实现了一个基于JMS 的商品零售的边缘中间件
    发表于 10-19 16:16 17次下载

    什么是中间件

    什么是中间件 中间件是一种独立的系统软件或服务程序,分布式应用软件
    发表于 12-28 17:54 1591次阅读
    什么是<b class='flag-5'>中间件</b>

    NGB中间件标准考虑因素

      数字电视中间件技术与标准,大家都非常熟悉了。自2001年,DVB推出MHP中间件技术标准以来,全世界各地都开始了中间件技术的研究与标准制定工作,而且基本上都是源自于MHP
    发表于 06-25 11:18 1308次阅读
    NGB<b class='flag-5'>中间件</b>标准考虑因素

    基于通用中间件接口服务的远程医疗信息系统

    在 远程医疗 信息系统共享平台的设计中, 提出一种构建通用中间件接口服务实现多家医院信息系统HIS 与PACS 的无缝连接方案。着重介绍了DICOM 中间件、HL7 消息
    发表于 08-15 19:12 28次下载
    基于<b class='flag-5'>通用</b><b class='flag-5'>中间件</b>接口服务<b class='flag-5'>器</b>的远程医疗信息系统

    基于ARM的RFID中间件系统设计

    RFID中间件在RFID读写和应用程序之间起桥梁作用。应用程序端使用中间件所提供一组通用的应用程序接口(API),即能连到RFID读写
    发表于 09-16 10:33 1191次阅读

    常见的中间件有哪些?汇总解析

    世界著名的资讯机构Giga Group把中间件分为三大类,共十五种。另一家世界著名的资讯机构IDC同时指出,最近几年到未来的2002年,增长率最高的中间件将集中在数据存取中间件、消息中间件
    发表于 12-01 08:48 5.6w次阅读

    RFID系统中间件平台架构研究

    1项目简介 华南理工大学刘发贵教授领导的课题组所完成的RFID应用集成中间件技术研究与开发项目受到国家863计划重点项目课题资助。该项目结合我国RFID技术及产业化发展现状,从国情出发,坚持自主
    发表于 12-10 10:16 1626次阅读

    物联网软件系统中的RFID中间件介绍

    RFID中间件是物联网软件系统中的关键和灵魂,为解决分布异构问题,人们提出了中间件的概念。中间件是位于平台(硬件和操作系统)和应用之间的通用服务,这些服务具有标准的程序接口和协议。针对
    发表于 04-15 16:00 5435次阅读
    物联网软件系统中的RFID<b class='flag-5'>中间件</b>介绍

    RFID中间件是什么东西

    RFID 中间件是一种面向消息的中间件,信息是以消息的形式,从一个程序传送到另一个或多个程序。
    发表于 12-02 16:12 4052次阅读

    基于SOA的RFID中间件如何来设计

    RFID中间件是一种消息导向的软件中间件,信息是以消息的形式从一个程序模块传递到另一个或多个程序模块
    发表于 01-07 16:22 1271次阅读
    基于SOA的RFID<b class='flag-5'>中间件</b>如何来设计

    RFID中间件管理系统的四层架构

    中间件系统可以集成各种智能硬件:RFID 读写、条码设备、RFID 打印机、温湿度传感器、人脸识别、视频监控等硬件。
    发表于 07-24 15:57 2224次阅读

    Go项目中引入中间件的目的和效果如何

    系统软件和应用软件。广泛用于 web 应用和面向服务的体系结构等。 纵观 GO 语言,中间件应用比较普遍,主要应用: 记录对服务发送的请求(request) 处理服务响应(response ) 请求和处理之间做一个权限认证工
    的头像 发表于 08-14 14:24 2807次阅读