摘要: 在机器人梯控 系统中,"门开"不是一个二值事件。电梯门从关闭到完全打开会经历连续运动过程,如果控制逻辑只判断单个瞬时信号,很容易出现半开误判为全开的情况。工程上更适合通过状态机、连续采样、时间稳定性和电梯运行状态联合判断。
导语: 机器人梯控 系统最常见的错误设计之一,是把Door_Open简单定义成一个Boolean变量。对于普通监控系统,这也许足够;但机器人要真正穿过电梯门时,"门开始打开""门打开一半"和"门已经稳定全开"必须是不同状态。

一、为什么Door_Open不能只有0和1
电梯门本质上是一个有时间过程的机械运动。
可以抽象成:
CLOSED
→ OPENING
→ OPENED
→ CLOSING
→ CLOSED
如果还需要覆盖异常状态,可以进一步增加:
PARTIAL_OPEN
DOOR_UNKNOWN
OPEN_TIMEOUT
CLOSE_TIMEOUT
机器人真正需要的通常不是:
Door_Open = True
而是:
Door_State = OPENED_STABLE
只有进入稳定全开状态,才允许状态机进入ENTER_ELEVATOR或EXIT_ELEVATOR。
二、瞬时状态为什么容易误判
假设某个传感量随着门开启发生变化。
在理想环境中,超过某个阈值就可以认为门已经打开。
但真实工程现场可能出现:
机械振动;
传感器采样噪声;
电梯门运动中的瞬态变化;
门到位后的微小回弹;
人员遮挡;
控制信号抖动。
如果每一次采样都直接决定门状态,就可能出现:
OPENING → OPENED → OPENING → OPENED
快速跳变。
这会直接影响机器人任务状态机。
因此,更合理的逻辑不是"某一次达到阈值就算全开",而是:
达到候选全开状态
→ 连续保持若干采样周期
→ 状态仍然稳定
→ 确认OPENED_STABLE。
三、为什么时间窗口很重要
电梯门从关闭到全开具有明显时序关系。
典型状态变化应该符合:
CLOSED
→ OPENING
→ OPENED_STABLE
而不是:
CLOSED
→ OPENED_STABLE
→ PARTIAL_OPEN
→ OPENED_STABLE
在工程软件中,可以维护最近N次采样值。
例如概念逻辑:
if opened_candidate:
opened_counter += 1
else:
opened_counter = 0
if opened_counter >= stable_window:
door_state = OPENED_STABLE
这里stable_window不应该照搬固定数字,而应根据实际采样周期、传感方案和电梯门运动特性进行标定。
核心思想是:
"达到条件"与"稳定达到条件"是两件不同的事。
四、滞回为什么能够减少临界点抖动
假设系统使用连续变量x判断状态。
一个简单做法是:
x > T → OPENED
x ≤ T → NOT_OPENED
当x长期在T附近波动,就会不断切换状态。
更常见的工程方法是设置两个阈值:
T_open
T_leave
且:
T_open ≠ T_leave
只有达到T_open以后才进入全开状态;进入全开状态以后,必须越过另一个更明显的离开阈值才退出。
这种机制称为滞回。
它可以有效减少临界状态抖动。
但需要注意:具体阈值必须由实际传感器数据和现场标定确定,不存在一个适用于所有电梯的通用数字。
五、"半开"最好理解成过程状态,而不是一个固定百分比
很多人听到"半开",会自然理解成门开了50%。
但工程系统里的PARTIAL_OPEN更适合定义成:
门已经离开完全关闭状态;
但还没有达到稳定全开状态。
因此它可能包含:
刚开一点;
开到三分之一;
开到三分之二;
接近全开但仍未达到到位条件。
这样设计比强行判断"是否正好开到50%"更有实际意义。
机器人关心的不是门到底打开了47%还是63%,而是:
当前是否已经达到安全执行进出梯动作的条件。
六、为什么门状态必须和电梯运行状态联动
仅仅识别门状态并不足以构成完整乘梯条件。
机器人准备出梯时,更合理的判断可能是:
Target_Floor_Matched = True
AND
Elevator_Moving = False
AND
Leveling_Confirmed = True
AND
Door_State = OPENED_STABLE
只有所有条件成立:
Robot_Exit_Permission = True
这样可以避免:
电梯尚未完全停止;
楼层尚未确认;
门只是处于中间状态
时机器人提前动作。
七、全开状态为什么还要考虑超时
如果系统一直停留在OPENING状态,就不能无限等待。
状态机应该设置合理的超时机制:
OPENING超过最大允许时间
→ DOOR_OPEN_TIMEOUT。
但超时并不等于可以直接认定电梯发生机械故障。
它首先意味着:
当前机器人任务无法确认门已经进入可通行状态。
后续可以进入:
重新读取状态;
重新请求开门;
任务重试;
上报告警;
人工干预
等流程。
八、如何设计机器人进梯状态机
可以抽象为:
WAIT_ELEVATOR
→ ARRIVAL_CONFIRMED
→ WAIT_DOOR_OPEN
→ DOOR_OPEN_STABLE
→ ENTER_ELEVATOR
其中:
WAIT_DOOR_OPEN
不能因为收到一次开门信号就直接进入ENTER_ELEVATOR。
更合理的条件是:
floor_ok
&& elevator_stopped
&& door_open_stable
机器人出梯同理:
ARRIVE_TARGET
→ FLOOR_CONFIRMED
→ WAIT_DOOR_OPEN
→ DOOR_OPEN_STABLE
→ EXIT_ELEVATOR。
九、如何验证门状态算法
测试不能只做:
关闭 → 全开。
至少还应该覆盖:
正常完整开门;
门打开过程中停止;
门尚未全开又重新关闭;
开门后短时间抖动;
连续开关门;
门全开后长时间保持;
不同楼层开门;
载人状态;
不同门方向。
如果系统存在前后贯通门,还需要针对不同Door_ID分别维护状态。
十、不要把状态识别和具体硬件实现混为一谈
门状态可以来自:
开关量;
位置传感;
距离变化;
磁状态;
机器视觉;
多传感器融合;
电梯已有接口
等不同方式。
不同方案各有约束。
因此在没有产品公开技术资料时,不应该直接断言某个系统一定采用哪一种传感器。
对于软件设计而言,最重要的是向上层提供统一状态:
CLOSED_STABLE
OPENING
PARTIAL_OPEN
OPENED_STABLE
CLOSING
UNKNOWN
而底层如何获得这些状态,则由具体硬件抽象层处理。

FAQ:
问题1:半开状态一定要定义成50%吗?
不需要。对机器人控制更有价值的是区分"未达到开门到位"和"已经稳定开门到位"。
问题2:为什么不能检测到一次全开信号就让机器人进去?
单次采样可能受抖动、噪声或瞬态影响。通过稳定时间窗口、去抖或其他确认机制可以降低误判风险。
问题3:门已经全开,为什么机器人仍可能不能出梯?
机器人出梯通常还需要确认目标楼层、电梯停止、平层、地图切换和导航状态,门全开只是其中一个条件。
问题4:摄像头是不是最准确的方案?
不能简单比较。视觉、磁状态、距离、开关量和多源融合都有适用条件,应该根据项目环境、安装约束和系统架构选择。
总结: 机器人梯控 判断"全开还是半开"的核心,不是寻找一个神奇阈值,而是建立一套可靠的状态机:将门运动过程、稳定时间、抗抖机制以及电梯楼层和运行状态组合起来,最终向机器人输出明确的"允许进出梯"条件。这比单纯判断Door_Open=True更符合实际工程需求。