第17章 对象动态状态
对象不是只有“是什么”,也不是只有“具有什么”,还存在“现在处于什么状态”。状态不是对象预先固定的标签,而是对象的属性、属性变化、属性关系以及所处环境在特定时间共同形成的动态结果。
前面的章节已经建立了三个重要层次:
对象
↓
属性
↓
属性变化与属性关系
第十二章解决的是:
对象具有什么。
第十四章解决的是:
属性如何变化。
第十六章进一步解决:
属性之间如何共同变化、相互关联和产生影响。
因此,第十七章自然进入一个更重要的问题:
这些变化综合起来以后,对象现在到底处于什么状态?
例如,一个鸡蛋在机器人手中:
压力正常
摩擦稳定
没有明显滑移
形变接近零
系统不能只说:
Pressure = X
Friction = Y
Slip = Z
Deformation = W
而应该进一步形成一个认知:
当前状态 = 稳定抓取
如果随后发生:
滑移增加
形变增加
压力持续增加
那么对象状态就应该发生变化:
稳定抓取
↓
抓取风险
↓
损伤风险
因此:
对象状态是对对象当前动态变化的综合认知。
17.1 什么是对象动态状态
首先需要区分三个概念:
对象
属性
状态
例如:
对象:鸡蛋
属性:
重量
硬度
表面摩擦
压力
形变
温度
状态:
静止
接触
抓取
滑移
受压
破损
但是,这里的“状态”不能简单理解成一个预先定义好的名称。
真正的动态状态应该来自对象当前的实际表现。
因此可以定义:
对象动态状态,是对象在特定时间、特定环境和特定任务条件下,其属性值、属性变化及属性关系共同形成的综合状态。
可以抽象为:
ObjectState(t)
=
F(
Attributes(t),
Changes(t),
Relations(t),
Context(t),
Time(t)
)
也就是说:
对象状态
=
属性
+
变化
+
关系
+
环境
+
时间
17.2 状态不是属性
这是认知系统设计中非常重要的区分。
例如:
Pressure = 3N
是一个属性值。
而:
Stable Grip
是一个状态。
二者不是同一个层次。
可以表示为:
属性值
↓
属性变化
↓
属性关系
↓
状态判断
例如:
Pressure = 3N
Friction = 0.8
Slip = 0
Deformation = 0.02
这些都是数据。
经过综合分析以后:
Stable Grip
才是认知系统形成的状态。
所以:
状态不是某一个传感器直接测出来的数据,而是认知系统根据多个数据及其动态关系形成的结果。
17.3 为什么需要状态
如果系统只有属性,没有状态,那么系统就会变成:
Sensor
↓
Data
↓
Data
↓
Data
↓
Data
它知道很多数据,却不知道这些数据意味着什么。
例如:
Pressure = 4
Slip = 0.3
Deformation = 0.1
这些数据本身并不能直接告诉系统:
鸡蛋现在是否安全?
只有形成状态:
ObjectState = Risk
系统才可以进一步决策:
Risk
↓
调整抓取
因此状态承担了一个重要作用:
把大量动态属性转换成可供认知和行为使用的中间认知结构。
17.4 状态不是固定标签
传统程序通常喜欢这样定义:
STATE_IDLE
STATE_RUNNING
STATE_STOP
STATE_ERROR
这种方法对于简单机械系统非常有效。
但是人的认知并不是这样工作的。
现实中的状态往往存在连续变化。
例如一个鸡蛋被抓取:
未接触
↓
开始接触
↓
轻微接触
↓
稳定接触
↓
开始抓取
↓
稳定抓取
↓
轻微滑移
↓
明显滑移
↓
形变增加
↓
损伤风险
这不是简单的:
A → B → C
而是多个属性持续变化形成的动态过程。
因此:
动态状态应该允许连续变化、渐进变化和状态之间的过渡。
17.5 状态具有时间性
对象状态必须与时间联系起来。
例如:
t1
Pressure ↑
Slip = 0
可能是:
Stable
到了:
t2
Pressure ↑
Slip ↑
状态可能变成:
Risk
到了:
t3
Pressure ↑↑
Slip ↑↑
Deformation ↑
状态可能变成:
Damage Risk
因此:
State(t1)
≠
State(t2)
≠
State(t3)
即使对象始终是同一个鸡蛋。
所以:
对象身份可以保持稳定,而对象状态可以持续变化。
17.6 状态是一个时间窗口,而不是一个瞬间
如果只看某一个瞬间的数据,很容易产生错误判断。
例如:
t1:Slip = 0.1
单独看并不能确定是否正在滑移。
因为可能是:
0.2 → 0.15 → 0.1
也可能是:
0.01 → 0.05 → 0.1
两者当前值相同,但是趋势完全不同。
因此状态识别必须考虑一段时间:
t-3
t-2
t-1
t
形成:
State(t)
=
F(
History Window
)
也就是说:
当前状态不仅由当前值决定,还由近期变化历史决定。
17.7 状态由变化趋势参与形成
假设:
Deformation = 0.1
如果过去一直是:
0.10
0.10
0.10
0.10
那么系统可能判断:
稳定
但是如果过去是:
0.02
0.04
0.06
0.08
0.10
那么系统应该判断:
形变持续增加
两者的当前值完全一样。
但认知状态不同。
因此:
状态不仅依赖属性值,还依赖属性的变化方向和趋势。
可以表示为:
State
=
Value
+
Change
+
Rate
+
Trend
17.8 状态由多个属性共同形成
现实中的状态很少由单个属性决定。
例如:
抓取稳定
可能需要同时考虑:
Pressure
Friction
Slip
Contact
Motion
Deformation
因此:
StableGrip
=
F(
Pressure,
Friction,
Slip,
Contact,
Motion,
Deformation
)
这并不是说必须使用一个固定公式。
理论上的重点是:
状态是多个属性及其关系的综合结果。
这与前一章的“属性协同变化”直接连接。
17.9 状态存在层级
对象状态可以分成多个层级。
例如鸡蛋:
第一层:物理状态
接触
受压
运动
静止
第二层:交互状态
被抓取
被移动
被释放
发生滑移
第三层:安全状态
安全
风险
高风险
损伤
第四层:任务状态
抓取成功
移动中
等待放置
放置完成
因此:
Object
↓
Physical State
↓
Interaction State
↓
Safety State
↓
Task State
同一个对象可以同时具有多个状态维度。
例如:
Physical State = Moving
Interaction State = Gripped
Safety State = Safe
Task State = Transporting
这比简单定义:
State = Moving
更加接近真实认知。
17.10 状态不是单一变量
因此不能简单设计:
state = "stable"
更合理的是:
ObjectState
{
physical,
interaction,
safety,
task,
confidence,
timestamp
}
例如:
ObjectState
{
physical: moving,
interaction: gripping,
safety: stable,
task: transporting,
confidence: 0.94,
timestamp: t
}
这里出现了一个重要概念:
状态本身也具有认知置信度。
因为现实环境存在噪声和不确定性。
系统不能总是认为:
Stable = TRUE
而应该允许:
Stable = 0.94
Risk = 0.06
这就为后面的概率认知理论建立基础。
17.11 状态转换
对象状态不会凭空改变。
它通常是由属性变化推动的。
例如:
Stable
↓
Slip ↑
↓
Risk
继续:
Risk
↓
Deformation ↑
↓
Damage Risk
继续:
Damage Risk
↓
Deformation ↑↑
↓
Damage
因此:
属性变化
↓
状态变化
可以形成:
State Transition
即:
状态转换。
17.12 状态转换不是简单阈值
如果使用传统方法,可以写:
if slip > 10:
state = "risk"
这种方式简单,但存在明显问题。
因为:
Slip = 10.1
与:
Slip = 9.9
可能并没有本质区别。
而且如果:
Slip:
9.0
9.2
9.4
9.6
9.8
10.0
10.2
系统真正需要知道的是:
滑移是否正在持续增加?
而不是:
当前是否刚好超过10?
所以动态状态需要考虑:
Value
+
Trend
+
Duration
+
Rate
+
Other Attributes
17.13 状态转换具有条件
例如:
Pressure ↑
本身不一定意味着:
Risk
如果:
Friction ↑
Slip ↓
Deformation ≈ 0
可能仍然是:
Stable
而如果:
Pressure ↑
Friction ≈ constant
Slip ↑
Deformation ↑
则风险明显增加。
因此:
状态转换不是由单一属性触发,而可能由多个属性的协同变化共同触发。
可以表示为:
Condition
=
A
+
B
+
C
+
Relation(A,B,C)
17.14 状态具有上下文
同一个动态变化,在不同任务中可能对应不同状态。
例如:
Pressure ↑
对于:
抓鸡蛋
可能代表:
Damage Risk ↑
但对于:
按下按钮
可能代表:
Action Progress ↑
因此:
State
不能完全脱离:
Task
Context
Goal
来定义。
可以表示为:
Object State
=
Object
+
Attributes
+
Changes
+
Relations
+
Context
+
Goal
这意味着:
状态是情境化的。
17.15 状态与任务目标
进一步来看,同一个对象可能存在多个评价层面的状态。
例如:
鸡蛋
当前:
Physical State = Stable
但是:
Task State = Not Completed
同时:
Safety State = Safe
因此:
物理稳定
≠
任务完成
这一区分非常重要。
机器人不能因为:
对象稳定
就认为:
任务完成
它必须同时判断:
Object State
+
Task State
17.16 状态与认知
到这里可以看到:
属性
↓
变化
↓
关系
↓
状态
↓
认知
状态实际上成为属性世界与认知世界之间的重要桥梁。
例如:
传感器
↓
Pressure
Friction
Slip
Deformation
↓
Dynamic Relation
↓
Stable Grip
再进一步:
Stable Grip
↓
当前抓取安全
↓
继续保持动作
因此:
状态是认知系统对动态对象进行压缩、组织和解释的重要中间结构。
17.17 状态不是终点
状态形成以后,系统还必须继续观察。
例如:
Stable
并不意味着永远稳定。
下一时刻可能:
Stable
↓
Slip Increasing
↓
Risk
因此状态本身也必须动态更新:
State(t)
↓
New Data
↓
New Relations
↓
State(t+1)
可以形成:
State Update
即:
状态更新。
17.18 状态更新是持续认知
传统程序可能:
read sensor
check threshold
execute action
而动态认知系统则是:
observe
↓
update attributes
↓
update changes
↓
update relations
↓
update state
↓
update cognition
↓
decide
↓
act
↓
observe again
这形成一个连续过程:
感知
↓
状态更新
↓
认知
↓
行为
↓
环境变化
↓
感知
因此:
动态状态使认知从一次性判断变成连续过程。
17.19 鸡蛋抓取中的完整状态演化
现在把前面建立的理论完整应用到鸡蛋。
最开始:
Object = Egg
Contact = 0
Pressure = 0
Slip = 0
Deformation = 0
系统状态:
Physical = Rest
Interaction = No Contact
Safety = Safe
Task = Not Started
机器人开始接触。
Contact ↑
Pressure ↑
系统进入:
Interaction = Contacting
继续增加接触压力:
Pressure ↑
Friction ↑
Slip ≈ 0
Deformation ≈ 0
系统形成:
Interaction = Gripping
Safety = Stable
如果继续加力:
Pressure ↑
Friction ≈ constant
Slip ↑
系统发现:
Slip Trend = Increasing
于是:
Safety
Stable
↓
Risk
如果继续:
Pressure ↑
Slip ↑
Deformation ↑
系统进一步形成:
Safety = Damage Risk
如果最终:
Deformation ↑↑
Crack = TRUE
那么:
Safety = Damaged
于是完整状态链变成:
No Contact
↓
Contact
↓
Gripping
↓
Stable
↓
Slip Risk
↓
Damage Risk
↓
Damage
这就是:
对象动态状态的演化过程。
17.20 状态的真正价值:预测
如果系统只记录:
当前状态 = Risk
还不够。
真正有价值的是:
当前状态正在向哪里变化?
例如:
Risk
可能有两种趋势。
第一种:
Risk
↓
Slip ↓
Deformation ↓
↓
Stable
说明风险正在消失。
第二种:
Risk
↓
Slip ↑
Deformation ↑
↓
Damage Risk
说明风险正在扩大。
因此状态本身也需要:
State
+
State Trend
即:
状态趋势。
17.21 状态趋势
可以定义:
StateTrend
=
CurrentState
+
PreviousState
+
TransitionDirection
例如:
Stable → Risk
表示:
风险增加
而:
Risk → Stable
表示:
风险降低
因此认知系统不仅应该知道:
现在是什么状态
还应该知道:
状态正在如何变化
这为下一阶段的预测和决策提供基础。
17.22 对象动态状态的工程结构
从理论工程角度,可以把对象动态状态抽象成:
ObjectState
├── object
├── attributes
├── changes
├── relations
├── context
├── task
├── state
├── trend
├── confidence
└── timestamp
例如:
ObjectState
{
object: Egg,
attributes: {
pressure: ...,
friction: ...,
slip: ...,
deformation: ...
},
changes: {
pressure: increasing,
slip: increasing,
deformation: increasing
},
relations: {
pressure_to_slip: positive,
pressure_to_deformation: positive
},
state: {
physical: gripping,
safety: risk
},
trend: increasing_risk,
confidence: 0.93,
timestamp: ...
}
这里的结构已经开始从理论进入工程。
但需要注意:
工程实现不应该反过来限制理论。
理论先定义:
Object
Attribute
Change
Relation
State
工程代码再负责实现它们。
17.23 状态不是数据库里的一个字段
如果只设计:
object.state = "stable"
实际上会丢失大量信息。
因为:
stable
无法说明:
为什么稳定?
哪些属性稳定?
哪些属性正在变化?
变化速度是多少?
风险是否正在增加?
之前是什么状态?
接下来可能是什么状态?
因此:
对象状态应该是一个认知结构,而不是一个简单字符串。
它至少应该能够追溯:
State
↓
Evidence
↓
Attributes
↓
Changes
↓
Relations
这样认知结果才具有可解释性。
17.24 状态与证据
任何状态都应该有对应证据。
例如:
State = Stable
证据可能是:
Slip ≈ 0
Deformation ≈ 0
Pressure stable
Contact stable
因此:
State
=
Conclusion
而:
Attributes + Changes + Relations
=
Evidence
于是:
Evidence
↓
State
↓
Cognition
这为后面的概率认知建立了基础。
因为未来可以进一步表示:
Stable
Probability = 0.94
其背后仍然存在:
Evidence
17.25 本章建立的核心模型
经过前面章节的逐步推进,现在可以形成完整结构:
对象
↓
对象属性
↓
属性值
↓
属性状态
↓
属性变化
↓
属性变化关系
↓
属性协同
↓
对象动态状态
↓
状态趋势
↓
认知
进一步形成:
对象动态状态
↓
当前认知
↓
决策
↓
行为
↓
对象发生变化
↓
属性重新变化
↓
对象动态状态更新
这意味着:
对象状态是一个持续更新的认知过程,而不是一次计算产生的固定结果。
17.26 本章核心结论
第十七章最终建立以下理论:
第一,对象具有状态
对象不仅有:
是什么
还具有:
现在处于什么状态
第二,状态来自属性协同
状态不是单一属性的结果,而是:
属性
+
变化
+
关系
+
环境
+
时间
共同形成的。
第三,状态具有时间性
State(t)
会随着对象变化而更新:
State(t)
→
State(t+1)
第四,状态具有趋势
系统不仅需要判断:
现在稳定还是危险
还需要判断:
正在变稳定
还是:
正在变危险
第五,状态是认知的重要中间层
最终形成:
感知元素
↓
对象
↓
属性
↓
动态属性
↓
属性关系
↓
对象动态状态
↓
认知
因此,本章最重要的一句话是:
对象动态状态不是对象预先拥有的标签,而是认知系统根据对象在特定时间和环境中的属性、变化及其关系持续形成和更新的动态认知结构。
而到这里,前面第一篇和第二篇之间的理论连接已经越来越清晰:
感觉
↓
感知
↓
元素
↓
对象
↓
属性
↓
变化
↓
关系
↓
动态状态
下一章进入第18章:认知匹配。
这一章将正式回答一个更核心的问题:
当系统已经知道“对象是什么”“对象具有什么”“对象正在发生什么”之后,它究竟如何把当前感知到的状态与已有知识、目标和可能行为进行匹配,从而形成真正的认知?