跳转至
⚙ 开发指南 > SDK > API

使用示例#

第一次接入 P7 时先运行只读示例。确认服务和状态可读后,再进入控制权、模式和运动示例。所有会运动 的代码都必须在清空工位、确认工具和负载、检查限位并确保实体急停可立即操作后运行。

只读状态检查#

下面的示例使用 gRPC,最多等待 5 s 获取可用服务状态,然后读取关节和固件信息。它不申请控制权、 不切换模式,也不发送运动命令。

import time

from arm_p7_sdk import AirbotClient


def wait_for_service(client: AirbotClient, timeout_s: float = 5.0):
    deadline = time.monotonic() + timeout_s
    while time.monotonic() < deadline:
        state = client.get_service_state()
        if state is not None and state.valid and state.service_state:
            return state
        time.sleep(0.1)
    raise RuntimeError("P7 服务状态在限定时间内不可用")


with AirbotClient(
    backend="grpc",
    host="P7_IP_ADDRESS",
    port=50071,
) as client:
    service = wait_for_service(client)
    print("FSM:", service.fsm_state)
    print("controller:", service.controller_state)
    print("joints:", client.get_arm_joint_state())
    print("firmware:", client.get_firmware_info())

P7_IP_ADDRESS 替换为当前整机地址。关节或固件 getter 仍可能返回 None;不要用全零数组或猜测 版本替换缺失数据。getter 和返回类型见接口总览

控制代码结构#

下面的结构只展示控制权和清理顺序,不发送运动目标。实际调用还要按对应接口补充状态、单位、限位、 完成判据和异常停止逻辑。

from arm_p7_sdk import AirbotClient, Controller


with AirbotClient(
    host="P7_IP_ADDRESS",
    port=50071,
    client_name="my-p7-controller",
) as client:
    if not client.acquire_control(lease_ms=15_000, renew_period_s=5.0):
        raise RuntimeError("无法获取控制权")

    mode_selected = False
    try:
        # 完成安全检查后,按任务切换模式并发送目标。
        pass
    finally:
        if mode_selected:
            client.switch_controller(Controller.idle, timeout_ms=5_000)
        client.release_control()

release_control() 不会停止已经接受的规划轨迹。只有确认运动已经完成或停止后,才能正常切回 idle 并释放租约。

按任务选择示例#

任务 示例入口 先阅读
获取、释放或交还控制权 control 类命令 控制权机制(Lease)
切换模式或读取当前模式 control mode 类命令 控制模式说明
读取八类状态 state getter 类命令 接口总览
单次关节运动 move_joint 用例 PTP 点到点规划
PTP、LIN、CIRCLE 或路点 对应笛卡尔和 waypoint 用例 PTP / LIN / CIRC / 多段轨迹融合
EEF 运动 move_eef 用例 EEFState(末端执行器状态)
软件急停、清错或回零 recovery 类命令 电机错误码查询

示例中的幅度限制和数值只是输入格式保护,不是任何工位的安全保证;真机运行仍需完成现场评估。