Skip to content

4.2 机器人运动控制和状态

说明

Motion 类是捷勃特机器人运动控制的核心对象,负责速度 / 加速度参数、坐标系、点位转换、轨迹运动、拖动示教、实时控制和负载管理等操作的统一封装。常见流程为:在 Arm 完成连接后,通过 arm.motion 获取实例。

4.2.1 获取机器人参数

4.2.1.1 获取 OVC 全局速度比率

方法名motion.get_OVC() -> tuple[float, StatusCodeEnum]
描述获取当前机器人 OVC 全局速度比率,比率在 0~1 之间
请求参数无参数
返回值float:速度比率,结果在 0~1 之间
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.2.1.2 获取 OAC 全局加速度比率

方法名motion.get_OAC() -> tuple[float, StatusCodeEnum]
描述获取当前机器人 OAC 全局加速度比率,比率在 0~1.2 之间
请求参数无参数
返回值float:速度比率,结果在 0~1.2 之间
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.2.1.3 获取当前使用的 TF 工具坐标系编号

方法名motion.get_TF() -> tuple[int, StatusCodeEnum]
描述获取当前机器人使用的 TF 工具坐标系编号,序号范围为 0~50
请求参数无参数
返回值int: 工具坐标系编号
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.2.1.4 获取当前使用的 UF 用户坐标系编号

方法名motion.get_UF() -> tuple[int, StatusCodeEnum]
描述获取当前机器人使用的 UF 用户坐标系编号,序号范围为 0~50
请求参数无参数
返回值int: 用户坐标系编号
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.2.1.5 获取当前使用的 TCS 示教坐标系

方法名motion.get_TCS() -> tuple[TCSType, StatusCodeEnum]
描述获取当前机器人使用的 TCS 示教坐标系,具体参见 TCSType
请求参数无参数
返回值TCSType: 示教坐标系编号
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

示例代码

motion/set_param.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 全局参数设置示例 / Example of system parameter setting
"""

from Agilebot import Arm, StatusCodeEnum, TCSType

# [ZH] 初始化捷勃特机器人
# [EN] Initialize the Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to the Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if the connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 设置机器人各参数
# [EN] Set robot parameters
ret = arm.motion.set_OVC(0.7)
if ret == StatusCodeEnum.OK:
    print("设置全局速度比率成功 / Set global velocity ratio successful")
else:
    print(f"设置全局速度比率失败,错误代码 / Set global velocity ratio failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

ret = arm.motion.set_OAC(0.7)
if ret == StatusCodeEnum.OK:
    print("设置全局加速度比率成功 / Set global acceleration ratio successful")
else:
    print(f"设置全局加速度比率失败,错误代码 / Set global acceleration ratio failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

ret = arm.motion.set_TCS(TCSType.TOOL)
if ret == StatusCodeEnum.OK:
    print("设置示教坐标系类型成功 / Set teaching coordinate system type successful")
else:
    print(f"设置示教坐标系类型失败,错误代码 / Set teaching coordinate system type failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

ret = arm.motion.set_UF(0)
if ret == StatusCodeEnum.OK:
    print("设置用户坐标系成功 / Set user coordinate system successful")
else:
    print(f"设置用户坐标系失败,错误代码 / Set user coordinate system failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

ret = arm.motion.set_TF(0)
if ret == StatusCodeEnum.OK:
    print("设置工具坐标系成功 / Set tool coordinate system successful")
else:
    print(f"设置工具坐标系失败,错误代码 / Set tool coordinate system failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from the Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.2 设置机器人参数

4.2.2.1 设置 OVC 全局速度比率

方法名motion.set_OVC( value : float) -> StatusCodeEnum
描述设置机器人的 OVC 全局速度比率
请求参数value : float,速度比率范围是 (0, 1],即大于 0 且不超过 1
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.2.2.2 设置 OAC 全局加速度比率

方法名motion.set_OAC( value : float) -> StatusCodeEnum
描述设置机器人的 OAC 全局加速度比率
请求参数value : float,加速度比率在 (0.01, 1.2] 区间内
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.2.2.3 设置当前使用的 TF 工具坐标系

方法名motion.set_TF( value : int) -> StatusCodeEnum
描述设置机器人当前使用的 TF 工具坐标系
请求参数value : int, 工具坐标系编号,支持的序号范围为 0~50
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.2.2.4 设置当前使用的 UF 用户坐标系

方法名motion.set_UF( value : int) -> StatusCodeEnum
描述设置机器人当前使用的 UF 用户坐标系
请求参数value : int, 用户坐标系编号,支持的序号范围为 0~50
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.2.2.5 设置当前使用的 TCS 示教坐标系

方法名motion.set_TCS( value : TCSType) -> StatusCodeEnum
描述设置机器人当前使用的 TCS 示教坐标系,具体参见 TCSType
请求参数value : TCSType TCS 示教坐标系
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

示例代码

motion/get_param.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 全局参数获取示例 / Example of system parameter acquisition
"""

from Agilebot import Arm, StatusCodeEnum, TCSType

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 获取机器人各参数并打印
# [EN] Get robot parameters and print
res, ret = arm.motion.get_OVC()
if ret == StatusCodeEnum.OK:
    print("获取全局速度比率成功 / Get global velocity ratio successful")
else:
    print(f"获取全局速度比率失败,错误代码 / Get global velocity ratio failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)
print(f"全局速度比率 / Global velocity ratio: {res}")

res, ret = arm.motion.get_OAC()
if ret == StatusCodeEnum.OK:
    print("获取全局加速度比率成功 / Get global acceleration ratio successful")
else:
    print(f"获取全局加速度比率失败,错误代码 / Get global acceleration ratio failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)
print(f"全局加速度比率 / Global acceleration ratio: {res}")

res, ret = arm.motion.get_TCS()
if ret == StatusCodeEnum.OK:
    print("获取示教坐标系类型成功 / Get teaching coordinate system type successful")
else:
    print(f"获取示教坐标系类型失败,错误代码 / Get teaching coordinate system type failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)
print(f"示教坐标系类型 / Teaching coordinate system type: {TCSType(res).name}")

res, ret = arm.motion.get_UF()
if ret == StatusCodeEnum.OK:
    print("获取用户坐标系成功 / Get user coordinate system successful")
else:
    print(f"获取用户坐标系失败,错误代码 / Get user coordinate system failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)
print(f"用户坐标系 / User coordinate system: {res}")

res, ret = arm.motion.get_TF()
if ret == StatusCodeEnum.OK:
    print("获取工具坐标系成功 / Get tool coordinate system successful")
else:
    print(f"获取工具坐标系失败,错误代码 / Get tool coordinate system failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)
print(f"工具坐标系 / Tool coordinate system: {res}")

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.3 将笛卡尔点位转换成关节值点位

方法名motion.convert_cart_to_joint( pose : MotionPose, uf_index : int = 0, tf_index : int = 0) -> tuple[MotionPose, StatusCodeEnum]
描述将位姿数据从笛卡尔点位转换成关节值点位表达
请求参数pose : MotionPose 机器人的笛卡尔位姿(PoseType.CART),若未指定 posture SDK 将自动求解可行姿态
uf_index : int 用户坐标系 id
tf_index : int 工具坐标系 id
返回值MotionPose: 机器人点位
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.2.4 将关节值点位转换成笛卡尔点位

方法名motion.convert_joint_to_cart( pose : MotionPose, uf_index : int = 0, tf_index : int = 0) -> tuple[MotionPose, StatusCodeEnum]
描述将关节值点位转换成笛卡尔点位
请求参数pose : MotionPose 机器人的关节位姿
uf_index : int 用户坐标系 id
tf_index : int 工具坐标系 id
返回值MotionPose: 机器人点位
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

示例代码

motion/convert_pose.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 转换关节值坐标使用示例 / Example of converting joint coordinates
"""

from Agilebot import Arm, MotionPose, PoseType, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 初始化位姿
# [EN] Initialize pose
motion_pose = MotionPose()
motion_pose.pt = PoseType.CART
motion_pose.cartData.position.x = 221.5
motion_pose.cartData.position.y = -494.1
motion_pose.cartData.position.z = 752.0
motion_pose.cartData.position.a = -89.1
motion_pose.cartData.position.b = 31.6
motion_pose.cartData.position.c = -149.3

# [ZH] 转换关节值坐标
# [EN] Convert to joint coordinates
joint_pose, ret = arm.motion.convert_cart_to_joint(motion_pose)
if ret == StatusCodeEnum.OK:
    print("转换关节值坐标成功 / Convert to joint coordinates successful")
else:
    print(f"转换关节值坐标失败,错误代码 / Convert to joint coordinates failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果位姿
# [EN] Print result pose
print(f"位姿类型 / Pose type: {joint_pose.pt}")
print(
    f"轴位置 / Axis position: \n"
    f"J1:{joint_pose.joint.j1}\n"
    f"J2:{joint_pose.joint.j2}\n"
    f"J3:{joint_pose.joint.j3}\n"
    f"J4:{joint_pose.joint.j4}\n"
    f"J5:{joint_pose.joint.j5}\n"
    f"J6:{joint_pose.joint.j6}"
)

# [ZH] 转换笛卡尔坐标
# [EN] Convert to Cartesian coordinates
cart_pose, ret = arm.motion.convert_joint_to_cart(joint_pose)
if ret == StatusCodeEnum.OK:
    print("转换笛卡尔坐标成功 / Convert to Cartesian coordinates successful")
else:
    print(f"转换笛卡尔坐标失败,错误代码 / Convert to Cartesian coordinates failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果位姿
# [EN] Print result pose
print(f"位姿类型 / Pose type: {cart_pose.pt}")
print(
    f"笛卡尔位置 / Cartesian position: \n"
    f"X:{cart_pose.cartData.position.x}\n"
    f"Y:{cart_pose.cartData.position.y}\n"
    f"Z:{cart_pose.cartData.position.z}\n"
    f"A:{cart_pose.cartData.position.a}\n"
    f"B:{cart_pose.cartData.position.b}\n"
    f"C:{cart_pose.cartData.position.c}"
)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.5 让机器人末端移动到指定的位置

方法名motion.move_joint( pose : MotionPose, vel : float = 1, acc : float = 1) -> StatusCodeEnum
描述让机器人末端移动到指定的位置,移动方式为最快路径
请求参数pose : MotionPose 笛卡尔空间或关节坐标系上的一个点的坐标
vel : float 运动的速度,范围是 0~1, 表示最大速度的倍数
acc : float 范围是 0~1.2, 表示最大加速度的倍数
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

示例代码

motion/move_joint.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 关节运动使用示例 / Example of joint movement usage
"""

from Agilebot import Arm, MotionPose, PoseType, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize the Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to the Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if the connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 初始化位姿
# [EN] Initialize pose
motion_pose = MotionPose()
motion_pose.pt = PoseType.JOINT
motion_pose.joint.j1 = 0
motion_pose.joint.j2 = 0
motion_pose.joint.j3 = 60
motion_pose.joint.j4 = 60
motion_pose.joint.j5 = 0
motion_pose.joint.j6 = 0

# [ZH] 发送运动请求
# [EN] Send motion request
ret = arm.motion.move_joint(motion_pose, vel=0.5, acc=0.5)
if ret == StatusCodeEnum.OK:
    print("关节运动成功 / Joint motion successful")
else:
    print(f"关节运动失败,错误代码 / Joint motion failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from the Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.6 让机器人末端沿直线移动到指定的位置

方法名motion.move_line( pose : MotionPose, vel : float = 100, acc : float = 1) -> StatusCodeEnum
描述让机器人末端沿直线移动到指定的位置,移动方式为两点之间的直线路径
请求参数pose : MotionPose 笛卡尔空间或关节坐标系上的一个点的坐标
vel : float 运动的速度,范围是 1~4000mm/s, 表示机械臂末端移动速度
acc : float 范围是 0~1.2, 表示最大加速度的倍数
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

示例代码

motion/move_line.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 直线运动使用示例 / Example of linear motion usage
"""

from Agilebot import Arm, MotionPose, PoseType, StatusCodeEnum

# [ZH] 初始化Arm类
# [EN] Initialize the Arm class
arm = Arm()
# [ZH] 连接控制器
# [EN] Connect to the controller
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if the connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 初始化位姿
# [EN] Initialize pose
motion_pose = MotionPose()
motion_pose.pt = PoseType.JOINT
motion_pose.joint.j1 = 0
motion_pose.joint.j2 = 0
motion_pose.joint.j3 = 60
motion_pose.joint.j4 = 60
motion_pose.joint.j5 = 0
motion_pose.joint.j6 = 0

# [ZH] 发送运动请求
# [EN] Send motion request
ret = arm.motion.move_line(motion_pose, vel=100, acc=0.5)
if ret == StatusCodeEnum.OK:
    print("直线运动成功 / Line motion successful")
else:
    print(f"直线运动失败,错误代码 / Line motion failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 结束后断开机器人连接
# [EN] Disconnect from the robot after completion
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.7 让机器人末端沿弧线移动到指定的位置

方法名motion.move_circle( pose1 : MotionPose, pose2 : MotionPose, vel : float = 100, acc : float = 1.0) -> StatusCodeEnum
描述让机器人末端沿弧线移动到指定的位置
请求参数pose1 : MotionPose 机械臂运动的途径点位姿
pose2 : MotionPose 机械臂运动的终点位姿
vel : float 运动的速度,范围是 1~4000mm/s, 表示机械臂末端移动速度
acc : float 范围是 0~1.2, 表示最大加速度的倍数
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

示例代码

motion/move_circle.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 圆弧运动使用示例 / Example of circular arc motion usage
"""

import time

from Agilebot import Arm, MotionPose, PoseType, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 初始化位姿
# [EN] Initialize pose
motion_pose = MotionPose()
motion_pose.pt = PoseType.CART
motion_pose.cartData.position.x = 377.000
motion_pose.cartData.position.y = 202.820
motion_pose.cartData.position.z = 507.155
motion_pose.cartData.position.c = 0
motion_pose.cartData.position.b = 0
motion_pose.cartData.position.a = 0

# [ZH] 运动到初始点
# [EN] Move to initial position
ret = arm.motion.move_joint(motion_pose)
if ret == StatusCodeEnum.OK:
    print("运动到初始点成功 / Move to initial position successful")
else:
    print(f"运动到初始点失败,错误代码 / Move to initial position failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 修改为运动中间点
# [EN] Modify to intermediate motion point
motion_pose.cartData.position.x = 488.300
motion_pose.cartData.position.y = 359.120
motion_pose.cartData.position.z = 507.155

# [ZH] 运动终点
# [EN] End position
motion_pose2 = MotionPose()
motion_pose2.pt = PoseType.CART
motion_pose2.cartData.position.x = 629.600
motion_pose2.cartData.position.y = 509.270
motion_pose2.cartData.position.z = 507.155
motion_pose2.cartData.position.c = 0
motion_pose2.cartData.position.b = 0
motion_pose2.cartData.position.a = 0

# [ZH] 等待运动结束
# [EN] Wait for motion to complete
time.sleep(10)

# [ZH] 开始运动
# [EN] Start motion
ret_code = arm.motion.move_circle(motion_pose, motion_pose2, vel=100)
if ret_code == StatusCodeEnum.OK:
    print("圆弧运动成功 / Circle motion successful")
else:
    print(f"圆弧运动失败,错误代码 / Circle motion failed, error code: {ret_code.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.8 获取机器人的当前位姿

方法名motion.get_current_pose( pose_type : PoseType, uf_index : int = 0, tf_index : int = 0) -> tuple[MotionPose, StatusCodeEnum]
描述获取机器人的当前位姿,可获取笛卡尔空间或关节坐标系下的位姿信息
请求参数pose_type :PoseType 位姿类型
uf_index : 当使用 PoseType.CART 时需传入用户坐标系 id, 默认 0
tf_index : 当使用 PoseType.CART 时需传入工具坐标系 id, 默认 0
返回值MotionPose: 机器人位姿
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

示例代码

motion/get_current_pose.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 当前关节位姿获取示例 / Example of current joint pose acquisition
"""

from Agilebot import Arm, PoseType, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 获取当前位姿
# [EN] Get current pose
motion_pose, ret = arm.motion.get_current_pose(PoseType.JOINT)
if ret == StatusCodeEnum.OK:
    print("获取关节位姿成功 / Get joint pose successful")
else:
    print(f"获取关节位姿失败,错误代码 / Get joint pose failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果位姿
# [EN] Print result pose
print(f"位姿类型 / Pose type: {motion_pose.pt}")
print(
    f"轴位置 / Axis position:\n"
    f"J1:{motion_pose.joint.j1}\n"
    f"J2:{motion_pose.joint.j2}\n"
    f"J3:{motion_pose.joint.j3}\n"
    f"J4:{motion_pose.joint.j4}\n"
    f"J5:{motion_pose.joint.j5}\n"
    f"J6:{motion_pose.joint.j6}"
)

# [ZH] 获取当前位姿
# [EN] Get current pose
motion_pose, ret = arm.motion.get_current_pose(PoseType.CART, 0, 0)
if ret == StatusCodeEnum.OK:
    print("获取笛卡尔位姿成功 / Get Cartesian pose successful")
else:
    print(f"获取笛卡尔位姿失败,错误代码 / Get Cartesian pose failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果位姿
# [EN] Print result pose
print(f"位姿类型 / Pose type: {motion_pose.pt}")
print(
    f"坐标位置 / Coordinate position:\n"
    f"X:{motion_pose.cartData.position.x}\n"
    f"Y:{motion_pose.cartData.position.y}\n"
    f"Z:{motion_pose.cartData.position.z}\n"
    f"A:{motion_pose.cartData.position.a}\n"
    f"B:{motion_pose.cartData.position.b}\n"
    f"C:{motion_pose.cartData.position.c}"
)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.9 获取机器人的 DH 参数

方法名motion.get_DH_param() -> tuple[list[DHparam], StatusCodeEnum]
描述获取机器人的 DH 参数
请求参数无参数
返回值list(DHparam): DH 参数列表
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): 不支持

4.2.10 设置机器人的 DH 参数

方法名motion.set_DH_param( dh_list : list[DHparam]) -> StatusCodeEnum
描述设置机器人的 DH 参数
请求参数dh_list : list(DHparam) DH 参数列表
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): 不支持

示例代码

motion/DH_param.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: DH参数设置使用示例 / Example of DH parameter setting usage
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 获取DH参数
# [EN] Get DH parameters
res, ret = arm.motion.get_DH_param()
if ret == StatusCodeEnum.OK:
    print("获取DH参数成功 / Get DH parameters successful")
else:
    print(f"获取DH参数失败,错误代码 / Get DH parameters failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 设置DH参数
# [EN] Set DH parameters
ret = arm.motion.set_DH_param(res)
if ret == StatusCodeEnum.OK:
    print("设置DH参数成功 / Set DH parameters successful")
else:
    print(f"设置DH参数失败,错误代码 / Set DH parameters failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果
# [EN] Print result
for param in res:
    print(
        f"DH参数的ID / DH parameter ID: {param.id}\n"
        f"杆件长度 / Link length: {param.a}\n"
        f"杆件扭角 / Link twist angle: {param.alpha}\n"
        f"关节距离 / Joint distance: {param.d}\n"
        f"关节转角 / Joint angle: {param.offset}"
    )

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.11 获取机器人轴锁定状态

方法名motion.get_drag_set() -> tuple[DragStatus, StatusCodeEnum]
描述获取当前机器人轴锁定状态,轴锁定只针对示教运动
请求参数无参数
返回值DragStatus: 轴锁定状态,True 表示该轴为可移动状态,False 表示被锁定
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): 不支持

示例代码

motion/get_drag_set.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 拖动设置使用示例 / Example of drag Settings usage
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 获取当前轴锁定状态
# [EN] Get current axis lock status
drag_status, ret = arm.motion.get_drag_set()
if ret == StatusCodeEnum.OK:
    print("获取拖动设置成功 / Get drag set successful")
else:
    print(f"获取拖动设置失败,错误代码 / Get drag set failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果
# [EN] Print result
print(
    f"当前X轴拖动状态 / Current X axis drag status: {drag_status.cart_status.x}\n"
    f"当前Y轴拖动状态 / Current Y axis drag status: {drag_status.cart_status.y}\n"
    f"当前Z轴拖动状态 / Current Z axis drag status: {drag_status.cart_status.z}"
)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.12 设定机器人轴锁定状态

方法名motion.set_drag_set( drag_status : DragStatus) -> StatusCodeEnum
描述设定当前机器人轴锁定状态,轴锁定只针对示教运动
请求参数drag_statusDragStatus 各轴的锁定状态,默认全部为 True:解锁状态
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): 不支持

示例代码

motion/set_drag_set.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 拖动状态设置实例 / Example of dragging status setting
"""

from Agilebot import Arm, DragStatus, StatusCodeEnum, TCSType

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 设置示教坐标系
# [EN] Set teaching coordinate system
arm.motion.set_TCS(TCSType.BASE)
if ret == StatusCodeEnum.OK:
    print("操作成功 / Operation successful")
else:
    print(f"操作失败,错误代码 / Operation failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 设置要锁定的轴
# [EN] Set axes to be locked
drag_status = DragStatus()
drag_status.cart_status.x = False
drag_status.cart_status.y = False
# [ZH] 设置连续拖动开关
# [EN] Set continuous drag switch
drag_status.is_continuous_drag = True

# [ZH] 设置轴锁定状态
# [EN] Set axis lock status
ret = arm.motion.set_drag_set(drag_status)
if ret == StatusCodeEnum.OK:
    print("设置拖动状态成功 / Set drag status successful")
else:
    print(f"设置拖动状态失败,错误代码 / Set drag status failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果
# [EN] Print result
print(
    f"当前X轴拖动状态 / Current X axis drag status: {drag_status.cart_status.x}\n"
    f"当前Y轴拖动状态 / Current Y axis drag status: {drag_status.cart_status.y}\n"
    f"当前Z轴拖动状态 / Current Z axis drag status: {drag_status.cart_status.z}"
)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.13 设定当前机器人是否启动拖动

方法名motion.enable_drag( drag_state : bool) -> StatusCodeEnum
描述设定当前机器人是否启动拖动
请求参数drag_state :bool 机器人是否允许拖动,True 表示进入拖动状态,False 表示退出拖动状态
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): 不支持

示例代码

motion/enable_drag.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 拖动示教使用示例 / example of drag teaching usage
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 进入拖动示教
# [EN] Enter drag teaching mode
ret = arm.motion.enable_drag(True)
if ret == StatusCodeEnum.OK:
    print("进入拖动示教成功 / Enter drag teaching successful")
else:
    print(f"进入拖动示教失败,错误代码 / Enter drag teaching failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 退出拖动示教
# [EN] Exit drag teaching mode
ret = arm.motion.enable_drag(False)
if ret == StatusCodeEnum.OK:
    print("退出拖动示教成功 / Exit drag teaching successful")
else:
    print(f"退出拖动示教失败,错误代码 / Exit drag teaching failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.14 进入实时位置控制模式

方法名motion.enter_position_control() -> StatusCodeEnum
描述进入实时位置控制模式,允许对机器人进行精确的位置控制
请求参数
返回值StatusCodeEnum: 函数执行结果
备注在进入实时控制模式后,必须通过 UDP 发送控制指令
兼容的机器人软件版本协作 (Copper): v7.5.2.0+
工业 (Bronze): 不支持

4.2.15 退出实时位置控制模式

方法名motion.exit_position_control() -> StatusCodeEnum
描述退出实时位置控制模式,恢复默认的机器人控制状态
请求参数
返回值StatusCodeEnum: 函数执行结果
备注退出后,机器人将不再接受实时控制指令
兼容的机器人软件版本协作 (Copper): v7.5.2.0+
工业 (Bronze): 不支持

4.2.16 设置 UDP 反馈参数

方法名motion.set_udp_feedback_params( flag : bool, ip : str, interval : int, feedback_type : int, DO_list : list[int] = None) -> StatusCodeEnum
描述配置机器人向指定 IP 地址推送数据的 UDP 反馈参数
请求参数flag :bool 是否开启 UDP 数据推送;
ip :str 接收端的 IP 地址;
interval :int 发送数据的间隔(单位:毫秒);
feedback_type :int 反馈数据格式(0:XML,1:JSON,2:PROTO);
DO_list :list [int] 期望获取的 DO 信号列表(最多十个,可选)
返回值StatusCodeEnum: 函数执行结果
备注参数设置仅在 UDP 数据推送功能启用时有效
兼容的机器人软件版本协作 (Copper): v7.5.2.0+
工业 (Bronze): 不支持

示例代码

motion/UDP_feedback_position_control.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 实时位置控制模式使用示例 / Example of the real-time location control mode usage
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 设置udp反馈参数
# [EN] Set UDP feedback parameters
ret = arm.motion.set_udp_feedback_params(True, "10.27.1.254", 20, 1, [0, 1, 2])
if ret == StatusCodeEnum.OK:
    print("设置UDP反馈参数成功 / Set UDP feedback parameters successful")
else:
    print(f"设置UDP反馈参数失败,错误代码 / Set UDP feedback parameters failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 进入实时位置控制模式
# [EN] Enter real-time position control mode
ret = arm.motion.enter_position_control()
if ret == StatusCodeEnum.OK:
    print("进入实时位置控制模式成功 / Enter real-time position control mode successful")
else:
    print(
        f"进入实时位置控制模式失败,错误代码 / Enter real-time position control mode failed, error code: {ret.errmsg}"
    )
    arm.disconnect()
    exit(1)

# [ZH] 在此插入发送UDP数据控制机器人代码
# [EN] Insert UDP data sending code to control robot here

# [ZH] 退出实时位置控制模式
# [EN] Exit real-time position control mode
ret = arm.motion.exit_position_control()
if ret == StatusCodeEnum.OK:
    print("退出实时位置控制模式成功 / Exit real-time position control mode successful")
else:
    print(f"退出实时位置控制模式失败,错误代码 / Exit real-time position control mode failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

推送数据说明

名称字段描述
RIst: 笛卡尔位置X工具坐标系下 X 方向值,单位为毫米
Y工具坐标系下 Y 方向值,单位为毫米
Z工具坐标系下 Z 方向值,单位为毫米
A工具坐标系下绕 X 方向旋转,单位为度
B工具坐标系下绕 Y 方向旋转,单位为度
C工具坐标系下绕 Z 方向旋转,单位为度
AIPos: 关节位置A1-A6六个关节的值,单位为角度
EIPos: 附加轴数据EIPos附加轴数据
WristBtnState: 手腕按键状态按键状态1 = 按键按下,0 = 按键抬起
DragModel拖拽按键状态
RecordJoint示教记录按键状态
PauseResume暂停恢复按键状态
Digout: DO 输出Digout数字输出(DO)的状态
ProgramStatus: 程序状态ProgId程序 ID
Status解释器执行状态:
0 = INTERPRETER_IDLE
1 = INTERPRETER_EXECUTE
2 = INTERPRETER_PAUSED
Xpath程序片段返回值,格式为 程序名:行号
IPOC: 时间戳IPOC时间戳

4.2.17 获取机器人软限位

方法名motion.get_user_soft_limit() -> tuple[list[list[float]], StatusCodeEnum]
描述获取当前机器人软限位信息
请求参数
返回值List (List (float)): 机器人软限位信息,列表第一层代表各轴,第二层代表每个轴的下限位和上限位值
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

示例代码

motion/get_user_soft_limit.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 用户软限位设置获取示例 / Example of obtaining the user's soft limit setting
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 获取当前机器人软限位信息
# [EN] Get current robot soft limit information
res, ret = arm.motion.get_user_soft_limit()
if ret == StatusCodeEnum.OK:
    print("获取用户软限位成功 / Get user soft limit successful")
else:
    print(f"获取用户软限位失败,错误代码 / Get user soft limit failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果
# [EN] Print result
print(f"当前机器人软限位信息 / Current robot soft limit information: {res}")

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.18 负载相关接口

4.2.18.1 获取当前激活的负载编号

方法名motion.payload.get_current_payload() -> tuple[int, StatusCodeEnum]
描述获取当前激活的负载编号,返回对应的 ID 编号
请求参数无参数
返回值int: 负载编号
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

示例代码

motion/get_current_payload.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 获取当前负载示例 / Example of get the current load
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 获取当前激活负载
# [EN] Get current active payload
current_payload_id, ret = arm.motion.payload.get_current_payload()
if ret == StatusCodeEnum.OK:
    print("获取当前负载成功 / Get current payload successful")
else:
    print(f"获取当前负载失败,错误代码 / Get current payload failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果
# [EN] Print result
print(f"当前激活负载ID为 / Current active payload ID: {current_payload_id}")

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.18.2 根据指定编号获取负载信息

方法名motion.payload.get_payload_by_id( payload_id : int) -> tuple[PayloadInfo, StatusCodeEnum]
描述获取指定编号的负载信息
请求参数payload_id : int 指定的负载 ID 编号
返回值PayloadInfo: 负载信息
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

示例代码

motion/get_payload_by_id.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 根据ID获取负载参数示例 / Example of obtaining load parameters based on ID
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 获取负载
# [EN] Get payload
res, ret = arm.motion.payload.get_payload_by_id(6)
if ret == StatusCodeEnum.OK:
    print("获取负载成功 / Get payload successful")
else:
    print(f"获取负载失败,错误代码 / Get payload failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果
# [EN] Print result
print(
    f"负载ID / Payload ID: {res.id}\n"
    f"负载质量 / Payload mass: {res.weight}\n"
    f"负载注释 / Payload comment: {res.comment}\n"
    f"负载质心 / Payload mass center: {res.mass_center.x}, {res.mass_center.y}, {res.mass_center.z}\n"
    f"负载转动惯量 / Payload inertia moment: {res.inertia_moment.lx}, {res.inertia_moment.ly}, {res.inertia_moment.lz}\n"
)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.18.3 根据指定编号激活负载

方法名motion.payload.set_current_payload( payload_id : int) -> StatusCodeEnum
描述根据指定编号激活负载
请求参数payload_id : int 指定的负载 ID 编号
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

示例代码

motion/set_current_payload.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 当前负载设置示例 / Example of the current load settings
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 指定编号激活负载
# [EN] Activate payload by specified ID
ret = arm.motion.payload.set_current_payload(1)
if ret == StatusCodeEnum.OK:
    print("设置当前负载成功 / Set current payload successful")
else:
    print(f"设置当前负载失败,错误代码 / Set current payload failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.18.4 向机器人控制柜添加一个用户自定义负载信息

方法名motion.payload.add_payload( payload_info : PayloadInfo) -> StatusCodeEnum
描述向机器人控制柜添加一个用户自定义负载信息
请求参数payload_info : PayloadInfo 用户自定义负载信息
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

示例代码

motion/add_payload.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 添加负载使用示例 / Example of Add load usage
"""

from Agilebot import Arm, PayloadInfo, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 初始化负载
# [EN] Initialize payload
new_payload = PayloadInfo()
new_payload.id = 6
new_payload.comment = "Test"
new_payload.weight = 5
new_payload.mass_center.x = -151
new_payload.mass_center.y = 1.0
new_payload.mass_center.z = 75
new_payload.inertia_moment.lx = 0.11
new_payload.inertia_moment.ly = 0.61
new_payload.inertia_moment.lz = 0.54

# [ZH] 添加负载
# [EN] Add payload
ret = arm.motion.payload.add_payload(new_payload)
if ret == StatusCodeEnum.OK:
    print("添加负载成功 / Add payload successful")
else:
    print(f"添加负载失败,错误代码 / Add payload failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.18.5 根据指定编号删除对应的负载信息

方法名motion.payload.delete_payload( payload_id : int) -> StatusCodeEnum
描述向控制器删除一个用户自定义负载
请求参数payload_id : int 指定的负载 ID 编号
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+
备注注意:无法删除当前激活的负载,如果要删除激活的负载,请先激活其他负载再删除当前负载

示例代码

motion/delete_payload.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 删除负载使用示例 / Example of delete the load usage
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 删除指定ID负载
# [EN] Delete payload with specified ID
ret = arm.motion.payload.delete_payload(6)
if ret == StatusCodeEnum.OK:
    print("删除负载成功 / Delete payload successful")
else:
    print(f"删除负载失败,错误代码 / Delete payload failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果
# [EN] Print result
print("删除负载6成功 / Delete payload 6 successful")

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.18.6 更新一个已存在负载信息

方法名motion.payload.update_payload( payload_info : PayloadInfo) -> StatusCodeEnum
描述向机器人更新一个已存在的用户自定义负载的信息
请求参数payload_info : PayloadInfo 用户自定义更新负载的信息
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

示例代码

motion/update_payload.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 更新负载使用示例 / Example of updating the load
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 获取负载
# [EN] Get payload
payload_info, ret_code = arm.motion.payload.get_payload_by_id(6)
payload_info.comment = "Test"
payload_info.weight = 10
payload_info.mass_center.x = -100
payload_info.mass_center.y = 10
payload_info.mass_center.z = 10
payload_info.inertia_moment.lx = 10
payload_info.inertia_moment.ly = 10
payload_info.inertia_moment.lz = 10

# [ZH] 更新负载
# [EN] Update payload
ret = arm.motion.payload.update_payload(payload_info)
if ret == StatusCodeEnum.OK:
    print("更新负载成功 / Update payload successful")
else:
    print(f"更新负载失败,错误代码 / Update payload failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果
# [EN] Print result
print(
    f"负载ID / Payload ID: {payload_info.id}\n"
    f"负载质量 / Payload mass: {payload_info.weight}\n"
    f"负载质心 / Payload mass center: {payload_info.mass_center.x}, {payload_info.mass_center.y}, {payload_info.mass_center.z}\n"
    f"负载转动惯量 / Payload inertia moment: {payload_info.inertia_moment.lx}, {payload_info.inertia_moment.ly}, {payload_info.inertia_moment.lz}\n"
    f"负载注释 / Payload comment: {payload_info.comment}\n"
)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.18.7 获取所有负载信息

方法名motion.payload.get_all_payload() -> tuple[list, StatusCodeEnum]
描述获取所有负载信息
请求参数无参数
返回值list : 所有负载信息列表
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

示例代码

motion/get_all_payload.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 所有负载获取示例 / Example of all load acquisition
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化Arm类
# [EN] Initialize Arm class
arm = Arm()
# [ZH] 连接控制器
# [EN] Connect to controller
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 获取所有负载
# [EN] Get all payloads
res, ret = arm.motion.payload.get_all_payload()
if ret == StatusCodeEnum.OK:
    print("获取所有负载成功 / Get all payloads successful")
else:
    print(f"获取所有负载失败,错误代码 / Get all payloads failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 打印结果
# [EN] Print result
for payload in res:
    print(f"负载ID / Payload ID: {payload[0]}\n负载注释 / Payload comment: {payload[1]}\n")

# [ZH] 结束后断开机器人连接
# [EN] Disconnect from robot after completion
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.2.18.8 检测 3 轴是否水平

方法名motion.payload.check_axis_three_horizontal() -> tuple[float, StatusCodeEnum]
描述检测 3 轴是否水平
请求参数
返回值float: 返回 3 轴的水平角度,单位为度
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.2.0+
工业 (Bronze): 不支持
备注水平的角度,必须在 - 1~1 之间才能进行负载测定

4.2.18.9 获取负载测定状态

方法名motion.payload.get_payload_identify_state() -> tuple[PayloadIdentifyState, StatusCodeEnum]
描述获取负载测定的状态
请求参数
返回值PayloadIdentifyState 返回负载测定状态
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.2.0+
工业 (Bronze): 不支持

4.2.18.10 开始负载测定

方法名motion.payload.start_payload_identify( weight : float, angle : float) -> StatusCodeEnum
描述开始负载测定
请求参数weight :float 负载重量(未知重量填 - 1);
angle :float 6 轴允许转动的角度(30-90 度)
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.2.0+
工业 (Bronze): 不支持
备注开始负载测定前必须先进入负载测定状态

4.2.18.11 获取负载测定结果

方法名motion.payload.payload_identify_result() -> tuple[PayloadInfo, StatusCodeEnum]
描述获取负载测定的结果
请求参数
返回值PayloadInfo: 返回负载测定结果
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.2.0+
工业 (Bronze): 不支持

4.2.18.12 开始干涉检查

方法名motion.payload.interference_check_for_payload_identify( weight : float, angle : float) -> StatusCodeEnum
描述开始负载测定的干涉检查
请求参数weight : float 负载重量;
angle : float 6 轴转动角度(30-90 度)
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.2.0+
工业 (Bronze): 不支持

4.2.18.13 进入负载测定状态

方法名motion.payload.payload_identify_start() -> StatusCodeEnum
描述进入负载测定状态
请求参数
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.2.0+
工业 (Bronze): 不支持

4.2.18.14 结束负载测定状态

方法名motion.payload.payload_identify_done() -> StatusCodeEnum
描述结束负载测定状态
请求参数
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.2.0+
工业 (Bronze): 不支持

4.2.18.15 负载测定全流程

方法名motion.payload.payload_identify( weight : float, angle : float) -> tuple[PayloadInfo, StatusCodeEnum]
描述完整的负载测定流程,包含上述负载测定全部接口,无特殊需求负载测定只用该接口即可
请求参数weight : float 负载重量(未知重量填 - 1);
angle : float 6 轴转动角度(30-90 度)
返回值PayloadInfo: 负载测定结果
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.2.0+
工业 (Bronze): 不支持
备注返回的负载可以新增到机器人中或写入机器人中已有的某个负载
全流程步骤:
1. 移动到指定水平位并检测是否水平
2. 进入负载测定状态
3. 开始负载测定
4. 获取负载测定结果
5. 结束负载测定状态

示例代码

motion/payload_identify.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 负载识别使用示例 / Example of load identification usage
"""

import time

from Agilebot import Arm, MotionPose, PoseType, ServoStatusEnum, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

motion_pose = MotionPose()
motion_pose.pt = PoseType.JOINT

motion_pose.joint.j1 = 0
motion_pose.joint.j2 = 0
motion_pose.joint.j3 = 0
motion_pose.joint.j4 = 0
motion_pose.joint.j5 = 0
motion_pose.joint.j6 = 0

# [ZH] 运动到指定点
# [EN] Move to specified position
code = arm.motion.move_joint(motion_pose)
if ret == StatusCodeEnum.OK:
    print("运动到指定点成功 / Move to specified position successful")
else:
    print(f"运动到指定点失败,错误代码 / Move to specified position failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

while True:
    # [ZH] 获取伺服状态
    # [EN] Get servo status
    state, ret = arm.get_servo_status()
    if ret == StatusCodeEnum.OK:
        print("获取伺服状态成功 / Get servo status successful")
    else:
        print(f"获取伺服状态失败,错误代码 / Get servo status failed, error code: {ret.errmsg}")
        arm.disconnect()
        exit(1)

    if state == ServoStatusEnum.SERVO_IDLE:
        break
    else:
        time.sleep(1)

# [ZH] 开始负载测定并获取结果
# [EN] Start payload identification and get result
res, ret = arm.motion.payload.payload_identify(-1, 90)
if ret == StatusCodeEnum.OK:
    print("负载识别成功 / Payload identification successful")
else:
    print(f"负载识别失败,错误代码 / Payload identification failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")