方法论——如何设计控制策略架构

一、控制策略架构介绍

1、控制策略架构的概念

(1)控制策略架构,简单来说,就是一套有组织的蓝图或框架,它定义了在一个控制系统(比如机器人、自动驾驶汽车、工业生产线)中,如何从感知输入(获取信息)到决策思考(处理信息),再到执行动作(产生行动)的完整流程和结构。

(2)它不仅仅是写几行代码实现一个PID算法,而是关乎于系统的整体组织方式,它决定了系统的各个组成部分(如传感器、控制器、执行器、规划器、通信模块)之间如何连接、如何通信、如何协作,以及信息和控制指令在整个系统中的流动路径。

2、控制策略架构的构成要素

(1)感知:处理传感器数据,提取有用信息(如位置、速度、障碍物距离、图像特征)。

(2)建模与表示:根据感知信息建立对世界或系统自身的内部模型(如系统状态方程)。

(3)决策与规划:根据任务目标和当前状态,决定下一步做什么。

(4)控制:将决策转化为具体的、连续的控制指令,发送给执行器。

(5)通信:确保各个模块之间能够可靠、高效地交换数据。

3、控制策略架构的主要类型

(1)分层递阶架构:

①这是最经典、最常用的架构,尤其在工业自动化和机器人领域,它将控制系统按功能划分为不同的层级,高层负责宏观决策,低层负责具体执行。

②典型结构:

决策层(最高层):负责最高级的任务规划,如路径规划、监控系统状态等;通常在决策层策划"面向用户"的高级功能的控制策略,控制策略根据用户需求计算出对协调层的需求(部分情况也可能直接计算出对执行层的需求)

协调层(中间层):接收上层的指令,将其分解为一系列有序的基本动作,并发送给执行层,如果高层不同功能发来的指令有冲突,或者系统本身有更重要的需求,或者系统自身的能力无法响应上层需求,那么还需进行优先级仲裁

执行层(最底层):接收上层的指令,直接与硬件打交道,同时它也负责读取传感器数据并进行初步处理

(2)行为主义架构:

①这种架构灵感来源于动物行为学,强调系统对环境的即时反应,它由许多并行的、简单的"行为"模块组成,每个模块都能根据传感器输入直接产生控制输出。

②典型结构:

行为层:根据用户需求直接求解对各执行机构的动作需求,如"避障"、"沿墙走"、"向光源前进"、"寻找目标"等

仲裁层:一个优先级管理器,用于决定哪个行为在某一时刻拥有控制权,如"避障"行为的优先级通常高于"随意漫游"

(3)混合架构:

①为了结合分层架构和行为架构的优点,混合架构应运而生,这是现代复杂机器人系统(如自动驾驶汽车、探索机器人)中最主流的架构。

②典型结构:

高层(规划层):使用分层架构的思想,负责慢速的、全局的规划和决策,生成一系列子目标

低层(反应层):使用行为主义架构的思想,负责快速响应环境变化,执行高层下达的子目标,并处理避障等紧急情况

(4)控制策略架构没有绝对的合理与不合理,以上只是介绍了其中三种控制策略架构,在实际开发中,可以基于以上三种控制架构继续延伸,得到更直观、更易于开发的控制策略架构。

二、设计控制策略架构的目的

1、合理分工

架构定义了清晰的边界,不同团队(如感知团队、规划团队、控制团队)可以并行开发各自的模块,只要遵守共同的接口标准即可

2、问题分解

有了合理的架构,可以将庞大、复杂的问题分解,更快定位引发问题的根本原因,以加以更正

以分层递阶架构为例,比如一个面向用户的功能失效,其失效类型有如下几种可能:

①决策层的高级功能控制策略未能正确响应用户需求,究其原因可能是策略设计不合理,也可能是功能需求定义不合理

②协调层的系统协调控制策略没能正确处理决策层的需求,究其原因可能是策略设计不合理,也可能是上层功能与下层子系统的交互定义不合理

③执行层的执行机构控制策略没能正确控制执行机构究其原因可能是策略设计不合理,也可能是执行机构的控制算法不合理

3、便于维护

当新需求或新问题到来时,良好的控制策略架构允许只修改或添加相关模块,而不会牵一发而动全身

以分层递阶架构为例,比如需要更换传感器,则同步修改执行层的策略即可

以分层递阶架构为例,如果需要增加一个新的高级功能,则在决策层增加一个高级功能控制策略,同时协调层的系统协调控制策略接入该高级功能控制策略的需求指示信号即可

4、便于测试

清晰的模块划分和接口定义,使得每个模块可以被独立测试和验证,从而提升整个系统的稳定性

三、控制策略架构的设计方法

1、识别功能需求中的层级关系

(1)设计控制策略架构前,需明确所有需要开发功能之间的层级关系,以下以机器人控制策略架构为例进行介绍(需要说明的是,实际上的机器人控制会复杂得多,以下案例对实际算法设计没有参考价值,仅供了解控制策略架构的设计方法使用)。

(2)面向用户功能的需求,往往是用户强感知的,比如一个部门策划智能机器人实现"扫地&拖地"的功能,一个部门策划智能机器人实现"自动识别并扶起摔倒老人"的功能,一个部门策划智能机器人实现"根据用户指令播放音乐"的功能,这类功能的控制策略应处于决策层。

(3)一个产品往往涉及非常多的执行机构,基于这些执行机构产生的功能需求,往往是用户弱感知的,比如一个部门负责控制机器人四肢的电机,以使机器人的四肢能够运动,另一个部门负责控制机器人的音响,以使机器人能够发出声音,这类功能的控制策略应处于执行层。

(4)由于不同高级功能之间可能存在优先级冲突,或者系统本身也有动作需求(如上电自检、执行机构预热等),有时还需要根据其自身的能力判断能否响应上层需求,因此需要协调层进行优先级仲裁,并分解出一系列有序的基本动作,将指令传递至执行层,比如"扫地&拖地"功能和"自动识别并扶起摔倒老人"功能同时对机器人的四肢有所需求,很显然后者的优先级更高,因此当后者有需求时,协调层必须保证后者的需求能够被响应。

2、按照功能划分控制策略

(1)一般来说,每一层中的一个功能都应该至少划分为一个控制策略,具体可视情况而定,主要都是为了让架构更加清晰。

(2)部分过于复杂的功能,在实际开发中可能划分为两个控制策略更合理。

比如"自动识别并扶起摔倒老人"的功能,可以划分为"自动识别老人摔倒"控制策略和"扶起摔倒老人"控制策略

比如"电机控制策略",实际上机器人不止一个电机,各部位的电机的控制逻辑独自划分为一个策略更加合理

比如"四肢协调控制策略",除了根据上层需求分解动作以外,还需要判断电机的能力能否响应上层需求,因此将其多划分出一个能力计算策略更加合理

(3)部分过于简单的功能,在实际开发中可能合并为一个控制策略更合理。

比如音效协调控制策略,它只涉及仲裁上层的语音需求,没有复杂的控制逻辑,在实际开发中为了方便管理,可以和音响控制策略直接合并

3、各功能策略间的信号交互

(1)一般来说,上层策略需要向下层策略传递需求信号,让下层实现自己的需求,而下层策略需要向上层反馈实际状态信号,让上层知悉自己的请求是否得到响应,当然,信号交互的形式不是唯一的,没有绝对的合理,也不是必须要双向传递,具体取决于实际开发中不同模块的交互定义。

(2)如下所示为智能机器人的控制策略架构示意,需要说明的是,实际开发中一个控制策略可能有上百个输入信号,架构图往往只列出关键/次关键的外界信号和交互信号。

①决策层三个策略各自接收所需的外界信号,并向协调层发出需求信号。

扫地&拖地功能控制策略需要根据++++视觉信号++++ 判断地面是否清理干净,同时需要根据++++四肢当前位置++++信号判断当前机器人的姿态,以求解下一步动作,向协调层发出动作需求信号

自动识别并扶起老人控制策略需要根据++++视觉信号++++ 和++++听觉信号++++ 判断是否有老人摔倒,以求解是否需要语音提醒,同时需要根据++++四肢当前位置++++信号判断当前机器人的姿态,以求解下一步动作,向协调层发出动作需求信号和语音需求信号

根据用户指令播放音乐控制策略需要根据++++听觉信号++++判断用户希望播放什么音乐,向协调层发出语音需求信号

②协调层两个策略接收决策层的需求信号,并向执行层发出需求信号。

四肢协调控制策略根据++++做家务功能对机器人的动作需求信号++++ 和++++扶老人功能对机器人的动作需求信号++++仲裁求解机器人的下一步动作,并将动作需求分解为对各部位电机的请求,将请求信号发送至执行层的电机控制策略

音响协调控制策略根据++++扶老人功能对机器人的语音需求信号++++ 和++++播音乐功能对机器人的语音需求信号++++仲裁求解音响需要发出的声音,将请求信号发送至执行层的音响控制策略

③执行层两个策略接收协调层的需求信号,并控制执行机构执行相应动作。

电机控制策略根据++++电机控制信号++++控制电机

音响控制策略根据++++音响控制信号++++控制音响

4、设计单个策略的逻辑架构

(1)前面介绍了整体的控制架构设计方法,对于单个策略来说,也需要有一个合理的架构,以便于后续维护。

(2)下图所示的是通用的策略逻辑架构,在实际开发中可根据实际情况进行增删改。

①外界信号是由其它模块提供的,出于安全考虑,可以对每个输入信号进行有效性检验,如果检测到信号异常,则应有对应的后处理措施,当然,对于输入信号成百上千的策略来说,如果对每个信号都做有效性检验,或许是没必要的。

②实现一个功能,首先需要考虑系统能力是否支持需求的实现,因此在前端应有一个系统能力判断模块,以限制后续计算的需求超出系统能力限制。

③任何功能都有来自外界的请求,即使是决策层的功能策略,它也有来自用户的外界请求,因此,外界请求判断模块也是必不可少的。

④对于执行机构来说,它可能涉及位置自学习、上电自检、预热等操作,这种属于自身请求,因此,自身请求判断模块也是必不可少的,不过在实际开发中,往往可以将其等效为外界请求判断,在外界请求判断模块中一并完成优先级仲裁。

⑤策略计算出最终的请求后,控制逻辑主体根据当前的状态和当前的请求计算对下层的需求。

(3)当单个策略的外界请求越来越丰富时,应识别请求的归属并分类,同归属或同类的请求先进行仲裁,形成该归属或该类请求的请求信号,再将各归属或各类的请求信号统一合在一起,求解出最终的请求。当请求过于复杂时,甚至可以将其划分为单独的策略。

(4)功能的实现一定会受到系统能力的限制,而系统能力往往由不同模块共同决定(一般是短板效应),因此,一个系统中往往存在一个"能力限制链",最终的系统能力取决于能力最小的模块,那么系统能力限制的计算也可以参照"能力限制链"。当限制链过于复杂时,甚至可以将其划分为单独的策略。

四、通用的策略逻辑性判断设计方法

1、处理存在冲突的需求

(1)处理各种各样可能存在冲突的需求时,需要进行优先级划分,可以直接列出优先级仲裁矩阵,如下所示,对有冲突的需求,逐一确认需求优先级。

|-----|-----|-----|-----|-----|-----|-----|
| | 需求A | 需求B | 需求C | 需求D | 需求E | 需求F |
| 需求A | / | | | | | |
| 需求B | / | / | | | | |
| 需求C | / | / | / | | | |
| 需求D | / | / | / | / | | |
| 需求E | / | / | / | / | / | |
| 需求F | / | / | / | / | / | / |

(2)确认优先级后,即可用选择逻辑做优先级仲裁的策略,如下所示。

2、处理存在工作状态/工作模式概念的需求

(1)硬件执行机构可能存在工作状态的概念,软件中的特殊功能可能存在工作模式的概念,无论是哪一种,在控制策略中都可以用状态机的形式进行维护。

(2)硬件执行机构状态机模板(具体需根据实际情况调整,此处只给出参考):

①假设硬件执行机构可能的初始状态为状态A或状态B,则可以统一设置一个初始化状态,如果识别到硬件执行机构处于状态A,则状态机触发E1条件,流转至状态A,否则如果识别到硬件执行机构处于状态B,则状态机触发E2条件,流转至状态B。

②假设硬件执行机构可以常保持在状态A或状态B,但两个状态之间切换需要经过一些过渡状态,比如状态C或状态D,则状态机中也应该对应地设置两个状态。过渡状态不一定要在控制策略中维护,但如果在过渡状态需要控制策略做出相应地动作,则必须维护过渡状态。

③硬件执行机构存在故障的可能,所以往往可以在状态机中设置异常状态,通往异常状态的转移线优先级也要是最高的,以便于进行统一的故障处理。

|--------------------|----------------------------------------------------------------|
| 转移线 (标号数字越大,优先级越高) | 条件 |
| E1 (初始化状态→状态A) | 硬件执行机构实际处于状态A |
| E2 (初始化状态→状态B) | 硬件执行机构实际处于状态B |
| E3 (初始化状态→异常状态) | 满足以下任一条件: ①硬件执行机构发生故障 ②硬件执行机构无法响应指令 ③硬件执行机构产生非预期的动作 |
| A1 (状态A→状态C) | 满足以下所有条件: ①外界/自身请求进入状态B ②硬件执行机构及系统能力允许进入状态B |
| A2 (状态A→异常状态) | 满足以下任一条件: ①硬件执行机构发生故障 ②硬件执行机构无法响应指令 ③硬件执行机构产生非预期的动作 |
| B1 (状态B→状态D) | 满足以下所有条件: ①外界/自身请求进入状态A ②硬件执行机构及系统能力允许进入状态A |
| B2 (状态B→异常状态) | 满足以下任一条件: ①硬件执行机构发生故障 ②硬件执行机构无法响应指令 ③硬件执行机构产生非预期的动作 |
| C1 (状态C→状态B) | 满足以下所有条件: ①外界/自身请求进入状态B ②硬件执行机构及系统能力允许进入状态B ③硬件执行机构实际状态已切换至状态B |
| C2 (状态C→状态A) | 满足以下任一条件: ①外界/自身请求进入状态A ②硬件执行机构实际状态仍为状态A |
| C3 (状态C→异常状态) | 满足以下任一条件: ①硬件执行机构发生故障 ②硬件执行机构无法响应指令 ③硬件执行机构产生非预期的动作 |
| D1 (状态D→状态A) | 满足以下所有条件: ①外界/自身请求进入状态A ②硬件执行机构及系统能力允许进入状态A ③硬件执行机构实际状态已切换至状态A |
| D2 (状态D→状态B) | 满足以下任一条件: ①外界/自身请求进入状态B ②硬件执行机构实际状态仍为状态B |
| D3 (状态D→异常状态) | 满足以下任一条件: ①硬件执行机构发生故障 ②硬件执行机构无法响应指令 ③硬件执行机构产生非预期的动作 |
| F (异常状态→初始化状态) | 满足以下所有条件: ①硬件执行机构故障恢复 ②硬件执行机构能够响应指令 |

|-------|-------------------|
| 状态 | 执行动作 |
| 初始化状态 | 请求硬件执行机构进入状态A或状态B |
| 状态A | 请求硬件执行机构进入状态A |
| 状态B | 请求硬件执行机构进入状态B |
| 状态C | 请求硬件执行机构进入状态B |
| 状态D | 请求硬件执行机构进入状态A |
| 异常状态 | 执行故障后处理方案 |

(3)软件特殊功能状态机模板(具体需根据实际情况调整,此处只给出参考):

①软件中的特殊功能如果不是保持工作,而是在特定情况下工作,则可以设置一个默认状态。

②特殊功能可能会分为几种模式,亦或者是从功能失能到功能激活存在一个过渡状态,针对这些情况都可以设置相应的状态。过渡状态不一定要在控制策略中维护,必须维护的情况是,处于默认状态时触发激活特殊功能的需求,但配合特殊功能的其它系统可能尚未准备好,其它系统做准备的期间,该特殊功能仍要在这个过渡状态做其它工作。

|--------------------------|-----------------------------------------------------------------------------|
| 转移线 (标号数字越大,优先级越高) | 条件 |
| E1 (初始化状态→进入模式2过渡状态) | 满足以下所有条件: ①存在需求请求进入模式2 ②所有相关系统的能力均允许进入模式2 ③进入模式2不会影响更高优先级的功能 |
| E2 (初始化状态→进入模式1过渡状态) | 满足以下所有条件: ①存在需求请求进入模式1 ②所有相关系统的能力均允许进入模式1 ③进入模式1不会影响更高优先级的功能 |
| A1 (进入模式1过渡状态→功能激活(模式1)) | 满足以下所有条件: ①存在需求请求进入模式1 ②所有相关系统的能力均允许进入模式1 ③进入模式1不会影响更高优先级的功能 ④相关系统已为模式1准备就绪 |
| A2 (进入模式1过渡状态→进入模式2过渡状态) | 满足以下所有条件: ①存在需求请求进入模式2 ②所有相关系统的能力均允许进入模式2 ③进入模式2不会影响更高优先级的功能 |
| A3 (进入模式1过渡状态→功能激活(模式2)) | 满足以下所有条件: ①存在需求请求进入模式2 ②所有相关系统的能力均允许进入模式2 ③进入模式2不会影响更高优先级的功能 ④相关系统已为模式2准备就绪 |
| A4 (进入模式1过渡状态→初始化状态) | 满足以下任一条件: ①不存在需求请求该功能激活 ②任一相关系统的能力不允许功能激活 ③该功能激活会影响更高优先级的功能 |
| B1 (进入模式2过渡状态→功能激活(模式2)) | 满足以下所有条件: ①存在需求请求进入模式2 ②所有相关系统的能力均允许进入模式2 ③进入模式2不会影响更高优先级的功能 ④相关系统已为模式2准备就绪 |
| B2 (进入模式2过渡状态→进入模式1过渡状态) | 满足以下所有条件: ①存在需求请求进入模式1 ②所有相关系统的能力均允许进入模式1 ③进入模式1不会影响更高优先级的功能 |
| B3 (进入模式2过渡状态→功能激活(模式1)) | 满足以下所有条件: ①存在需求请求进入模式1 ②所有相关系统的能力均允许进入模式1 ③进入模式1不会影响更高优先级的功能 ④相关系统已为模式1准备就绪 |
| B4 (进入模式2过渡状态→初始化状态) | 满足以下任一条件: ①不存在需求请求该功能激活 ②任一相关系统的能力不允许功能激活 ③该功能激活会影响更高优先级的功能 |
| C1 (功能激活(模式1)→进入模式2过渡状态) | 满足以下所有条件: ①存在需求请求进入模式2 ②所有相关系统的能力均允许进入模式2 ③进入模式2不会影响更高优先级的功能 |
| C2 (功能激活(模式1)→初始化状态) | 满足以下任一条件: ①不存在需求请求该功能激活 ②任一相关系统的能力不允许功能激活 ③该功能激活会影响更高优先级的功能 |
| D1 (功能激活(模式2)→进入模式1过渡状态) | 满足以下所有条件: ①存在需求请求进入模式1 ②所有相关系统的能力均允许进入模式1 ③进入模式1不会影响更高优先级的功能 |
| D2 (功能激活(模式2)→初始化状态) | 满足以下任一条件: ①不存在需求请求该功能激活 ②任一相关系统的能力不允许功能激活 ③该功能激活会影响更高优先级的功能 |

相关推荐
wostcdk1 小时前
基础算法学习1
算法
Yzzz-F1 小时前
2026牛客寒假算法基础集训营1
算法
野犬寒鸦1 小时前
Java8 ConcurrentHashMap 深度解析(底层数据结构详解及方法执行流程)
java·开发语言·数据库·后端·学习·算法·哈希算法
国科安芯1 小时前
中高轨激光通信卫星伺服控制器抗辐照电源模块设计
单片机·嵌入式硬件·架构
郝学胜-神的一滴1 小时前
在Vibe Coding时代,学习设计模式与软件架构
人工智能·学习·设计模式·架构·软件工程
m0_531237171 小时前
C语言-函数递归练习
算法
回敲代码的猴子1 小时前
2月18日打卡
算法
追随者永远是胜利者1 小时前
(LeetCode-Hot100)647. 回文子串
java·算法·leetcode·职场和发展·go
宇木灵2 小时前
C语言基础-六、指针
c语言·开发语言·学习·算法