Spring Boot集成Spring Statemachine
Spring Statemachine 是 Spring 框架下的一个模块,用于简化状态机的创建和管理,它允许开发者使用 Spring 的特性(如依赖注入、AOP 等)来构建复杂的状态机应用。以下是关于 Spring Statemachine 的详细介绍:
主要特性
- 丰富的状态机模型支持:支持多种状态机模型,如简单状态机、层次状态机和并行状态机。层次状态机允许状态嵌套,并行状态机可以同时处理多个独立的状态流。
- 灵活的配置方式:可以使用 Java 配置、XML 配置或注解来定义状态机的状态、转移、事件等。
- 与 Spring 生态集成:无缝集成 Spring 框架的其他模块,如 Spring Boot、Spring MVC 等,方便构建企业级应用。
- 事件驱动机制:通过事件触发状态转移,易于与外部系统进行交互。
- 状态监听器:允许开发者在状态转移前后执行自定义逻辑,如日志记录、业务处理等。
快速入门
1. 添加依赖
如果你使用 Maven,在 pom.xml 中添加以下依赖:
xml
<dependency><groupId>org.springframework.statemachine</groupId><artifactId>spring-statemachine-core</artifactId><version>3.2.1</version>
</dependency>
2. 定义状态和事件
java
// 定义状态枚举
public enum States {STATE1, STATE2, STATE3
}// 定义事件枚举
public enum Events {EVENT1, EVENT2
}
3. 配置状态机
使用 Java 配置方式:
java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.statemachine.config.EnableStateMachine;
import org.springframework.statemachine.config.EnumStateMachineConfigurerAdapter;
import org.springframework.statemachine.config.builders.StateMachineConfigurationConfigurer;
import org.springframework.statemachine.config.builders.StateMachineStateConfigurer;
import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer;import java.util.EnumSet;@Configuration
@EnableStateMachine
public class StateMachineConfig extends EnumStateMachineConfigurerAdapter<States, Events> {@Overridepublic void configure(StateMachineConfigurationConfigurer<States, Events> config) throws Exception {config.withConfiguration().autoStartup(true);}@Overridepublic void configure(StateMachineStateConfigurer<States, Events> states) throws Exception {states.withStates().initial(States.STATE1).states(EnumSet.allOf(States.class));}@Overridepublic void configure(StateMachineTransitionConfigurer<States, Events> transitions) throws Exception {transitions.withExternal().source(States.STATE1).target(States.STATE2).event(Events.EVENT1).and().withExternal().source(States.STATE2).target(States.STATE3).event(Events.EVENT2);}
}
4. 使用状态机
java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.statemachine.StateMachine;@SpringBootApplication
public class StateMachineApp implements CommandLineRunner {@Autowiredprivate StateMachine<States, Events> stateMachine;public static void main(String[] args) {SpringApplication.run(StateMachineApp.class, args);}@Overridepublic void run(String... args) throws Exception {stateMachine.start();System.out.println("当前状态: " + stateMachine.getState().getId());stateMachine.sendEvent(Events.EVENT1);System.out.println("触发 EVENT1 后状态: " + stateMachine.getState().getId());stateMachine.sendEvent(Events.EVENT2);System.out.println("触发 EVENT2 后状态: " + stateMachine.getState().getId());}
}
代码解释
- 定义状态和事件:使用枚举类型定义状态机的状态和事件,方便管理和使用。
@Configuration:表明这是一个配置类。@EnableStateMachine:启用状态机功能。- 配置状态机:
configure(StateMachineConfigurationConfigurer):配置状态机的基本属性,如自动启动。configure(StateMachineStateConfigurer):定义状态机的状态,指定初始状态STATE_A和所有可能的状态。configure(StateMachineTransitionConfigurer):定义状态之间的转移规则,包括源状态、目标状态和触发事件。EVENT_1事件触发从STATE_A到STATE_B的转移,EVENT_2事件触发从STATE_B到STATE_C的转移。
- 使用状态机:在
CommandLineRunner中注入状态机实例,启动状态机并发送事件,观察状态的变化。
应用场景
- 工作流管理:如订单处理流程、审批流程等,通过状态机可以清晰地管理每个步骤的状态转换。
- 游戏开发:管理游戏角色的状态,如站立、行走、攻击等,根据用户输入和游戏逻辑进行状态转移。
- 设备控制:控制物联网设备的状态,如智能家电的开关、模式切换等。
Spring Statemachine 提供了强大而灵活的功能,帮助开发者更高效地实现状态机应用。
-----------------------------------------------DEMO------------------------------------------------------------------
以下为你提供一个较为完整的 Spring Boot 集成 Spring Statemachine 的示例代码,这个示例模拟了一个简单的订单状态机,包含待支付、已支付、已发货、已完成几种状态。
1. 创建 Spring Boot 项目并添加依赖
可以使用 Spring Initializr 或者 IDE 自带的 Spring Boot 项目创建功能,添加以下依赖:
xml
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.statemachine</groupId><artifactId>spring-statemachine-core</artifactId><version>3.2.1</version></dependency>
</dependencies>
2. 定义状态和事件枚举
java
// 定义订单状态枚举
public enum OrderState {PENDING_PAYMENT, PAID, SHIPPED, COMPLETED
}// 定义订单事件枚举
public enum OrderEvent {PAY, SHIP, DELIVER
}
3. 配置状态机
java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.statemachine.config.EnableStateMachine;
import org.springframework.statemachine.config.EnumStateMachineConfigurerAdapter;
import org.springframework.statemachine.config.builders.StateMachineConfigurationConfigurer;
import org.springframework.statemachine.config.builders.StateMachineStateConfigurer;
import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer;import java.util.EnumSet;@Configuration
@EnableStateMachine
public class OrderStateMachineConfig extends EnumStateMachineConfigurerAdapter<OrderState, OrderEvent> {@Overridepublic void configure(StateMachineConfigurationConfigurer<OrderState, OrderEvent> config) throws Exception {config.withConfiguration().autoStartup(true);}@Overridepublic void configure(StateMachineStateConfigurer<OrderState, OrderEvent> states) throws Exception {states.withStates().initial(OrderState.PENDING_PAYMENT).states(EnumSet.allOf(OrderState.class));}@Overridepublic void configure(StateMachineTransitionConfigurer<OrderState, OrderEvent> transitions) throws Exception {transitions.withExternal().source(OrderState.PENDING_PAYMENT).target(OrderState.PAID).event(OrderEvent.PAY).and().withExternal().source(OrderState.PAID).target(OrderState.SHIPPED).event(OrderEvent.SHIP).and().withExternal().source(OrderState.SHIPPED).target(OrderState.COMPLETED).event(OrderEvent.DELIVER);}
}
4. 创建状态机服务类
java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.statemachine.StateMachine;
import org.springframework.stereotype.Service;@Service
public class OrderStateMachineService {@Autowiredprivate StateMachine<OrderState, OrderEvent> stateMachine;public boolean sendEvent(OrderEvent event) {return stateMachine.sendEvent(event);}public OrderState getCurrentState() {return stateMachine.getState().getId();}
}
5. 创建控制器类
java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/order")
public class OrderController {@Autowiredprivate OrderStateMachineService orderStateMachineService;@GetMapping("/currentState")public OrderState getCurrentState() {return orderStateMachineService.getCurrentState();}@PostMapping("/sendEvent/{event}")public String sendEvent(@PathVariable OrderEvent event) {boolean result = orderStateMachineService.sendEvent(event);if (result) {return "事件发送成功,当前状态: " + orderStateMachineService.getCurrentState();} else {return "事件发送失败,当前状态: " + orderStateMachineService.getCurrentState();}}
}
6. 启动 Spring Boot 应用
java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SpringStatemachineDemoApplication {public static void main(String[] args) {SpringApplication.run(SpringStatemachineDemoApplication.class, args);}
}
代码解释
- 状态和事件枚举:
OrderState定义了订单可能的状态,OrderEvent定义了触发状态转移的事件。 - 状态机配置:
OrderStateMachineConfig类使用@EnableStateMachine注解启用状态机,通过重写三个配置方法分别配置状态机的基本属性、状态和转移规则。 - 状态机服务类:
OrderStateMachineService封装了状态机的操作,包括发送事件和获取当前状态。 - 控制器类:
OrderController提供了两个接口,一个用于获取当前订单状态,另一个用于发送事件触发状态转移。 - 启动类:
SpringStatemachineDemoApplication是 Spring Boot 应用的启动类。
测试
启动应用后,可以使用以下方式进行测试:
- 获取当前状态:访问
http://localhost:8080/order/currentState - 发送事件:访问
http://localhost:8080/order/sendEvent/PAY触发支付事件,根据状态机配置,订单状态将从PENDING_PAYMENT转移到PAID。
------------------------------------------------------------------------------------------------
transitions.withExternal().source(OrderState.PENDING_PAYMENT).target(OrderState.PAID).event(OrderEvent.PAY).and().withExternal().source(OrderState.PAID).target(OrderState.SHIPPED).event(OrderEvent.SHIP).and().withExternal().source(OrderState.SHIPPED).target(OrderState.COMPLETED).event(OrderEvent.DELIVER);
这段代码的主要作用是定义状态机中不同状态之间的转移规则。在一个订单处理的状态机场景里,它明确了订单在不同状态(如待支付、已支付、已发货、已完成)之间如何根据特定事件(如支付、发货、交付)进行转换。
代码结构分析
整体上,这段代码通过多次调用 withExternal() 方法来定义多个外部状态转移规则,每个状态转移规则由 source(源状态)、target(目标状态)和 event(触发事件)三个关键部分组成,不同的状态转移规则之间通过 .and() 方法进行连接。
各部分详细解释
withExternal()
withExternal()方法用于定义外部状态转移,即状态机从一个状态转移到另一个不同的状态。与之相对的还有内部转移(withInternal()),内部转移不会改变状态机的状态,只是在当前状态下执行一些操作。
.source(OrderState.PENDING_PAYMENT).target(OrderState.PAID).event(OrderEvent.PAY)
source(OrderState.PENDING_PAYMENT):指定状态转移的起始状态,这里是OrderState.PENDING_PAYMENT,表示订单处于待支付状态。target(OrderState.PAID):指定状态转移的目标状态,即OrderState.PAID,意味着订单在满足条件后将转移到已支付状态。event(OrderEvent.PAY):指定触发状态转移的事件,当OrderEvent.PAY事件发生时,状态机将从待支付状态转移到已支付状态。
.and()
and()方法用于连接多个状态转移规则,它表示一个规则定义的结束和下一个规则定义的开始,使得可以在同一个配置方法中定义多个不同的状态转移规则。
后续规则
java
.withExternal().source(OrderState.PAID).target(OrderState.SHIPPED).event(OrderEvent.SHIP)
.and()
.withExternal().source(OrderState.SHIPPED).target(OrderState.COMPLETED).event(OrderEvent.DELIVER);
这部分代码定义了另外两个状态转移规则:
- 当
OrderEvent.SHIP事件发生时,订单从已支付状态(OrderState.PAID)转移到已发货状态(OrderState.SHIPPED)。- 当
OrderEvent.DELIVER事件发生时,订单从已发货状态(OrderState.SHIPPED)转移到已完成状态(OrderState.COMPLETED)。
示例代码扩展
如果需要在状态转移时执行一些额外的操作,比如记录日志或者更新数据库,可以使用 action() 方法。以下是一个扩展后的示例:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.statemachine.action.Action;
import org.springframework.statemachine.config.EnableStateMachine;
import org.springframework.statemachine.config.EnumStateMachineConfigurerAdapter;
import org.springframework.statemachine.config.builders.StateMachineConfigurationConfigurer;
import org.springframework.statemachine.config.builders.StateMachineStateConfigurer;
import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer;import java.util.EnumSet;@Configuration
@EnableStateMachine
public class OrderStateMachineConfig extends EnumStateMachineConfigurerAdapter<OrderState, OrderEvent> {@Overridepublic void configure(StateMachineTransitionConfigurer<OrderState, OrderEvent> transitions) throws Exception {Action<OrderState, OrderEvent> payAction = context -> {System.out.println("订单已支付,更新订单状态为已支付");// 这里可以添加更新数据库等操作};Action<OrderState, OrderEvent> shipAction = context -> {System.out.println("订单已发货,更新订单状态为已发货");// 这里可以添加更新数据库等操作};Action<OrderState, OrderEvent> deliverAction = context -> {System.out.println("订单已完成,更新订单状态为已完成");// 这里可以添加更新数据库等操作};transitions.withExternal().source(OrderState.PENDING_PAYMENT).target(OrderState.PAID).event(OrderEvent.PAY).action(payAction).and().withExternal().source(OrderState.PAID).target(OrderState.SHIPPED).event(OrderEvent.SHIP).action(shipAction).and().withExternal().source(OrderState.SHIPPED).target(OrderState.COMPLETED).event(OrderEvent.DELIVER).action(deliverAction);}// 其他配置方法保持不变
}
在这个扩展示例中,通过定义 Action 对象,并在状态转移规则中使用 action() 方法,在状态转移时执行了相应的操作。
相关文章:
Spring Boot集成Spring Statemachine
Spring Statemachine 是 Spring 框架下的一个模块,用于简化状态机的创建和管理,它允许开发者使用 Spring 的特性(如依赖注入、AOP 等)来构建复杂的状态机应用。以下是关于 Spring Statemachine 的详细介绍: 主要特性 …...
【Go学习】04-1-Gin框架-路由请求响应参数
【Go学习】04-1-Gin框架 初识框架go流行的web框架GinirisBeegofiber Gin介绍Gin快速入门 路由RESTful API规范请求方法URI静态url路径参数模糊匹配 处理函数分组路由 请求参数GET请求参数普通参数数组参数map参数 POST请求参数表单参数JSON参数 路径参数文件参数 响应字符串方式…...
数据类设计_图片类设计之5_不规则类图形混合算法(前端架构)
前言 学的东西多了,要想办法用出来.C和C是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容 引入 接续上一篇,讨论图片类型设计出来后在场景中如何表达,以及不规则图片的混合算法. 图片示意图 图片是怎样表示的,这里把前面的补上 这里的数字1是不规则数据类对…...
零信任架构实战手册-企业安全升级
🔐 开篇痛点暴击: “又被黑客钓鱼了?VPN漏洞补到心累?😫” 传统边界安全像纸糊的墙,内鬼渗透、APT攻击防不胜防! 别慌!零信任架构(Zero Trust)用「永不信任,持续验证」原则,让安全等级飙升10倍! 🚦 零信任3大核心武器(附实操步骤): 1. 🌟 身份即边界!抛…...
【Qt】qApp简单介绍
1. 介绍 在Qt中,qApp是一个全局指针,它指向当前的QApplication或QGuiApplication对象。这个全局指针在Qt应用程序中非常有用,因为它可以让你在任何地方访问到应用程序对象。 在C中,全局指针是一个可以在程序的任何地方访问的指针…...
C++11 编译使用 aws-cpp-sdk
一、对sdk的编译前准备 1、软件需求 此文档针对于在Linux系统上使用源码进行编译开发操作系统使用原生的contos7Linux。机器配置建议 内存8G以上,CPU 4个 以上GCC 4.9.0 及以上版本Cmake 3.12以上 3.21以下apt install libcurl-devel openssl-devel libuuid-devel pulseaudio-…...
【模拟CMOS集成电路设计】带隙基准(Bandgap)设计与仿真(基于运放的电流模BGR)
【模拟CMOS集成电路设计】带隙基准(Bandgap)设计与仿真 前言工程文件&部分参数计算过程,私聊~ 一、 设计指标指标分析: 二、 电路分析三、 仿真3.1仿真电路图3.2仿真结果(1)运放增益(2)基准温度系数仿真(3)瞬态启动仿真(4)静态…...
版本控制器Git(4)
文章目录 前言一、分布式版本控制系统的概念二、克隆远程仓库三、多用户协作与公钥管理四、配置Git忽略特殊文件五、给命令配置别名总结 前言 加油加油,路在脚下!!! 一、分布式版本控制系统的概念 本地操作:所有操作&a…...
Rabbitmq--延迟消息
13.延迟消息 延迟消息:生产者发送消息时指定一个时间,消费者不会立刻收到消息,而是在指定时间之后才会收到消息 延迟任务:一定时间之后才会执行的任务 1.死信交换机 当一个队列中的某条消息满足下列情况之一时,就会…...
springboot436-基于SpringBoot的汽车票网上预订系统(源码+数据库+纯前后端分离+部署讲解等)
💕💕作者: 爱笑学姐 💕💕个人简介:十年Java,Python美女程序员一枚,精通计算机专业前后端各类框架。 💕💕各类成品Java毕设 。javaweb,ssm…...
宇树ROS1开源模型在ROS2中Gazebo中仿真
以GO1为例 1. CMakelists.txt更新语法 cmake_minimum_required(VERSION 3.8) project(go1_description) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")add_compile_options(-Wall -Wextra -Wpedantic) endif() # find dependencies find…...
Web网页制作之爱家居的设计(静态网页)
一、使用的是PyCharm来敲写的代码(布局) 二、主要的html代码的介绍 这段代码展示了如何使用HTML和CSS创建一个结构化的网页,包含导航栏、新闻内容、图片展示和页脚信息。通过引入外部CSS文件,可以进一步美化和布局这些元素。 HTM…...
Linux云计算SRE-第二十周
完成ELK综合案例里面的实验,搭建完整的环境 一、 1、安装nginx和filebeat,配置node0(10.0.0.100),node1(10.0.0.110),node2(10.0.0.120),采用filebeat收集nignx日志。 #node0、node1、node2采用以下相同方式收集ngin…...
【MATLAB例程】AOA(到达角度)法,多个目标定位算法,三维空间、锚点数量自适应(附完整代码)
给出AOA方法下的多目标定位,适用三维空间,锚点数量>3即可,可自定义目标和锚点的数量、坐标等。 文章目录 运行结果源代码代码讲解概述功能代码结构运行结果 10个锚点、4个目标的情况: 100个锚点、10个目标的情况: 修改方便,只需调节下面的两个数字即可: 源代码 …...
Maven 构建 项目测试
Maven 构建 & 项目测试 引言 在当今的软件开发领域,Maven 作为一种流行的项目管理工具,已经得到了广泛的应用。它能够帮助开发者更好地组织和管理项目依赖,简化构建过程。同时,项目测试是确保软件质量的重要环节。本文将详细介绍 Maven 的构建流程以及项目测试的策略…...
Matlab:矩阵运算篇——矩阵数学运算
目录 1.矩阵的加法运算 实例——验证加法法则 实例——矩阵求和 实例——矩阵求差 2.矩阵的乘法运算 1.数乘运算 2.乘运算 3.点乘运算 实例——矩阵乘法运算 3.矩阵的除法运算 1.左除运算 实例——验证矩阵的除法 2.右除运算 实例——矩阵的除法 ヾ( ̄…...
MinIO问题总结(持续更新)
目录 Q: 之前使用正常,突然使用空间为0B,上传文件也是0B(部署在k8s中)Q: 无法上传大文件参考yaml Q: 之前使用正常,突然使用空间为0B,上传文件也是0B(部署在k8s中) A: 1、检查pod状态…...
IDE 使用技巧与插件推荐:全面提升开发效率
在软件开发领域,集成开发环境(IDE)已成为开发者不可或缺的工具。它集代码编辑、编译、调试、版本控制等多种功能于一身,极大地提升了开发效率。然而,许多开发者可能并未充分挖掘 IDE 的潜力。通过掌握一些实用的使用技…...
智算新纪元,腾讯云HAI-CPU助力法律援助
高性能应用服务 1. ChatbotUI 应用介绍 基于腾讯云 DeepSeek 模型的智能化对话界面,支持灵活集成到企业级应用或服务中,提供自然语言交互能力,适用于客服、知识检索、任务自动化等场景。 核心功能 多轮对话引擎:支持上下…...
android 调用wps打开文档并感知保存事件
需求场景 在项目开发中会碰到需要调用WPS打开Word,Excel,Ppt等Office系列文档的情况,网上目前少有正式介绍如何调用相关API打开文档,并实现文档编辑后回传给三方应用,本人在逛WPS社区时发现 解锁WPS二次开发新世界:Android开发用…...
无人机全景应用解析与技术演进趋势
无人机全景应用解析与技术演进趋势 ——从立体安防到万物互联的空中革命 一、现有应用场景全景解析 (一)公共安全领域 1. 立体安防体系 空中哨兵:搭载 77 GHz 77\text{GHz} 77GHz毫米波雷达(探测距离 5 km 5\text{km} 5km&…...
【fnOS飞牛云NAS本地部署跨平台视频下载工具MediaGo与远程访问下载视频流程】
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
PyQt基础——简单的窗口化界面搭建以及槽函数跳转
一、代码实现 import sysfrom PyQt6.QtGui import QPixmap from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QLineEdit, QMessageBox from PyQt6.uic import loadUi from PyQt6.QtCore import Qtclass LoginWindow(QWidget):def __init__(self):sup…...
Powershell语言的Web性能优化
使用PowerShell进行Web性能优化 引言 在当今互联网高速发展的时代,网站和Web应用程序的性能直接影响到用户体验、搜索引擎排名和业务的成功。因此,Web性能优化成为了开发人员和运维工程师的重要任务之一。而PowerShell,作为一种强大的脚本语…...
【Java--数据结构】优先级队列( PriorityQueue)
一. 优先级队列 1.1 优先级队列的概念 优先级队列是一种特殊的队列,它在入队时会根据元素的优先级进行排序,优先级最高的元素排在队列的前面,出队时会优先出队优先级最高的元素。 1.2 优先级队列的区别 (1)与普通…...
蓝桥杯2024年第十五届省赛真题-回文数组
题目描述 小蓝在无聊时随机生成了一个长度为 n 的整数数组,数组中的第 i 个数为ai,他觉得随机生成的数组不太美观,想把它变成回文数组,也是就对于任意i ∈ [1, n] 满足 ai an−i1 。小蓝一次操作可以指定相邻的两个数,…...
【 <一> 炼丹初探:JavaWeb 的起源与基础】之 JavaWeb 项目的部署:从开发环境到生产环境
<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开发环境…...
【AIGC】OpenAI 集成 Langchain 操作实战使用详解
目录 一、前言 二、前置准备 2.1 安装 Langchain必须的依赖 2.1.1 python环境 2.1.2 langchain openai 环境 2.1.3 准备一个apikey 2.1.4 langchain 核心组件 三、Langchain 各组件使用 3.1 Chat models组件 3.1.1 Invocation 使用 3.1.1.1 结果解析 3.2 提示词模板…...
Xxl-Job学习笔记
目录 概述 核心架构 核心特点 应用场景 什么是任务调度 快速入门 获取源码 初始化调度数据库 基本配置 数据源datasource 邮箱email(可选) 会话令牌access token 启动调度中心 启动执行器 依赖 yaml基本配置 XxlJobConfig类配置 定义执…...
SAIL-RK3576核心板应用方案——无人机视觉定位与地面无人设备通信控制方案
本方案以 EFISH-RK3576-SBC工控板 或 SAIL-RK3576核心板 为核心,结合高精度视觉定位、实时通信与智能控制技术,实现无人机与地面无人设备的协同作业。方案适用于物流巡检、农业植保、应急救援等场景,具备高精度定位、低延迟通信与强环境适应性…...
