下面,我将您提供的流程进行整合、优化,并补充关键的安全与实施考量,形成一套完整的《多奥机器人(AGV/AMR/机器狗)自主乘梯技术规范V1.0》。

import paho.mqtt.client as mqtt

import time

# MQTT连接参数

MQTT_BROKER = "mqtt.example.com"

MQTT_PORT = 1883

MQTT_TOPIC = "elevator/control"

# 电梯控制指令

DAIC_DT_LW = "DAIC-DT-LW" # 外呼联网控制器

DAIC_DT_ZT = "DAIC-DT-ZT" # 读电梯运行状态

DAIC_DT_MB = "DAIC-DT-MB" # 内呼点亮楼层按键

DAIC_TK_MB = "DAIC-TK-MB" # 内呼点亮楼层按键

DAIC_TK_ZT = "DAIC-TK-ZT" # 读电梯运行状态

# 机器人状态

ROBOT_STATE = {

"floor": 1, # 当前楼层

"target_floor": 5, # 目标楼层

"direction": "UP", # 上行/下行

"in_elevator": False # 是否在电梯内

}

# MQTT回调函数

def on_connect(client, userdata, flags, rc):

print("Connected with result code "+str(rc))

client.subscribe(MQTT_TOPIC)

def on_message(client, userdata, msg):

payload = msg.payload.decode()

if payload == "ELEVATOR_STATUS":

handle_elevator_status()

# 发送MQTT消息

def send_mqtt_command(command, data):

client.publish(MQTT_TOPIC, f"{command},{data}")

# 电梯状态处理

def handle_elevator_status():

# 模拟电梯状态数据

elevator_status = {

"floor": 3, # 当前楼层

"direction": "UP", # 运行方向

"door_open": True # 门开到位

}

if elevator_status["floor"] == ROBOT_STATE["floor"] and elevator_status["direction"] == ROBOT_STATE["direction"] and elevator_status["door_open"]:

if not ROBOT_STATE["in_elevator"]:

enter_elevator()

else:

exit_elevator()

# 进入电梯

def enter_elevator():

print("Entering elevator...")

ROBOT_STATE["in_elevator"] = True

while True:

send_mqtt_command(DAIC_DT_MB, "1") # 点亮开门按钮

time.sleep(1)

if check_robot_in_elevator():

break

send_mqtt_command(DAIC_TK_MB, str(ROBOT_STATE["target_floor"])) # 点亮目标楼层按键

# 出电梯

def exit_elevator():

print("Exiting elevator...")

while True:

send_mqtt_command(DAIC_DT_MB, "1") # 点亮开门按钮

time.sleep(1)

if check_robot_out_elevator():

break

# 检测机器人是否进入电梯

def check_robot_in_elevator():

# 模拟检测逻辑

return True

# 检测机器人是否出电梯

def check_robot_out_elevator():

# 模拟检测逻辑

return True

# 主流程

def main():

global client

client = mqtt.Client()

client.on_connect = on_connect

client.on_message = on_message

client.connect(MQTT_BROKER, MQTT_PORT, 60)

client.loop_start()

# 外呼电梯

send_mqtt_command(DAIC_DT_LW, f"{ROBOT_STATE['floor']},{ROBOT_STATE['direction']}")

while True:

send_mqtt_command(DAIC_DT_ZT, "1") # 读电梯运行状态

time.sleep(0.03) # 31~50ms间隔

if __name__ == "__main__":

main()

机器人(AGV/AMR/机器狗)自主乘梯技术规范

一、 核心设备与指令角色

在您描述的流程中,以下多奥设备扮演关键角色:

  • 外呼联网控制器 (DAIC-DT-LW) / 梯控系统 (DAIC-DT-WH):接收机器人“召梯”请求,并控制电梯厅外呼按钮。
  • 梯控主控制器 (DAIC-DT-MB/DAIC-TK-MB):系统大脑,处理所有内呼、状态查询指令,并控制轿厢内楼层按钮。
  • 电梯运行状态检测器 (DAIC-DT-ZT/DAIC-TK-ZT):实时采集电梯楼层、方向、门状态,并反馈给机器人。

二、 标准乘梯工作流程详解

以下流程图清晰地展示了从机器人发出召梯请求到安全离开电梯的完整闭环流程,特别是人机协同的关键节点:

sequenceDiagram
    participant R as 机器人调度系统
    participant T as 多奥梯控系统
    participant E as 电梯本体

    Note over R, E: 阶段一:厅外呼梯
    R->>T: 发送“外呼”指令 (Type=0, 标志=1)
    T->>E: 模拟按下对应楼层“上/下”外呼按钮
    E->>E: 电梯开始响应,运行至目标楼层

    Note over R, E: 阶段二:状态监控与安全进入
    loop 每31-50ms轮询
        R->>T: 查询电梯状态 (DAIC-DT-ZT)
        T->>R: 返回状态(楼层、方向、门状态)
    end
    R->>R: 判断: 到达本层 && 方向正确 && 门开到位
    R->>T: 发送“内呼-开门保持”指令 (Type=0, 标志=0)
    R->>E: 机器人开始安全驶入轿厢
    Note over R, E: 机器人持续发送“开门保持”指令,直至完全进入

    Note over R, E: 阶段三:轿厢内选层与运行
    R->>T: 发送“内呼-目标楼层”指令 (Type=0, 标志=0)
    T->>E: 点亮目标楼层按钮
    E->>E: 电梯开始运行前往目标层
    Note over R, E: 电梯自动关门,机器人不发送关门指令

    Note over R, E: 阶段四:抵达与安全离开
    loop 每31-50ms轮询
        R->>T: 查询电梯状态 (DAIC-DT-ZT)
        T->>R: 返回状态(楼层、方向、门状态)
    end
    R->>R: 判断: 到达目标层 && 门开到位
    R->>T: 发送“内呼-开门保持”指令 (Type=0, 标志=0)
    R->>E: 机器人开始安全驶离轿厢
    Note over R, E: 机器人持续发送“开门保持”指令,直至完全离开


具体流程说明如下:

步骤1:厅外呼梯

  • 机器人动作:向梯控系统发送 “外呼”指令(标志=1,Type=0)。
  • 梯控响应:外呼控制器 (DAIC-DT-WH) 通过无源干接点安全模拟按下对应楼层的“上行”或“下行”按钮,召唤电梯。

步骤2:状态监控与安全进入(关键安全步骤)

  • 机器人动作:以31-50ms的高频率,持续向梯控系统发送 “读电梯运行状态”指令​ (DAIC-DT-ZT)。
  • 决策逻辑:机器人本地逻辑判断需同时满足以下三个条件,方可进入:
    1. current_floor== 机器人所在楼层
    2. door_status== 1 (开门到位)
    3. direction== 机器人期望方向 (上行/下行) 或 direction== 1 (停止)

  • 防夹保护:在进入过程中,机器人应持续发送“内呼-开门保持”指令(约每秒1次),以防止电梯门意外关闭。您提到的“防捣蛋功能”提醒非常重要,需与电梯厂商确认此功能是否会被连续信号触发。

步骤3:轿厢内选层与运行

  • 机器人动作:完全进入轿厢,并通过自身传感器确认安全后,发送 “内呼-目标楼层”指令(标志=0,Type=0)。
  • 重要安全原则机器人绝对不应发送“关门”指令。电梯应在其自身安全逻辑(如光幕、触边、时间保护)下自动关门,这是防止夹伤的关键。

步骤4:抵达目标层与安全离开

  • 机器人动作:电梯运行期间及到达后,持续高频率查询状态。当判断到达目标层且门开到位后,开始驶离。
  • 防夹保护:在离开过程中,同样持续发送“内呼-开门保持”指令,直至完全离开轿厢。

三、 通信协议与指令定义(基于您提供的MQTT示例扩展)

您提供的指令格式是核心。一个完整的指令帧在MQTT中可能如下所示:

主题 (Topic)RobotToElevator/<电梯ID>/command

载荷 (Payload - JSON示例)

{
  "cmd_id": 123456, // 指令唯一ID,用于匹配请求与响应
  "timestamp": 1672531200000,
  "command": {
    "call_type": 1, // 0=内呼,1=外呼
    "type": 0,       // 0=进入控制状态,1=退出,2=强制接管
    "action": "call", // 动作: "call"(呼梯), "select"(选层), "hold_door"(保持开门), "query_status"(查询状态)
    "target_floor": 10, // 目标楼层(选层时有效)
    "direction": 2    // 呼梯方向: 1=上,2=下(外呼时有效)
  }
}

梯控系统状态反馈主题ElevatorToRobot/<电梯ID>/status

{
  "cmd_id": 123456, // 响应对应的请求ID
  "timestamp": 1672531200050,
  "status": {
    "current_floor": 5,
    "door_status": 1, // 0=未知,1=开门到位,2=正在开关门,3=关门到位
    "direction": 2,   // 0=未知,1=停止,2=上行,3=下行
    "running_mode": 0 // 0=正常,1=消防,2=检修...
  }
}

四、 关键实施建议与安全冗余设计

  1. 通信可靠性
    • 心跳与超时:机器人-梯控间应建立心跳机制。若连续多次未收到状态反馈或心跳,机器人应进入“安全等待”或“任务失败”状态。
    • 指令确认:重要指令(如呼梯、选层)应采用请求-确认机制,梯控收到后必须返回明确响应。

  1. 安全冗余
    • 多传感器校验:机器人除依赖梯控状态外,应配备近距离传感器(如激光雷达、ToF),在进入/离开轿厢前,自行检测门缝宽度和轿厢边缘,实现双重校验
    • 超时与重试策略:设置每一步骤的超时时间(如等待电梯到达超时、进入超时)。超时后应有安全退出和告警策略,并可触发有限次数的重试。

  1. 协议兼容性
    • 您提到的Modbus TCP, HTTP, RS-485, LoRa等多协议支持,使得本方案能灵活适配不同现场的网络条件和机器人硬件接口。LoRa特别适合解决电梯井道内无线信号覆盖问题。

  1. “Type”参数的应用场景
    • Type=0:机器人正常乘梯流程。
    • Type=1:机器人任务完成或紧急撤离时,通知梯控系统释放控制,恢复人工模式。
    • Type=2高级管理功能,如系统调试、紧急任务优先时使用,需严格权限控制。

总结:您定义的这套流程是目前行业内最合理、最安全的机器人自主乘梯实现方式之一。它成功地将复杂的乘梯行为分解为一系列可编程、可监控、可回退的原子步骤,为机器人安全融入人类垂直交通环境提供了坚实的技术基础。

下一步,建议基于此规范,与多奥及机器人供应商共同制定详细的《接口协议文档》和《联调测试用例》,确保万无一失。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐