跳转至
⚙ 开发指南 > SDK > 概念指南

控制权机制(Lease)#

P7 使用限时独占租约管理普通控制命令。同一机械臂资源在同一时刻只有当前租约持有者可以提交普通 运动请求;状态读取不要求租约。取得租约不会自动切换控制模式,也不会自动移动机械臂。

注册与租约#

条件 含义
客户端已注册 服务能够识别当前客户端实例;不代表拥有控制权
状态可读 getter 能返回当前快照;不代表拥有控制权
acquire_control() 返回 True 当次成功取得租约;租约随后仍可能过期、续期失败或被抢占
release_control() 已调用 SDK 清除本地租约并尝试释放服务端资源;不会停止已接受的轨迹

SDK 在取得控制权后自动续期。注册心跳失效、续期失败直到租约过期、被更高优先级客户端抢占,或 应用主动释放和关闭时,本地租约会被清除。SDK 没有公开“当前租约仍有效”的查询属性,因此运动命令 突然被拒绝时,应把租约丢失列为检查项。

常用接口#

client.acquire_control(
    lease_ms=15000,
    renew_period_s=5.0,
    *,
    preempt=False,
) -> bool

client.release_control() -> None
client.handover_to_previous() -> bool

preempt=True 只是抢占请求,仍受产品配置中的来源优先级和 non-preemptive 规则限制。不要根据 客户端名称猜测优先级,也不要在当前 owner 不明确时无界重试或强制抢占。

申请或交还前先协调

获取、抢占和交还控制权会影响同一机械臂上的其他控制程序。操作前确认现场安全、实体急停可用, 并与当前任务协调。控制权变化不会自动停止已经被服务接受的运动。

失败后的处理#

  • acquire_control() 返回 False:检查当前 owner、来源配置、租约时长、续期间隔和传输日志。
  • 取得控制权后命令被拒绝:停止下发新目标,检查租约是否丢失以及 FSM 是否仍处于目标模式。
  • 进程异常退出后暂时无法获取:等待旧租约过期,不用无界重试掩盖持续故障。
  • handover 失败:当前调用方通常仍持有租约;明确选择重试 handover 或显式释放。

客户端与控制权入口见API 接口总览,完整的调用和清理顺序见 使用示例