⚙ 开发指南
> 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 类命令 | 电机错误码查询 |
示例中的幅度限制和数值只是输入格式保护,不是任何工位的安全保证;真机运行仍需完成现场评估。