4.4 程序信息读写
说明
ProgramPose 相关接口用于读取、写入和转换机器人示教程序中的位姿点位。通过 program_pose 模块可以定位到指定程序与点位序号,执行增删改查操作,并在笛卡尔 / 关节表示之间进行转换,便于在上位机场景下批量维护程序点位或做离线编辑。
4.4.1 获取指定程序中指定位姿点值
| 方法名 | program_pose.read( program_name : str, index : int, program_type : str = USER_PROGRAM) -> tuple[ProgramPose, StatusCodeEnum] |
|---|---|
| 描述 | 获取一个程序中指定序号的 Pose 的值 |
| 请求参数 | program_name : str 指定程序名 index : int 指定 pose 的序号 program_type : str 程序类型,默认为 USER_PROGRAM |
| 返回值 | ProgramPose: 位姿信息 StatusCodeEnum: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
4.4.2 修改指定程序中指定位姿点值
| 方法名 | program_pose.write( program_name : str, index : int, value : ProgramPose, program_type : str = USER_PROGRAM) -> StatusCodeEnum |
|---|---|
| 描述 | 修改用户指定程序中指定序号的位姿点值 |
| 请求参数 | program_name : str 指定程序名 index : int 指定 pose 的序号 value : ProgramPose 需更新的新 pose 值 program_type : str 程序类型,默认为 USER_PROGRAM |
| 返回值 | StatusCodeEnum: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
4.4.3 获取指定程序中所有的位姿点
| 方法名 | program_pose.read_all_poses( program_name : str, program_type : str = USER_PROGRAM) -> tuple[list[ProgramPose], StatusCodeEnum] |
|---|---|
| 描述 | 获取指定程序中所有的位姿点信息 |
| 请求参数 | program_name : str 指定程序名 program_type : str 程序类型,默认为 USER_PROGRAM |
| 返回值 | list(ProgramPose): 位姿信息列表 StatusCodeEnum: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
4.4.4 向程序中添加指定位姿点
| 方法名 | program_pose.add( program_name : str, index : int, value : ProgramPose, program_type : str = USER_PROGRAM) -> StatusCodeEnum |
|---|---|
| 描述 | 在程序中指定序号处新增一个位姿点,若编号已存在则返回错误 |
| 请求参数 | program_name : str 指定程序名 index : int 指定 pose 的序号 value : ProgramPose 需新增的 pose 值 program_type : str 程序类型,默认为 USER_PROGRAM |
| 返回值 | StatusCodeEnum: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
4.4.5 写入程序中一个或者多个机器人位姿点值
| 方法名 | program_pose.write_poses( program_name : str, poses_to_update : list[ProgramPose]) -> StatusCodeEnum |
|---|---|
| 描述 | 写入一个程序中一个或者多个的机器人 Pose 点位值。注意:只能写入已经存在的点位,并不能新增点位 |
| 请求参数 | program_name : str 指定程序名 poses_to_update : list(ProgramPose) 待更新的点位列表 |
| 返回值 | StatusCodeEnum: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
4.4.6 机器人程序位姿点类型转换
| 方法名 | ProgramPoses.convert_pose( pose : ProgramPose, from_type : PoseType, to_type : PoseType) -> tuple[ProgramPose, StatusCodeEnum] |
|---|---|
| 描述 | 将程序中机器人位姿点在轴坐标和笛卡尔空间坐标之间转换 |
| 请求参数 | pose : ProgramPose 要转换的 pose 值 from_type : PoseType 转换前的类型 to_type : PoseType 希望转换后的类型 |
| 返回值 | ProgramPose: 位姿信息 StatusCodeEnum: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
示例代码
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 机器人位姿使用示例 / Example of robot pose usage
"""
from Agilebot import Arm, PoseType, StatusCodeEnum
# [ZH] 初始化捷勃特机器人
# [EN] Initialize the robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to the robot
ret = arm.connect("10.27.1.254")
if ret == StatusCodeEnum.OK:
print("机器人连接成功 / Robot connected successfully")
else:
print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
program_name = "test_prog"
# [ZH] 读取所有位姿
# [EN] Read all poses
poses, ret = arm.program_pose.read_all_poses(program_name)
if ret == StatusCodeEnum.OK:
print("读取所有位姿成功 / Read all poses successfully")
# [ZH] 打印位姿信息
# [EN] Print pose information
for p in poses:
print(f"位姿ID / Pose ID:{p.id}\n位姿名称 / Pose name:{p.name}")
else:
print(f"读取所有位姿失败,错误代码 / Read all poses failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 读取单个位姿
# [EN] Read a single pose
pose, ret = arm.program_pose.read(program_name, 1)
if ret == StatusCodeEnum.OK:
print("读取单个位姿成功 / Read single pose successfully")
# [ZH] 打印位姿信息
# [EN] Print pose information
print(
f"位姿ID / Pose ID:{pose.id}\n"
f"位姿名称 / Pose name:{pose.name}\n"
f"位姿类型 / Pose type:{pose.poseData.pt}\n"
f"X:{pose.poseData.cartData.baseCart.position.x}\n"
f"Y:{pose.poseData.cartData.baseCart.position.y}\n"
f"Z:{pose.poseData.cartData.baseCart.position.z}\n"
f"J1:{pose.poseData.joint.j1}\n"
f"J2:{pose.poseData.joint.j2}\n"
f"J3:{pose.poseData.joint.j3}\n"
)
else:
print(f"读取单个位姿失败,错误代码 / Read single pose failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 修改位姿
# [EN] Modify pose
pose.comment = "SDK_TEST_COMMENT"
ret = arm.program_pose.write(program_name, 1, pose)
if ret == StatusCodeEnum.OK:
print("修改位姿成功 / Modify pose successfully")
else:
print(f"修改位姿失败,错误代码 / Modify pose failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 转换位姿
# [EN] Convert pose
converted_pose, ret = arm.program_pose.convert_pose(pose, PoseType.CART, PoseType.JOINT)
if ret == StatusCodeEnum.OK:
print("转换位姿成功 / Convert pose successfully")
else:
print(f"转换位姿失败,错误代码 / Convert pose failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 打印位姿信息
# [EN] Print pose information
print(
f"位姿ID / Pose ID:{converted_pose.id}\n"
f"位姿名称 / Pose name:{converted_pose.name}\n"
f"位姿类型 / Pose type:{converted_pose.poseData.pt}\n"
f"X:{converted_pose.poseData.cartData.baseCart.position.x}\n"
f"Y:{converted_pose.poseData.cartData.baseCart.position.y}\n"
f"Z:{converted_pose.poseData.cartData.baseCart.position.z}\n"
f"J1:{converted_pose.poseData.joint.j1}\n"
f"J2:{converted_pose.poseData.joint.j2}\n"
f"J3:{converted_pose.poseData.joint.j3}\n"
)
# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from the robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")