第253章 Scene Model|场景模型
253.1 提出背景
第252章建立了 Object Model|对象模型。
对象模型解决的是单个现实对象在机器系统中的结构化表示:
Object
↓
Identity
+
Class
+
Attribute
+
Relation
+
State
↓
Object Model
但是,现实世界并不是由孤立对象组成的。
一个真实行为通常同时涉及多个对象、多个属性、多个关系以及多个状态。例如“手抓取鸡蛋”这一行为,并不是单纯由一个 Egg Object 就能够描述,而是至少涉及:
Hand
Egg
Table
Space
Position
Distance
Contact
Force
Pressure
Velocity
Stability
这些对象、属性、关系和状态在特定时间、特定空间和特定目标条件下组合起来,才形成机器当前面对的一个现实场景。
因此,ICAI需要在Object Model之上建立:
Scene Model|场景模型
Scene Model不是一张静态的“场景图片”,而是机器对当前现实世界中多个对象及其动态关系进行结构化组织的运行模型。
其基本结构为:
Real World
↓
Real-Time Data
↓
Element
↓
Object Instance
↓
Object Model
↓
Relation
↓
State
↓
Scene Model
↓
Cognitive Model
因此:
Object Model→Scene Model→Cognitive ModelObject\ Model \rightarrow Scene\ Model \rightarrow Cognitive\ Model
构成ICAI从“对象认知”进入“场景认知”的重要工程层。
253.2 Scene Model 的定义
Scene Model|场景模型,是ICAI用于描述特定时间和空间条件下,多个对象、对象属性、对象关系、对象状态以及环境条件所形成的整体动态结构。
可以定义:
SMt=F(Ot,At,Rt,St,Et,Pt,Gt)SM_t=F(O_t,A_t,R_t,S_t,E_t,P_t,G_t)
其中:
- SMtSM_t:时间 tt 的Scene Model;
- OtO_t:当前对象集合;
- AtA_t:对象属性集合;
- RtR_t:对象关系集合;
- StS_t:对象状态集合;
- EtE_t:环境信息;
- PtP_t:空间信息;
- GtG_t:当前目标;
- FF:场景模型构造函数。
因此,一个场景并不是:
几个 Object
简单相加。
而是:
Objects
+
Attributes
+
Relations
+
States
+
Environment
+
Space
+
Time
+
Goal
↓
Scene Model
253.3 Scene 与 Object 的区别
必须明确区分:
Object
Object Model
Scene
Scene Model
Object|对象
表示现实世界中的单个实体。
例如:
Egg_001
Object Model|对象模型
描述这个具体对象当前的完整结构:
Egg_001
├── Position
├── Weight
├── Size
├── Surface
├── Velocity
└── State
Scene|场景
表示多个对象在一定时间和空间条件下形成的整体现实结构。
例如:
Hand_001
Egg_001
Table_001
以及:
Hand → Near → Egg
Egg → On → Table
Hand → Above → Egg
共同形成一个现实场景。
Scene Model|场景模型
则是机器对这一现实场景进行结构化表示后的软件运行模型。
因此:
ObjectModel⊂SceneModelObjectModel \subset SceneModel
对象模型是场景模型的重要组成部分。
253.4 场景不是对象的简单集合
这是ICAI Scene Model的重要理论基础。
如果只有:
Hand
Egg
Table
机器只能知道三个对象存在。
但机器还不知道:
Hand 与 Egg 的关系
Egg 与 Table 的关系
Hand 与 Egg 的距离
Hand 是否接触 Egg
Egg 是否稳定
Hand 是否正在移动
当前是否存在抓取条件
因此:
Scene≠∑ObjectScene \neq \sum Object
更准确地说:
Scene=F(Object,Relation,State,Environment,Space,Time)Scene=F(Object,Relation,State,Environment,Space,Time)
也就是说:
场景是对象及其动态结构关系的整体。
这也是Scene Model与Object Model最重要的区别之一。
253.5 Scene Model 的基本结构
ICAI中的Scene Model可以建立为:
Scene Model
│
├── Scene Identity
├── Scene Type
├── Time
├── Space
├── Environment
│
├── Objects
│ ├── Object Model
│ ├── Object Model
│ └── Object Model
│
├── Relations
│ ├── Spatial Relation
│ ├── Physical Relation
│ ├── Functional Relation
│ └── Dynamic Relation
│
├── States
│
└── Goal
其中:
Scene Identity|场景身份
用于识别当前场景实例。
Scene Type|场景类型
用于表示场景的结构类别。
Time|时间
表示当前场景对应的时间。
Space|空间
表示场景中的空间结构。
Environment|环境
表示对象所处的外部环境条件。
Objects|对象集合
保存当前场景中的对象模型。
Relations|关系集合
保存对象之间的动态关系。
States|状态集合
保存当前场景及其对象状态。
Goal|目标
表示当前行为环境下的目标条件。
253.6 Scene Instance|场景实例
与Object Instance一样,ICAI中的Scene也必须实例化。
例如:
Scene Class
↓
Scene Instance
可以产生:
scene_001
scene_002
scene_003
它们都可以属于:
ManipulationScene
但是具体内容完全不同。
例如:
scene_001
├── Hand_001
├── Egg_001
└── Table_001
另一个场景:
scene_002
├── Hand_001
├── Glass_001
└── Table_001
还有:
scene_003
├── RobotArm_001
├── Bottle_001
├── Table_001
└── Box_001
因此,ICAI不能把场景写成:
EggGrabbingScene
GlassGrabbingScene
BottleGrabbingScene
分别建立完全独立的程序。
而应该建立:
Scene Class
↓
Scene Instance
↓
Object Models
+
Relations
+
States
↓
Current Scene
这保证场景模型具有通用性。
253.7 动态场景模型
现实世界不存在永久不变的场景。
因此:
SM(t0)→SM(t1)→SM(t2)→SM(t3)SM(t_0)\rightarrow SM(t_1)\rightarrow SM(t_2)\rightarrow SM(t_3)
例如最初:
t0
Hand
Egg
Table
Hand → Far → Egg
Egg → On → Table
Egg = Static
然后:
t1
Hand
Egg
Table
Hand → Near → Egg
Egg → On → Table
Hand = Moving
Egg = Static
继续变化:
t2
Hand
Egg
Table
Hand → Contact → Egg
Egg → On → Table
Egg = Contact
继续:
t3
Hand
Egg
Table
Hand → Grasp → Egg
Egg → HeldBy → Hand
Egg = Grasped
因此:
场景不是一次建立完成
↓
而是持续更新
可以表示:
SMt+1=F(SMt,Dt+1)SM_{t+1}=F(SM_t,D_{t+1})
其中:
- SMtSM_t:当前场景模型;
- Dt+1D_{t+1}:下一时刻的新实时数据;
- FF:场景更新函数;
- SMt+1SM_{t+1}:新的场景模型。
253.8 场景中的对象动态变化
场景变化可能来自不同来源。
对象增加
Scene(t)
+
New Object
↓
Scene(t+1)
例如机器人看到一个新物体。
对象消失
Scene(t)
-
Object
↓
Scene(t+1)
例如物体离开感知范围。
对象属性变化
Object
↓
Attribute(t)
→
Attribute(t+1)
例如:
Position
Velocity
Force
Pressure
Temperature
发生变化。
对象关系变化
Near
↓
Contact
↓
Grasp
↓
Release
对象状态变化
Static
↓
Moving
↓
Contact
↓
Grasping
↓
Held
因此Scene Model必须能够同时处理:
对象变化
+
属性变化
+
关系变化
+
状态变化
253.9 Scene Model 与空间结构
场景模型具有明显的空间性质。
例如:
Hand
Egg
Table
不仅需要记录三个对象,还需要记录:
Hand Position
Egg Position
Table Position
以及:
Distance(Hand,Egg)
Distance(Egg,Table)
Direction(Hand,Egg)
Height(Egg,Table)
因此空间关系可以表示为:
Rs(Oi,Oj,t)R_s(O_i,O_j,t)
其中:
- RsR_s:空间关系;
- OiO_i:对象 ii;
- OjO_j:对象 jj;
- tt:当前时间。
例如:
Hand
↓
Above
↓
Egg
或者:
Egg
↓
On
↓
Table
这些空间关系是场景模型的重要组成部分。
253.10 Scene Model 与动态属性
第210章已经建立属性向量。
场景模型可以进一步形成场景属性集合:
Ascene(t)={A1(t),A2(t),…,An(t)}A_{scene}(t)= \{A_1(t),A_2(t),…,A_n(t)\}
其中:
- Ascene(t)A_{scene}(t):当前场景属性集合;
- Ai(t)A_i(t):第 ii 个对象或者场景属性。
例如:
Scene Attribute
├── Hand Position
├── Egg Position
├── Table Position
├── Hand Velocity
├── Egg Velocity
├── Hand-Egg Distance
├── Contact Force
├── Pressure
└── Stability
这些数据可以进一步形成场景状态向量:
Sscene(t)=F(Ascene(t),Rscene(t))S_{scene}(t)=F(A_{scene}(t),R_{scene}(t))
这样,场景就从“对象集合”进入了“可计算场景”。
253.11 Scene State|场景状态
单个对象具有Object State。
整个场景同样可以具有Scene State。
例如:
Scene State = Idle
表示当前场景没有发生重要行为。
随后:
Scene State = Approaching
表示:
Hand → Moving → Egg
Distance ↓
随后:
Scene State = Contacting
表示:
Distance ≈ 0
Contact = True
随后:
Scene State = Grasping
表示:
Contact = True
Pressure > Threshold
Force > Threshold
Stability = Increasing
因此:
Sscene(t)=F(Ot,Rt,At,St,Gt)S_{scene}(t)=F(O_t,R_t,A_t,S_t,G_t)
场景状态不是人为预先指定的固定标签,而是可以通过对象、属性、关系和条件计算得到。
253.12 Scene Model 与 Goal
场景模型本身描述的是:
当前世界是什么样。
而目标描述的是:
当前需要达到什么状态。
例如:
Current Scene
↓
Egg on Table
目标:
Goal
↓
Egg held safely
于是机器需要比较:
Scurrentvs.SgoalS_{current}\quad vs.\quad S_{goal}
即:
Current Scene
↓
Current State
↓
Goal State
↓
Difference
↓
Method
因此Scene Model必须能够向Cognitive Model提供完整的当前场景。
253.13 Scene Model 与 Cognitive Model
第251章建立了Cognitive Model。
第252章建立了Object Model。
本章进一步建立Scene Model。
三者可以形成:
Object Model
↓
Scene Model
↓
Cognitive Model
其职责分别为:
Object Model
单个对象是什么?
Scene Model
多个对象当前组成了什么现实结构?
Cognitive Model
机器当前如何理解这个场景,并准备采取什么方法?
因此:
CMt=F(SMt,Gt)CM_t=F(SM_t,G_t)
其中:
- CMtCM_t:当前认知模型;
- SMtSM_t:当前场景模型;
- GtG_t:当前目标。
这说明:
Scene Model是Cognitive Model的重要现实世界输入。
253.14 Scene Model 的核心计算结构
ICAI可以把场景计算进一步抽象为:
SMt=F(Ot,At,Rt,St,Pt,Et)SM_t= F( O_t, A_t, R_t, S_t, P_t, E_t )
之后:
CMt=F(SMt,Gt)CM_t=F(SM_t,G_t)
再之后:
Mt=F(CMt)M_t=F(CM_t)
最终:
Actiont=F(Mt,SMt)Action_t=F(M_t,SM_t)
形成:
Objects
↓
Object Models
↓
Scene Model
↓
Cognitive Model
↓
Method
↓
Action
这就建立了机器从现实世界到行为输出的结构化计算链。
253.15 Scene Model 的 PHP OOP 实现
在PHP工程中,可以建立通用的 SceneModel 类。
class SceneModel
{
protected $identity;
protected $type;
protected $objects = array();
protected $relations = array();
protected $states = array();
protected $environment = array();
protected $space = array();
protected $goal = null;
protected $timestamp;
public function __construct($identity, $type = null)
{
$this->identity = $identity;
$this->type = $type;
$this->timestamp = time();
}
public function addObject($objectModel)
{
$this->objects[] = $objectModel;
}
public function addRelation($relation)
{
$this->relations[] = $relation;
}
public function setState($name, $value)
{
$this->states[$name] = $value;
}
public function setEnvironment($name, $value)
{
$this->environment[$name] = $value;
}
public function setSpace($name, $value)
{
$this->space[$name] = $value;
}
public function setGoal($goal)
{
$this->goal = $goal;
}
public function getObjects()
{
return $this->objects;
}
public function getRelations()
{
return $this->relations;
}
public function getStates()
{
return $this->states;
}
}
这个类的关键不是代码数量,而是建立一个明确的软件对象结构:
SceneModel
├── Objects
├── Relations
├── States
├── Environment
├── Space
└── Goal
253.16 Object Model 加入 Scene Model
例如建立三个对象:
$hand = new ObjectModel('hand_001', 'Hand');
$egg = new ObjectModel('egg_001', 'Egg');
$table = new ObjectModel('table_001', 'Table');
然后建立场景:
$scene = new SceneModel(
'scene_001',
'ManipulationScene'
);
$scene->addObject($hand);
$scene->addObject($egg);
$scene->addObject($table);
随后加入关系:
Hand → Near → Egg
Egg → On → Table
Hand → Above → Egg
形成:
SceneModel
│
├── Hand_001
├── Egg_001
├── Table_001
│
├── Near(Hand, Egg)
├── On(Egg, Table)
└── Above(Hand, Egg)
这就形成一个真正可以被程序计算的场景实例。
253.17 Scene Model 的动态更新机制
Scene Model必须支持实时更新。
可以设计:
Scene Update
│
├── Update Object
├── Add Object
├── Remove Object
├── Update Attribute
├── Update Relation
├── Update State
├── Update Environment
└── Update Space
因此:
Real-Time Data
↓
Object Update
↓
Relation Update
↓
State Calculation
↓
Scene Update
例如:
t0
Hand Far Egg
更新:
t1
Hand Near Egg
再更新:
t2
Hand Contact Egg
再更新:
t3
Hand Grasp Egg
这些不是四个独立场景程序,而是:
SMt0→SMt1→SMt2→SMt3SM_{t0}\rightarrow SM_{t1}\rightarrow SM_{t2}\rightarrow SM_{t3}
同一个Scene Instance持续变化。
253.18 Scene Model 与行为方法
当Scene Model建立完成后,方法系统就不需要直接面对大量原始数据。
它可以直接读取:
Scene Model
↓
Current State
↓
Relevant Objects
↓
Relevant Relations
↓
Attribute Vector
↓
Method
例如抓取行为不需要直接写:
if object == egg
而可以基于:
Object
+
Distance
+
Position
+
Velocity
+
Contact
+
Force
+
Pressure
+
Stability
进行计算。
于是:
Scene Model
↓
Current Object State
↓
Method Parameters
↓
Behavior Calculation
这样就为第254章及后续的Method Model、Behavior Model建立了基础。
253.19 Scene Model 的通用性
ICAI Scene Model的一个核心目标是:
不枚举现实世界中的所有场景。
现实世界的场景组合数量几乎无限。
例如:
1个对象
+
2个对象
+
10个对象
+
100个对象
对象之间又可以形成大量:
空间关系
物理关系
时间关系
状态关系
功能关系
因此不可能简单地建立:
Scene001
Scene002
Scene003
...
一直枚举下去。
ICAI采用的是:
Scene Class
+
Object Models
+
Relations
+
States
+
Environment
+
Space
↓
Current Scene Instance
也就是说:
场景不是提前全部写好的,而是在运行过程中由现实对象动态构造出来的。
这与“每一种现实情况对应一个独立程序”的工程方式具有本质区别。
253.20 Scene Model 的场景生成机制
可以将ICAI的场景形成过程表示为:
SMt=Build(Ot,Rt,St,Et,Pt)SM_t=Build(O_t,R_t,S_t,E_t,P_t)
即:
Real-Time Data
↓
Elements
↓
Objects
↓
Object Models
↓
Relations
↓
States
↓
Environment
↓
Space
↓
Scene Model
因此,场景模型是一个动态生成模型(Dynamic Constructed Model)。
当现实世界发生变化:
World(t)
↓
Data(t)
↓
SceneModel(t)
下一时刻:
World(t+1)
↓
Data(t+1)
↓
SceneModel(t+1)
场景模型始终保持对当前世界结构的同步。
253.21 Scene Model 的完整认知闭环
至此,ICAI可以进一步形成:
Real World
↓
Real-Time Data
↓
Element
↓
Object Instance
↓
Object Model
↓
Relation
↓
State
↓
Scene Model
↓
Cognitive Model
↓
Goal
↓
Method
↓
Behavior
↓
Action
↓
Device
↓
World Change
↓
Feedback
↓
Real-Time Data
↓
Object Model Update
↓
Scene Model Update
↓
Re-Cognition
其中Scene Model承担了非常关键的中间作用:
Object
↓
Object Model
↓
Scene Model
↓
Cognitive Model
它把离散的对象组织成一个整体现实结构。
253.22 Scene Model 的工程意义
Scene Model建立之后,ICAI的机器世界表示不再只是:
Object Database
而开始成为:
Dynamic World Structure
即:
World(t)→SceneModel(t)World(t)\rightarrow SceneModel(t)
机器能够在程序内部形成:
当前有哪些对象
+
对象在哪里
+
对象之间有什么关系
+
对象当前是什么状态
+
环境是什么状态
+
场景正在发生什么变化
这使得机器行为不再直接建立在孤立数据上,而建立在结构化动态场景之上。
最终形成:
SceneModel(t)→CognitiveModel(t)→Method(t)→Action(t)SceneModel(t)\rightarrow CognitiveModel(t)\rightarrow Method(t)\rightarrow Action(t)
这就是ICAI从对象工程进入复杂行为工程的重要基础。
253.23 本章总结
Scene Model|场景模型 是ICAI机器认知体系中连接Object Model与Cognitive Model的核心结构。
它的基本形式为:
SMt=F(Ot,At,Rt,St,Et,Pt,Gt)SM_t=F(O_t,A_t,R_t,S_t,E_t,P_t,G_t)
其核心组成包括:
Scene Identity
+
Time
+
Space
+
Environment
+
Object Models
+
Relations
+
States
+
Goal
场景不是对象的简单集合:
Scene≠∑ObjectScene\neq \sum Object
而是:
Scene=F(Object,Relation,State,Environment,Space,Time)Scene=F(Object,Relation,State,Environment,Space,Time)
同时,Scene Model是动态的:
SMt→SMt+1→SMt+2SM_t\rightarrow SM_{t+1}\rightarrow SM_{t+2}
现实世界发生变化,场景模型同步变化;场景模型发生变化,认知模型随之更新。
因此形成:
Object Model
↓
Scene Model
↓
Cognitive Model
↓
Method
↓
Behavior
↓
Action
↓
Device
↓
Feedback
↓
Scene Model Update
到第253章,ICAI已经形成三个重要的工程层次:
第251章
Cognitive Model
→ 机器当前如何组织认知
第252章
Object Model
→ 机器当前如何组织现实对象
第253章
Scene Model
→ 机器当前如何组织多个对象形成的动态现实场景
三者形成:
Object Model→Scene Model→Cognitive ModelObject\ Model\rightarrow Scene\ Model\rightarrow Cognitive\ Model
由此,ICAI的机器世界已经从单个对象的动态建模进一步进入多对象动态场景建模,下一层就可以自然进入:
Scene Model
↓
Cognitive Model
↓
Method Model
↓
Behavior Model
↓
Action Model
也就是从“机器看到了怎样的场景”,进一步进入“机器如何根据当前场景计算应该采取什么方法和行为”。