4.7 轨迹控制
概述
Trajectory 模块提供离线轨迹执行、轨迹 / 路径录制、转换与复现的完整流程接口,支持复杂轨迹的定制与复现。
核心功能
- 支持设置和执行离线轨迹文件
- 支持以安全速度将机器人移动到离线轨迹起始点
- 支持 CSV 到 trajectory 格式的文件转换
- 支持轨迹 / 路径的录制、播放、删除和管理
- 支持获取轨迹列表和起始位置
- 支持路径规划器参数的配置与查询
- 支持沿轨迹 / 路径运动
使用场景
- 实现复杂轨迹的精确复现
- 录制和播放机器人运动轨迹
- 转换外部轨迹数据为机器人可执行格式
- 定制路径规划参数以优化运动性能
- 批量管理和查询轨迹 / 路径文件
4.7.1 设置待执行的离线轨迹文件
| 方法名 | trajectory.set_offline_trajectory_file( path : str) -> StatusCodeEnum |
|---|---|
| 描述 | 设置待执行的离线轨迹文件 |
| 请求参数 | path : str 离线轨迹文件程序名 (格式说明见下方备注) |
| 返回值 | StatusCodeEnum: 函数执行结果 |
| 备注 | A.trajectory 轨迹文件格式为文本文件: - 第 1 行:6 代表 6 个轴,0.001 代表两点间隔 1 ms,8093 代表轨迹点数。 - 第 2 行:6 个轴的起始位置。 - 第 3-8095 行:轨迹点数据,包含 6 轴的位置 / 速度 / 加速度 / 力矩前馈 /do 端口 /do 端口值。 - do_port 取值范围 1~24;do_port 为 -1 表示该位置不触发 IO;do_port 为 1 且 do_state 为 1 表示 do1 端口触发 ON;do_port 为 1 且 do_state 为 0 表示 do1 端口触发 OFF。 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
4.7.2 让机器人以安全速度移动到离线轨迹中的起始点
| 方法名 | trajectory.prepare_offline_trajectory() -> StatusCodeEnum |
|---|---|
| 描述 | 让机器人以安全速度移动到离线轨迹中的起始点 |
| 请求参数 | 无参数 |
| 返回值 | StatusCodeEnum: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
4.7.3 让机器人开始执行离线轨迹文件
| 方法名 | trajectory.execute_offline_trajectory() -> StatusCodeEnum |
|---|---|
| 描述 | 让机器人开始执行离线轨迹程序 |
| 请求参数 | 无参数 |
| 返回值 | StatusCodeEnum: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
4.7.4 轨迹文件转换功能
| 方法名 | trajectory.transform_csv_to_trajectory( file_name : str, separator : str = " ", io_flag : str = "2") |
|---|---|
| 描述 | 将轨迹 csv 文件转换成 trajectory 格式的轨迹文件并存放在控制柜的轨迹文件目录上 |
| 请求参数 | file_name : str CSV 轨迹文件名 (无需 .csv 后缀) separator : str 分隔符 (空格或逗号;空格生成 .trajectory ,逗号生成 .csv ) io_flag : str IO 信息来源 (1: 默认值 do_port = -1 、 do_state = 0 ;2: 使用用户指定 IO) |
| 返回值 | str:转换后轨迹文件路径 StatusCodeEnum: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
4.7.5 查询轨迹文件转换状态
| 方法名 | trajectory.check_transform_status( file_name : str) -> tuple[TransformStatusEnum, StatusCodeEnum] |
|---|---|
| 描述 | 查询轨迹文件转换的当前状态 |
| 请求参数 | file_name : str 轨迹文件路径 ( transform_csv_to_trajectory 接口返回) |
| 返回值 | TransformStatusEnum: 转换状态 StatusCodeEnum: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
示例代码
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 离线轨迹使用示例 / Example of offline trajectory usage
"""
import time
from Agilebot import Arm, RobotStatusEnum, ServoStatusEnum, StatusCodeEnum
# [ZH] 初始化捷勃特机器人
# [EN] Initialize the robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to the 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 the offline trajectory file
ret = arm.trajectory.set_offline_trajectory_file("test_torque.trajectory")
if ret == StatusCodeEnum.OK:
print("设置离线轨迹文件成功 / Set offline trajectory file successful")
else:
print(f"设置离线轨迹文件失败,错误代码 / Set offline trajectory file failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 准备进行离线轨迹运行
# [EN] Prepare for offline trajectory execution
ret = arm.trajectory.prepare_offline_trajectory()
if ret == StatusCodeEnum.OK:
print("准备离线轨迹运行成功 / Prepare offline trajectory execution successful")
else:
print(f"准备离线轨迹运行失败,错误代码 / Prepare offline trajectory execution failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 等待控制器到位
# [EN] Wait for the controller to be ready
while True:
robot_status, ret = arm.get_robot_status()
if ret == StatusCodeEnum.OK:
print("获取机器人状态成功 / Get robot status successful")
else:
print(f"获取机器人状态失败,错误代码 / Get robot status failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
print(f"robot_status arm: {robot_status}")
servo_status, 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)
print(f"伺服状态 / Servo status: {servo_status}")
if robot_status == RobotStatusEnum.ROBOT_IDLE and servo_status == ServoStatusEnum.SERVO_IDLE:
break
time.sleep(2)
# [ZH] 执行离线轨迹
# [EN] Execute the offline trajectory
ret = arm.trajectory.execute_offline_trajectory()
if ret == StatusCodeEnum.OK:
print("执行离线轨迹成功 / Execute offline trajectory successful")
else:
print(f"执行离线轨迹失败,错误代码 / Execute offline trajectory failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from the robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")4.7.6 开始记录轨迹
| 方法名 | trajectory.trajectory_record_begin( name : str) -> StatusCodeEnum |
|---|---|
| 描述 | 让机器人开始记录轨迹 |
| 请求参数 | name : 设置轨迹程序名 |
| 返回值 | StatusCodeEnum: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
4.7.7 结束记录轨迹
| 方法名 | trajectory.trajectory_record_finish( name : str) -> StatusCodeEnum |
|---|---|
| 描述 | 让机器人结束记录轨迹 |
| 请求参数 | name : 轨迹程序名 |
| 返回值 | StatusCodeEnum: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
4.7.8 开始播放轨迹
| 方法名 | trajectory.trajectory_replay_start( name : str) -> StatusCodeEnum |
|---|---|
| 描述 | 让机器人开始播放轨迹 |
| 请求参数 | name : 轨迹程序名 |
| 返回值 | StatusCodeEnum: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
4.7.9 结束播放轨迹
| 方法名 | trajectory.trajectory_replay_stop( name : str) -> StatusCodeEnum |
|---|---|
| 描述 | 让机器人结束播放轨迹 |
| 请求参数 | name : 轨迹程序名 |
| 返回值 | StatusCodeEnum: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
4.7.10 删除轨迹
| 方法名 | trajectory.trajectory_record_delete( name : str) -> StatusCodeEnum |
|---|---|
| 描述 | 删除机器人中指定轨迹 |
| 请求参数 | name : 轨迹程序名 |
| 返回值 | StatusCodeEnum: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
4.7.11 获取录制轨迹列表
| 方法名 | trajectory.get_trajectory_record_list() -> tuple[list[str], StatusCodeEnum] |
|---|---|
| 描述 | 获取录制的轨迹列表 |
| 请求参数 | 无 |
| 返回值 | list [str]: 轨迹列表 StatusCodeEnum: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
4.7.12 获取录制轨迹起始位置
| 方法名 | trajectory.get_trajectory_record_start_pose( name : str) -> tuple[MotionPose, StatusCodeEnum] |
|---|---|
| 描述 | 获取录制轨迹的起始位置 |
| 请求参数 | name : 轨迹程序名 |
| 返回值 | MotionPose: 轨迹起始位置 StatusCodeEnum: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
示例代码
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 轨迹记录相关使用示例 / Example of real-time trajectory records usage
"""
import time
from Agilebot import Arm, RobotStatusEnum, ServoStatusEnum, StatusCodeEnum
from Agilebot.IR.A.hardware_state import HardwareState, HWState
# [ZH] 初始化捷勃特机器人
# [EN] Initialize the robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to the 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] Subscribe to the trajectory record status
hw_state = HardwareState("10.27.1.254")
hw_state.subscribe(topic_list=[HWState.TOPIC_TRAJECTORY_RECORDS_STATUS])
# [ZH] 开始记录轨迹
# [EN] Start recording trajectory
ret = arm.trajectory.trajectory_record_begin("test")
if ret == StatusCodeEnum.OK:
print("开始轨迹记录成功 / Start trajectory record successful")
else:
print(f"开始轨迹记录失败,错误代码 / Start trajectory record failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
time.sleep(10)
res = hw_state.recv()
print(f"轨迹记录状态 / Trajectory record status: {res}")
# [ZH] 结束记录轨迹
# [EN] End recording trajectory
ret = arm.trajectory.trajectory_record_finish("test")
if ret == StatusCodeEnum.OK:
print("结束轨迹记录成功 / End trajectory record successful")
else:
print(f"结束轨迹记录失败,错误代码 / End trajectory record failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
res = hw_state.recv()
print(f"轨迹记录状态 / Trajectory record status: {res}")
# [ZH] 获取轨迹列表
# [EN] Get trajectory list
record_list, ret = arm.trajectory.get_trajectory_record_list()
if ret == StatusCodeEnum.OK:
print("获取轨迹记录列表成功 / Get trajectory record list successful")
else:
print(f"获取轨迹记录列表失败,错误代码 / Get trajectory record list failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
assert "test" in record_list
# [ZH] 获取轨迹起始位姿
# [EN] Get trajectory start pose
pose, ret = arm.trajectory.get_trajectory_record_start_pose("test")
if ret == StatusCodeEnum.OK:
print("获取轨迹起始位姿成功 / Get trajectory start pose successful")
else:
print(f"获取轨迹起始位姿失败,错误代码 / Get trajectory start pose failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 移动到起始位姿
# [EN] Move to the start pose
ret = arm.motion.move_joint(pose)
if ret == StatusCodeEnum.OK:
print("关节运动成功 / Joint motion successful")
else:
print(f"关节运动失败,错误代码 / Joint motion failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 等待控制器到位
# [EN] Wait for the controller to be ready
while True:
robot_status, ret = arm.get_robot_status()
if ret == StatusCodeEnum.OK:
print("获取机器人状态成功 / Get robot status successful")
else:
print(f"获取机器人状态失败,错误代码 / Get robot status failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
print(f"robot_status arm: {robot_status}")
servo_status, 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)
print(f"伺服状态 / Servo status: {servo_status}")
if robot_status == RobotStatusEnum.ROBOT_IDLE and servo_status == ServoStatusEnum.SERVO_IDLE:
break
time.sleep(2)
# [ZH] 开始回放轨迹
# [EN] Start replay trajectory
ret = arm.trajectory.trajectory_replay_start("test")
if ret == StatusCodeEnum.OK:
print("开始轨迹回放成功 / Start trajectory replay successful")
else:
print(f"开始轨迹回放失败,错误代码 / Start trajectory replay failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
time.sleep(5)
# [ZH] 停止回放轨迹
# [EN] Stop replay trajectory
ret = arm.trajectory.trajectory_replay_stop("test")
if ret == StatusCodeEnum.OK:
print("停止轨迹回放成功 / Stop trajectory replay successful")
else:
print(f"停止轨迹回放失败,错误代码 / Stop trajectory replay failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 删除轨迹
# [EN] Delete trajectory
ret = arm.trajectory.trajectory_record_delete("test")
if ret == StatusCodeEnum.OK:
print("删除轨迹记录成功 / Delete trajectory record successful")
else:
print(f"删除轨迹记录失败,错误代码 / Delete trajectory record failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from the robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")4.7.13 开始记录轨迹 / 路径
| 方法名 | trajectory.path_record_begin( name : str, comment : str, param : float, angle : float = 1) -> StatusCodeEnum |
|---|---|
| 描述 | 开始轨迹表(.traj)或路径表(.path)的记录。 |
| 请求参数 | name :轨迹 / 路径文件名 (必须以 .traj 或 .path 结尾);comment :轨迹 / 路径描述;param :记录参数 (路径表 .path: 移动距离阈值 mm;轨迹表 .traj: 记录间隔 ms);angle :旋转角度阈值 (仅路径表 .path 生效) |
| 返回值 | StatusCodeEnum:函数执行结果。 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.8.0.0+ 工业 (Bronze): 不支持 |
4.7.14 结束记录轨迹 / 路径
| 方法名 | trajectory.path_record_finish() -> StatusCodeEnum |
|---|---|
| 描述 | 结束当前轨迹表 / 路径表的记录。 |
| 请求参数 | 无 |
| 返回值 | StatusCodeEnum:函数执行结果。 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.8.0.0+ 工业 (Bronze): 不支持 |
4.7.15 获取轨迹 / 路径起始姿态
| 方法名 | trajectory.get_path_start_pose( name : str) -> tuple[MotionPose, StatusCodeEnum] |
|---|---|
| 描述 | 获取指定轨迹 / 路径文件的起始姿态。 |
| 请求参数 | name :轨迹 / 路径文件名。 |
| 返回值 | MotionPose 起始姿态,StatusCodeEnum:函数执行结果。 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.8.0.0+ 工业 (Bronze): 不支持 |
4.7.16 获取轨迹 / 路径状态
| 方法名 | trajectory.get_path_state( path_list : list[str]) -> tuple[dict[str, int], StatusCodeEnum] |
|---|---|
| 描述 | 批量查询轨迹 / 路径文件当前状态。 |
| 请求参数 | path_list :待查询的轨迹 / 路径文件名列表。 |
| 返回值 | dict[str, int] 文件名→状态码映射,StatusCodeEnum:函数执行结果。 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.8.0.0+ 工业 (Bronze): 不支持 |
4.7.17 设置路径规划参数
| 方法名 | trajectory.set_path_planner_parameter( transition_time : float, scaling_factor : float) -> StatusCodeEnum |
|---|---|
| 描述 | 设置路径规划器参数,影响运动平滑性与速度 / 加速度分配策略。 |
| 请求参数 | transition_time :过渡时长 (0~1,数值越大加减速越柔和);scaling_factor :路径参数 s 重新分布权重 (0~1;0: 匀速分配,1: 最大位移线性分配,0.5: 等加速度缩放,0.33: 等急动度缩放) |
| 返回值 | StatusCodeEnum:函数执行结果。 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.8.0.0+ 工业 (Bronze): 不支持 |
4.7.18 获取路径规划参数
| 方法名 | trajectory.get_path_planner_parameter() -> tuple[float, float, StatusCodeEnum] |
|---|---|
| 描述 | 读取当前路径规划器参数。 |
| 请求参数 | 无 |
| 返回值 | transition_time :过渡时长,0~1。scaling_factor :路径参数 s 的重新分布权重,0~1。StatusCodeEnum:函数执行结果。 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.8.0.0+ 工业 (Bronze): 不支持 |
4.7.19 沿轨迹 / 路径运动
| 方法名 | trajectory.move_path( name : str, vel : float = 100, acc : float = 1) -> StatusCodeEnum |
|---|---|
| 描述 | 让机器人末端沿指定轨迹 / 路径文件运动。 |
| 请求参数 | name :轨迹 / 路径文件名。vel :末端速度 (0~5000 mm/s)。acc :加速度倍数 (0~1.2)。 |
| 返回值 | StatusCodeEnum:函数执行结果。 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.8.0.0+ 工业 (Bronze): 不支持 |
示例代码
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 路径记录相关使用示例 / Example of usage related to path records
"""
import time
from Agilebot import Arm, MoveMode, RobotStatusEnum, ServoStatusEnum, StatusCodeEnum
# [ZH] 初始化机械臂并连接到指定IP地址
# [EN] Initialize the robotic arm and connect to the specified IP address
arm = Arm()
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)
# [ZH] 开始记录轨迹,指定文件名、轨迹名、记录模式和覆盖选项
# [EN] Start trajectory recording, specifying filename, trajectory name, recording mode and overwrite option
ret = arm.trajectory.path_record_begin("test_path.path", "Path Test", 10, 1)
if ret == StatusCodeEnum.OK:
print("开始路径记录成功 / Start path record successful")
else:
print(f"开始路径记录失败,错误代码 / Start path record failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 检查记录状态,传入轨迹文件名列表
# [EN] Check recording status, passing in trajectory filename list
state, ret = arm.trajectory.get_path_state(["test_path.path"])
if ret == StatusCodeEnum.OK:
print("获取路径状态成功 / Get path state successful")
else:
print(f"获取路径状态失败,错误代码 / Get path state failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
if state["test_path.path"] == 0:
print("路径表记录中 / Path table recording in progress")
# [ZH] 示教运动
# [EN] Teaching motion
ret = arm.jogging.move(3, MoveMode.Continuous)
if ret == StatusCodeEnum.OK:
print("点动运动成功 / Jogging movement successful")
else:
print(f"点动运动失败,错误代码 / Jogging movement failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# 等待3秒,让机械臂持续运动
time.sleep(2)
# 停止机械臂运动
arm.jogging.stop()
time.sleep(2)
ret = arm.jogging.move(-3, MoveMode.Continuous)
if ret == StatusCodeEnum.OK:
print("点动运动成功 / Jogging movement successful")
else:
print(f"点动运动失败,错误代码 / Jogging movement failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# 等待3秒,让机械臂持续运动
time.sleep(2)
# 停止机械臂运动
arm.jogging.stop()
time.sleep(2)
# [ZH] 结束轨迹记录
# [EN] Finish trajectory recording
ret = arm.trajectory.path_record_finish()
if ret == StatusCodeEnum.OK:
print("结束路径记录成功 / Finish path record successful")
else:
print(f"结束路径记录失败,错误代码 / Finish path record failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 检查记录状态,传入轨迹文件名列表
# [EN] Check recording status, passing in trajectory filename list
state, ret = arm.trajectory.get_path_state(["test_path.path"])
if ret == StatusCodeEnum.OK:
print("获取路径状态成功 / Get path state successful")
else:
print(f"获取路径状态失败,错误代码 / Get path state failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
if state["test_path.path"] == 1:
print("路径表记录完成 / Path table recording completed")
# [ZH] 获取记录轨迹的起始位置姿态
# [EN] Get the starting position pose of the recorded trajectory
pose, ret = arm.trajectory.get_path_start_pose("test_path.path")
if ret == StatusCodeEnum.OK:
print("获取路径起始位姿成功 / Get path start pose successful")
else:
print(f"获取路径起始位姿失败,错误代码 / Get path start pose failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 移动到起始位姿
# [EN] Move to the start pose
ret = arm.motion.move_joint(pose)
if ret == StatusCodeEnum.OK:
print("关节运动成功 / Joint motion successful")
else:
print(f"关节运动失败,错误代码 / Joint motion failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 等待控制器到位
# [EN] Wait for the controller to be ready
while True:
robot_status, ret = arm.get_robot_status()
# [ZH] 检查机器人状态获取是否成功
# [EN] Check if robot status acquisition is successful
if ret == StatusCodeEnum.OK:
print("获取机器人状态成功 / Get robot status successful")
else:
print(f"获取机器人状态失败,错误代码 / Get robot status failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
print(f"robot_status arm: {robot_status}")
servo_status, ret = arm.get_servo_status()
# [ZH] 检查伺服状态获取是否成功
# [EN] Check if servo status acquisition is successful
if ret == StatusCodeEnum.OK:
print("获取伺服状态成功 / Get servo status successful")
else:
print(f"获取伺服状态失败,错误代码 / Get servo status failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
print(f"servo status arm: {servo_status}")
if robot_status == RobotStatusEnum.ROBOT_IDLE and servo_status == ServoStatusEnum.SERVO_IDLE:
break
time.sleep(2)
# [ZH] 设置轨迹规划参数(速度比例和加速度比例)
# [EN] Set trajectory planning parameters (velocity ratio and acceleration ratio)
ret = arm.trajectory.set_path_planner_parameter(0.5, 0.3333333)
if ret == StatusCodeEnum.OK:
print("设置路径规划参数成功 / Set path planner parameter successful")
else:
print(f"设置路径规划参数失败,错误代码 / Set path planner parameter failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 获取轨迹规划参数以验证设置是否成功
# [EN] Get trajectory planning parameters to verify if the setting is successful
param1, param2, ret = arm.trajectory.get_path_planner_parameter()
if ret == StatusCodeEnum.OK:
print("获取路径规划参数成功 / Get path planner parameter successful")
else:
print(f"获取路径规划参数失败,错误代码 / Get path planner parameter failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
# [ZH] 移动到记录的轨迹,指定轨迹文件名、速度和模式
# [EN] Move to the recorded trajectory, specifying trajectory filename, speed and mode
ret = arm.trajectory.move_path("test_path.path", 2000, 1)
if ret == StatusCodeEnum.OK:
print("路径运动成功 / Path motion successful")
else:
print(f"路径运动失败,错误代码 / Path motion failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
time.sleep(3)
# [ZH] 断开与机械臂的连接
# [EN] Disconnect from the robotic arm
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")