当前位置: 首页 > news >正文

分布式机器人多机协同巡检系统设计

分布式机器人多机协同巡检系统设计

这篇文章是对之前做过的分布式机器人多机协同系统的一些设计和思考的整理归纳。写下来主要是为了复盘思路,理清架构,同时也能给后来者提供一些参考。

一、基本概念

我们要解决的问题是:如何让多个异构机器人设备协同完成巡检任务。这意味着系统需要统一调度无人机、地面机器人、固定相机和其他边缘计算节点等

从架构层面看,最合理的方式是 中心控制

  • 云端负责全局调度与任务编排,下发统一的任务指令;
  • 各设备只需按照分配的任务执行,并将运行状态上报云端

为了让不同类型的设备(厂商不同、协议不同)都能被调度,需要一套统一的规范。这就引出两个关键点:

  1. 任务 DSL(Domain-Specific Language,领域专用语言):标准化的任务描述语言,用来表达“任务是什么,如何执行”
  2. 设备建模(物模型 Thing Model):将设备的能力抽象化,形成一个统一的接口层

这样,云端就可以只关心“做什么”,而不用关心“设备是怎么做的”


物模型(Thing Model)

这里借用 DJI 的 TSL(Thing Specification Language)概念
物模型本质上是一个 设备的数字化表示,从三个维度描述了设备的能力:

  • 属性 (Property):设备的状态参数,例如无人机的姿态、电池电量、相机模式等。
  • 服务 (Service):可被外部调用的功能,例如“起飞”、“拍照”、“导航到某坐标点”。
  • 事件 (Event):设备运行过程中触发的事件,例如“进入禁飞区”、“电量不足告警”。

一个典型的物模型 JSON 结构大致如下:

{"profile": {},    	# 表示该产品是什么"properties": [],   # 表示该产品有哪些属性"services": [],   	# 表示该产品有哪些可以被外部调用的能力和方法"events": []    	# 表示该产品有哪些需要被外部感知和处理的通知信息
}

物模型带来的最大好处是:统一设备能力的抽象层
这和 Linux 的“万物皆文件”哲学很像 —— 设备千差万别,但在云端看来,它们都是一类“能力集合”


HMS 健康管理系统

除了设备能力的定义,系统还需要关注设备健康状态。例如无人机是否有故障、地面机器人是否掉线、电池是否异常

健康管理(HMS, Health Management System)的核心价值在于:

  • 提前预警:发现设备潜在问题,防止任务中断
  • 规则化处理:通过规则引擎定义告警与处理方式(比如低电量自动返航)
  • 自动化恢复:某些情况下设备可以自愈,或者系统自动重新分配任务

这里可以参考 RuleGo,一个轻量的规则引擎库,非常适合做设备健康管理和任务规则处理。


AI 与自然语言任务编排

当我们有了任务 DSL 和物模型后,会发现这和 AI 的 MCP(Model Context Protocol) 思路非常类似:

  • 物模型定义设备能力
  • 任务 DSL 定义调用方式

这就意味着:任务完全可以用自然语言描述,再由 AI 转换成 DSL
例如:

“让无人机飞到点 A 巡检,同时让地面机器人去点 B”

AI 就能翻译成 DSL JSON
不过为了安全起见,生产系统应该采用 “AI 生成任务 + 人工审核” 的模式

Prompt示例

你是⼀个任务编排引擎的助⼿,负责将⽤户输⼊的⾃然语⾔任务,转换为结构化的任务调度 JSON DSL。
请严格按照以下格式和能⼒描述,⽣成合法的 JSON 结构,供调度系统直接使⽤。
---
【任务描述格式】:
- `name`: 任务名称(简洁命名)
- `steps`: 任务步骤数组,每个步骤为⼀个任务动作,具有以下结构:
每个 step ⽀持以下字段:
- `type`: 任务动作类型,例如 `drone.goto`, `dog.capture`
- `target`: 执⾏此动作的设备 ID,例如 `drone1`, `dog1`
- `params`: 执⾏动作所需参数(根据设备能⼒)
- `retry`: (可选)失败重试次数,例如 2
- `onError`: (可选)失败时的备⽤动作,例如 `{ "type": "drone.return" }`
- `condition`: (可选)仅在满⾜条件时执⾏,例如 `"battery > 30"`
- `type: "group"` 表示并发步骤,包含⼀个 `tasks` 数组
---
【已注册设备及能⼒信息如下】:
{{devices}}
- 设备 drone1(类型 drone)⽀持:
- takeoff():起⻜
- goto(lat, lng, alt):前往坐标
- capture():拍照
- return():返回起点
- 设备 dog1(类型 dog)⽀持:
- goto(x, y):前往坐标
- capture():拍照
- pose(poseType):切换姿态
---
【⽤户任务描述】:
{{user_prompt}}
请让⽆⼈机⻜到 A 点并拍照,机器狗同时巡视 B 点并拍照。
---
【请⽣成合法 JSON】(不要解释,不要注释):

二、系统架构

我采用的是 “中心任务编排 + 边缘执行” 的架构

  • 云端:负责 DSL 解析、任务调度、规则编排
  • 设备端(edge-sdk):只负责原子指令执行,例如“飞到坐标点”、“转动云台”、“拍照”
  • 设备能力匹配:通过物模型自动适配,不同厂商的设备都能即插即用

核心服务模块:

  • 任务调度编排引擎
  • 规则引擎(健康管理、异常处理)
  • HMS 服务(设备状态监控)
  • 边缘层服务 edge-sdk

edge-sdk 的功能

edge-sdk 是设备侧的统一接入 SDK,封装了一些核心能力:

  • 注册与心跳机制
  • 执行本地控制指令(ROS、串口、HTTP 等多种方式)
  • 状态上报与事件推送

三、任务 DSL

一个简单任务 DSL 示例:

{"name": "同步巡检任务","steps": [{"type": "group","tasks": [{ "type": "drone.goto", "target": "drone1", "params": { "lat": 32.1, "lng": 114.2 } },{ "type": "dog.goto", "target": "dog1", "params": { "x": 10, "y": 20 } }]}]
}

可以看出,它的思路和 DJI 航线文件很类似,会定义航点、动作、并行/串行执行逻辑等,所以这个功能需要参考航线文件格式来写

多机器人协同调度示例

比如一个“区域 A 全面巡检”任务,会被 Mission Service 拆分成:

  1. 通知机巢开机,检查无人机状态
  2. 无人机起飞,前往坐标 A1-A5 拍照上传
  3. 同时,地面机器人巡检 A6-A9
  4. 所有数据汇总到 Telemetry
  5. 任务完成后,无人机返航,机器人回初始点

这种多机协同,本质上是任务 DSL 与设备物模型的结合。

用户前端任务调度服务设备注册表Edge-SDK物理设备提交任务DSL解析DSL为原子步骤查询设备能力返回设备状态/能力发送原子指令执行控制命令返回执行结果上报状态更新任务状态用户前端任务调度服务设备注册表Edge-SDK物理设备

四、涉及的关键概念

概念作用在系统中的体现
FSM(有限状态机)控制状态流转与异常处理任务状态 / 设备状态
DAG(有向无环图)表达任务依赖关系DSL 任务步骤结构
DSL(领域专用语言)用户友好的任务定义方式JSON 结构任务描述
Thing Model(物模型)描述设备能力设备即插即用、自动匹配任务
事件驱动异步触发与解耦任务执行、告警上报

DAG 在这里尤其重要:任务往往不是线性的,而是一个有依赖的图。通过 DAG,我们可以精确描述“哪个步骤依赖于哪个步骤”,避免混乱


五、一些需要注意的问题

  1. 坐标系转换
    • 手动建模地图与雷达 SLAM 地图往往不在同一坐标系下
    • 解决方案:
      • 建模时以点云为基准;
      • 或者在前端人工对齐,调整机器人位置和旋转角度。
  2. 协议兼容
    • 不同厂商的机器人通信方式不同(MQTT、WebSocket、HTTP、ROS Topic),需要在 edge-sdk 层统一封装,或者云端主动进行适配

参考资料

  • DJI 上云 API
  • 阿里云物联网平台
http://www.dtcms.com/a/405805.html

相关文章:

  • 滑动窗口题目:统计「优美子数组」
  • list 迭代器:C++ 容器封装的 “行为统一” 艺术
  • 专题:2025年AI Agent智能体行业洞察报告|附110+份报告PDF、数据仪表盘汇总下载
  • docker部署使用
  • 信息安全基础知识:05物理与环境安全
  • 【双机位A卷】华为OD笔试之【队列】双机位A-篮球游戏【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
  • 考研复习-线性代数-第二章-矩阵
  • wordpress主题样式表绵阳做seo网站公司
  • Answer+cpolar:企业知识共享的远程协作方案
  • 在SSL证书是有效的前提下,依旧显示“资源不安全
  • 鸿蒙NEXT系统Picker全解析:安全高效的用户资源访问之道
  • Gin + JWT 认证机制详解:构建安全的Go Web应用
  • VS要求的.NET 9 SDK需求、安装注意事项及VS版本搭配
  • SSL证书安全的几个问题
  • 4种安全方法:将一加手机联系人传输到电脑
  • 网站建设盐城北安网站建设
  • Guidde:AI驱动的视频文档创建工具
  • 29.Linux防火墙管理
  • 记账本|基于SSM的家庭记账本小程序设计与实现(源码+数据库+文档)
  • DHCP 服务器
  • K8s学习笔记(七) yaml
  • K8S的StorageClass使用节点本地LVM逻辑卷怎么进行PVC扩容
  • 软件开发公司如何通过 UI 设计服务打造差异化竞争力
  • 【源码剖析】5-生产者-RecordAccumulator分析
  • PHP编程基础
  • 单片机 | 基于51单片机的摇摇棒设计全解析
  • 从零开始部署Android环境的Jenkins CI/CD流水线(docker环境,Win系统)
  • HttpSessionBindingListener
  • AndroidEventBus 发布者发布一次订阅者接收到多次问题
  • Unity开发CI/CD工具Jenkins的安装(Windows10)