第217章 Behavior State|行为状态
第216章建立:
Method
↓
Behavior
↓
Action
第217章进一步定义 Behavior 的内部状态结构,同时明确:
Behavior ≠ Action
217.1 Behavior 是行为过程
Behavior 不是一个动作,也不是几个 Action 的简单集合。
定义:
Behavior 是一个具有起始、过程、状态转换、反馈和结束条件的连续行为过程。
因此:
Behavior
│
├── Start
├── State
├── Transition
├── Action
├── Feedback
└── End
例如:
Move Object
是一个 Behavior。
它内部可能经历:
Approach
↓
Contact
↓
Grasp
↓
Move
↓
Hold
↓
Release
↓
Complete
这里整个过程:
Approach → Contact → Grasp → Move → Hold → Release
才叫:
Behavior
而不是其中某一个 Action。
217.2 Behavior ≠ Action
必须正式建立:
Behavior ≠ Action
二者关系是:
Behavior
↓
组织行为过程
↓
Action
↓
执行具体动作
可以定义为:
| 对象 | 定义 |
|---|---|
| Behavior | 行为过程 |
| Behavior State | 行为当前阶段 |
| Action | 具体动作 |
| Feedback | 动作结果/环境反馈 |
例如:
Behavior:
MoveObject
State:
Approach
Action:
MoveToTarget
然后:
Behavior:
MoveObject
State:
Grasp
Action:
CloseGripper
所以:
Behavior
│
├── State: Approach
│ └── Action: MoveToTarget
│
├── State: Contact
│ └── Action: DetectContact
│
├── State: Grasp
│ └── Action: EstablishGrip
│
├── State: Move
│ └── Action: MoveObject
│
└── State: Release
└── Action: ReleaseObject
一个 Behavior 可以包含多个 Action,但 Behavior 本身不是 Action。
217.3 为什么必须分开
如果:
Behavior = Action
那么系统会变成:
Method
↓
Action
↓
Result
这实际上没有真正的行为层。
系统只能知道:
做了什么
却无法表达:
正在进行什么行为
行为处于什么阶段
下一阶段是什么
为什么进入下一阶段
行为是否失败
行为是否完成
因此必须:
Method
↓
Behavior
↓
Behavior State
↓
Action
217.4 Behavior State
Behavior State 描述:
一个 Behavior 当前处于哪个阶段。
第一组标准状态:
Approach
Contact
Grasp
Move
Hold
Release
Failure
Complete
形成:
Behavior
│
├── Approach
├── Contact
├── Grasp
├── Move
├── Hold
├── Release
├── Failure
└── Complete
217.5 Approach
Approach
表示:
行为正在接近目标或进入目标作用范围。
例如:
Behavior:
MoveObject
State:
Approach
Action:
MoveToObject
注意:
Approach ≠ MoveToObject
前者是:
行为状态
后者是:
具体动作
217.6 Contact
Contact
表示:
Behavior 已经与目标建立有效接触或交互关系。
例如:
Approach
↓
Contact
转换依据不是固定时间,而可以来自:
distance
sensor
relation
observation
condition
因此:
Observation
↓
Condition
↓
Contact
217.7 Grasp
Grasp
表示:
Behavior 已经建立对目标的控制、保持或抓取关系。
这里 Grasp 应保持抽象。
它可以代表:
机械抓取
也可以表示:
建立控制关系
锁定对象
取得操作权
建立稳定连接
所以 ICAI 中:
Grasp
是一个行为状态概念,而不是单纯的机械手动作。
217.8 Move
Move
表示:
Behavior 正在改变自身、目标或相关对象的状态/位置。
例如:
Grasp
↓
Move
Action 可以是:
MoveObject
ChangePosition
Transfer
但:
Move
仍然只是当前 Behavior State。
217.9 Hold
Hold
表示:
Behavior 暂时维持当前状态、关系或控制条件。
例如:
Move
↓
Hold
可能意味着:
目标已经到位
但暂时不能释放
因此 Hold 不是“不做任何事情”。
它可能对应:
MaintainPosition
MaintainGrip
MaintainConnection
WaitCondition
217.10 Release
Release
表示:
Behavior 正在解除此前建立的控制、接触或保持关系。
例如:
Hold
↓
Release
Action:
OpenGripper
Disconnect
Unlock
TransferControl
但:
Release
仍然是行为状态。
217.11 Complete
Complete
表示:
当前 Behavior 的目标过程已经完成。
例如:
Release
↓
Complete
注意:
Behavior Complete
不等于:
System Complete
也不等于:
Task Complete
它只表示:
当前 Behavior
完成。
217.12 Failure
Failure
表示:
当前 Behavior 无法按照当前行为路径继续完成。
例如:
Approach
↓
Contact
↓
Grasp
↓
Failure
Failure 是一个正式的 Behavior State。
它可以触发:
Failure
↓
Feedback
↓
State Update
↓
Method Evaluation
从而产生:
New Method
↓
New Behavior
因此:
Failure
不是系统终止状态。
它是一个可被系统处理的行为状态。
217.13 Behavior State Transition
这些状态不是孤立的。
基本路径:
Approach
↓
Contact
↓
Grasp
↓
Move
↓
Hold
↓
Release
↓
Complete
失败路径:
Approach ──┐
Contact ───┤
Grasp ─────┤
Move ──────┤
Hold ──────┤
Release ───┤
↓
Failure
所以:
Behavior State
↓
Condition
↓
Transition
↓
Next Behavior State
217.14 一个 Behavior 中可以有多个 Action
例如:
Behavior:
MoveObject
可以产生:
Approach
↓
Action: MoveToTarget
Contact
↓
Action: DetectContact
Grasp
↓
Action: EstablishGrip
Move
↓
Action: MoveObject
Hold
↓
Action: MaintainPosition
Release
↓
Action: ReleaseObject
Complete
因此:
一个 Behavior
↓
多个 Behavior State
↓
多个 Action
这就是:
Behavior ≠ Action
最直接的工程证明。
217.15 Behavior 的本质
因此第217章应该正式定义:
Behavior
=
State Machine
+
Action Execution
+
Feedback
而:
Action
=
具体执行单元
进一步:
Behavior
↓
描述“行为过程”
Behavior State
↓
描述“行为过程现在处于哪里”
Action
↓
描述“当前具体做什么”
三层完全不同。
217.16 工程结构
可以建立:
Behavior.php
BehaviorState.php
BehaviorTransition.php
BehaviorStateMachine.php
关系:
Behavior
│
├── BehaviorStateMachine
│ │
│ ├── Approach
│ ├── Contact
│ ├── Grasp
│ ├── Move
│ ├── Hold
│ ├── Release
│ ├── Failure
│ └── Complete
│
└── Action
├── Action A
├── Action B
└── Action C
217.17 核心数据结构
Behavior:
class Behavior
{
protected string $behaviorId;
protected ?Method $method = null;
protected ?BehaviorState $currentState = null;
protected array $stateHistory = [];
protected array $actions = [];
protected string $status = 'created';
}
Behavior State:
class BehaviorState
{
public const APPROACH = 'approach';
public const CONTACT = 'contact';
public const GRASP = 'grasp';
public const MOVE = 'move';
public const HOLD = 'hold';
public const RELEASE = 'release';
public const FAILURE = 'failure';
public const COMPLETE = 'complete';
}
核心关系:
Behavior
↓
Current Behavior State
↓
Current Action
而不是:
Behavior = Current Action
217.18 与前面 Method 的关系
现在整个结构变成:
Cognition
↓
Dynamic Method
↓
Method Evaluation
↓
Method Selection
↓
Method
↓
Behavior
↓
Behavior State
↓
Action
↓
Feedback
其中:
Method
决定:
采用什么方法
Behavior
决定:
这个方法当前如何形成连续行为过程
Behavior State
决定:
行为现在处于哪个阶段
Action
决定:
当前执行哪个具体动作
217.19 第217章最重要的架构原则
正式确定:
Method ≠ Behavior
Behavior ≠ Behavior State
Behavior State ≠ Action
Action ≠ Feedback
形成:
Method
↓
Behavior
↓
Behavior State
↓
Action
↓
Feedback
每层职责分别是:
Method
方法结构
Behavior
行为过程
Behavior State
行为阶段
Action
具体动作
Feedback
执行结果与环境反馈
217.20 本章最终模型
Method
│
▼
Behavior
│
┌───────┴───────┐
│ │
▼ ▼
State Machine Actions
│
▼
┌───────────┐
│ Approach │
└─────┬─────┘
↓
┌───────────┐
│ Contact │
└─────┬─────┘
↓
┌───────────┐
│ Grasp │
└─────┬─────┘
↓
┌───────────┐
│ Move │
└─────┬─────┘
↓
┌───────────┐
│ Hold │
└─────┬─────┘
↓
┌───────────┐
│ Release │
└─────┬─────┘
↓
┌───────────┐
│ Complete │
└───────────┘
任意阶段
│
▼
Failure
第217章最终定义
Behavior 是一个连续的行为过程,不是一个具体动作。Behavior 通过 Behavior State 描述自身所处阶段,通过 State Transition 在阶段之间转换,并在每个阶段调用一个或多个 Action 完成具体执行。
因此正式确定:
Method
↓
Behavior
↓
Behavior State
↓
Action
其中最关键的一条工程原则:
Behavior = Process
Action = Operation
Behavior 是“正在进行什么行为过程”,Action 是“当前具体做什么”。
这样下一章如果进入 Behavior Transition|行为转换,就可以专门解决 Approach → Contact → Grasp → Move……为什么转换、依据什么转换、什么时候转换,而不再把转换逻辑混进 Action。