3.4 MotionControl 运动类
概述
MotionControl 是捷勃特机器人运动控制的核心对象,负责封装以下核心功能:
- 速度 / 加速度参数管理
- 坐标系管理
- 点位转换
- 轨迹运动控制
- 位置控制模式
- 拖动示教
- 负载管理
常见使用流程
在 Arm 完成连接后,通过 arm.motionControl 获取 Motion 实例,无需单独初始化。
3.4.1 获取机器人参数
3.4.1.1 获取 OVC 全局速度比率
cpp
GetOVC() -> std::pair<Float64, STATUS_CODE>| 项 | 说明 |
|---|---|
| 描述 | 获取当前机器人 OVC 全局速度比率,比率范围为 0~1 |
| 请求参数 | 无 |
| 返回值 | Float64:速度比率,结果范围为 0~1 STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.1.2 获取 OAC 全局加速度比率
cpp
GetOAC() -> std::pair<Float64, STATUS_CODE>| 项 | 说明 |
|---|---|
| 描述 | 获取当前机器人 OAC 全局加速度比率,比率范围为 0~1.2 |
| 请求参数 | 无 |
| 返回值 | Float64:加速度比率,结果范围为 0~1.2 STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.1.3 获取当前使用的 TF 工具坐标系编号
cpp
GetTF() -> std::pair<int32_t, STATUS_CODE>| 项 | 说明 |
|---|---|
| 描述 | 获取当前机器人使用的 TF 工具坐标系编号,序号范围为 0~50 |
| 请求参数 | 无 |
| 返回值 | int32_t: 工具坐标系编号 STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.1.4 获取当前使用的 UF 用户坐标系编号
cpp
GetUF() -> std::pair<int32_t, STATUS_CODE>| 项 | 说明 |
|---|---|
| 描述 | 获取当前机器人使用的 UF 用户坐标系编号,序号范围为 0~50 |
| 请求参数 | 无 |
| 返回值 | int32_t: 用户坐标系编号 STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.1.5 获取当前使用的 TCS 示教坐标系
cpp
GetTCS() -> std::pair<TCSType, STATUS_CODE>| 项 | 说明 |
|---|---|
| 描述 | 获取当前机器人使用的 TCS 示教坐标系 |
| 请求参数 | 无 |
| 返回值 | TCSType: 示教坐标系类型 STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.2 设置机器人参数
3.4.2.1 设置 OVC 全局速度比率
cpp
SetOVC(Float64 value) -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 设置机器人的 OVC 全局速度比率 |
| 请求参数 | value : Float64 速度比率 (范围 0~1,且大于 0) |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.2.2 设置 OAC 全局加速度比率
cpp
SetOAC(Float64 value) -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 设置机器人的 OAC 全局加速度比率 |
| 请求参数 | value : Float64 加速度比率 (范围 0.01~1.2) |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.2.3 设置当前使用的 TF 工具坐标系
cpp
SetTF(int32_t index) -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 设置机器人当前使用的 TF 工具坐标系 |
| 请求参数 | index : int32_t 工具坐标系编号 (范围 0~50) |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.2.4 设置当前使用的 UF 用户坐标系
cpp
SetUF(int32_t index) -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 设置机器人当前使用的 UF 用户坐标系 |
| 请求参数 | index : int32_t 用户坐标系编号 (范围 0~50) |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.2.5 设置当前使用的 TCS 示教坐标系
cpp
SetTCS(TCSType tcsType) -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 设置机器人当前使用的 TCS 示教坐标系 |
| 请求参数 | tcsType : TCSType TCS 示教坐标系类型 |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.3 位姿与转换
3.4.3.1 获取当前位姿
cpp
GetCurrentPose(PoseType poseType) -> std::pair<MotionPose, STATUS_CODE>| 项 | 说明 |
|---|---|
| 描述 | 获取机器人当前位姿,支持笛卡尔空间或关节坐标系下的位姿信息 |
| 请求参数 | poseType : PoseType 位姿类型 (JOINT 或 CART) |
| 返回值 | MotionPose: 机器人位姿 STATUS_CODE: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.3.2 将笛卡尔点位转换成关节值点位
cpp
ConvertCartToJoint(const MotionPose& pose, int32_t ufIndex = 0, int32_t tfIndex = 0) -> std::pair<MotionPose, STATUS_CODE>| 项 | 说明 |
|---|---|
| 描述 | 将笛卡尔点位转换成关节值点位; hasPosture=true 时会带姿态信息参与求解,否则只按 6 维笛卡尔位置求解 |
| 请求参数 | pose : MotionPose 机器人的笛卡尔位姿 (PoseType::CART;未指定 posture 时 SDK 自动求解可行姿态) ufIndex : int32_t 用户坐标系 id (默认 0) tfIndex : int32_t 工具坐标系 id (默认 0) |
| 返回值 | MotionPose: 机器人点位 STATUS_CODE: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.3.3 将关节值点位转换成笛卡尔点位
cpp
ConvertJointToCart(const MotionPose& pose, int32_t ufIndex = 0, int32_t tfIndex = 0) -> std::pair<MotionPose, STATUS_CODE>| 项 | 说明 |
|---|---|
| 描述 | 将关节值点位转换成笛卡尔点位 |
| 请求参数 | pose : MotionPose 机器人的关节位姿 ufIndex : int32_t 用户坐标系 id (默认 0) tfIndex : int32_t 工具坐标系 id (默认 0) |
| 返回值 | MotionPose: 机器人点位 STATUS_CODE: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.3.4 笛卡尔转关节(不使用姿态信息)
cpp
ConvertCartToJointSimple(const MotionPose& pose, int32_t ufIndex = 0, int32_t tfIndex = 0) -> std::pair<MotionPose, STATUS_CODE>| 项 | 说明 |
|---|---|
| 描述 | 将笛卡尔点位转换成关节值点位;该接口始终忽略输入 posture / hasPosture ,只使用 6 维笛卡尔位置 |
| 请求参数 | pose : MotionPose 机器人的笛卡尔位姿 ufIndex : int32_t 用户坐标系 id (默认 0) tfIndex : int32_t 工具坐标系 id (默认 0) |
| 返回值 | MotionPose: 机器人点位 STATUS_CODE: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.3.5 获取 DH 参数
cpp
GetDHParam() -> std::pair<std::vector<DHParam>, STATUS_CODE>| 项 | 说明 |
|---|---|
| 描述 | 获取机器人的 DH 参数 |
| 请求参数 | 无 |
| 返回值 | std::vector<DHParam> : DH 参数列表 STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): 不支持 |
3.4.3.6 设置 DH 参数
cpp
SetDHParam(const std::vector<DHParam>& dhList) -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 设置机器人的 DH 参数 |
| 请求参数 | dhList : std::vector<DHParam> DH 参数列表 |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): 不支持 |
3.4.4 基础运动
3.4.4.1 关节空间运动
cpp
MoveJoint(const MotionPose& pose, Float64 vel, Float64 acc) -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 控制机器人末端沿关节空间最快路径移动到指定位置 |
| 请求参数 | pose : MotionPose 笛卡尔空间或关节坐标系点位 vel : Float64 速度比率 (范围 0~1) acc : Float64 加速度比率 (范围 0~1.2) |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.4.2 直线运动
cpp
MoveLine(const MotionPose& pose, Float64 vel, Float64 acc) -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 控制机器人末端沿直线移动到指定位置,运动轨迹为两点之间的直线 |
| 请求参数 | pose : MotionPose 笛卡尔空间或关节坐标系点位 vel : Float64 末端速度 (范围 1~4000 mm/s) acc : Float64 加速度比率 (范围 0~1.2) |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.4.3 圆弧运动
cpp
MoveCircle(const MotionPose& viaPose, const MotionPose& endPose, Float64 vel, Float64 acc) -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 控制机器人末端沿圆弧轨迹移动到指定位置,通过途经点和终点确定圆弧 |
| 请求参数 | viaPose : MotionPose 途经点位姿 endPose : MotionPose 终点位姿 vel : Float64 末端速度 (范围 1~4000 mm/s) acc : Float64 加速度比率 (范围 0~1.2) |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.4.4 进入位置控制模式
cpp
EnterPositionControl() -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 请求控制器进入位置控制模式 |
| 请求参数 | 无 |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 备注 | 固定使用控制器轴组 1 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.4.5 设置位置控制轨迹参数
cpp
SetPositionTrajectoryParams(int32_t maxTimeoutCount, int32_t timeout, int32_t filterLayer, Float64 wristElbowThreshold, Float64 shoulderThreshold) -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 设置位置控制模式下的轨迹参数 |
| 请求参数 | maxTimeoutCount : int32_t 最大超时次数,范围 [1, 100] timeout : int32_t 超时时间或发送间隔,范围 [1, 100] ,单位 msfilterLayer : int32_t 滤波层级,范围 [1, 100] wristElbowThreshold : Float64 腕 / 肘部接近奇异点阈值,范围 [10, 100] shoulderThreshold : Float64 肩部接近奇异点阈值,范围 [100, 300] |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 备注 | 参数超出范围时,SDK 在发送请求前返回 INVALID_PARAMETER |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.4.6 退出位置控制模式
cpp
ExitPositionControl() -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 请求控制器退出位置控制模式 |
| 请求参数 | 无 |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 备注 | 固定使用控制器轴组 1 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.5 拖动示教
3.4.5.1 设定当前机器人是否启动拖动
cpp
EnableDrag(bool dragState) -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 设定当前机器人是否启动拖动 |
| 请求参数 | dragState :bool 机器人拖动开关 (true 进入拖动状态,false 退出拖动状态) |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): 不支持 |
3.4.5.2 获取轴锁定状态
cpp
GetDragStatus() -> std::pair<DragStatus, STATUS_CODE>| 项 | 说明 |
|---|---|
| 描述 | 获取当前机器人轴锁定状态,轴锁定仅针对示教运动 |
| 请求参数 | 无 |
| 返回值 | DragStatus: 轴锁定状态,true 表示该轴为可移动状态,false 表示被锁定 STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): 不支持 |
3.4.5.3 设定机器人轴锁定状态
cpp
SetDragStatus(const DragStatus& dragStatus) -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 设定当前机器人轴锁定状态,轴锁定只针对示教运动 |
| 请求参数 | dragStatus :DragStatus 各轴锁定状态 (默认全部 true:解锁) |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): 不支持 |
3.4.6 其他接口
3.4.6.1 获取机器人软限位
cpp
GetUserSoftLimit() -> std::pair<std::vector<SoftLimit>, STATUS_CODE>| 项 | 说明 |
|---|---|
| 描述 | 获取当前机器人软限位信息 |
| 请求参数 | 无 |
| 返回值 | std::vector<SoftLimit> : 机器人软限位信息,列表第一层代表各轴,第二层代表每个轴的下限位和上限位值 STATUS_CODE: 函数执行结果 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.6.2 设置 UDP 反馈参数
cpp
SetUdpFeedbackParams(bool flag, const std::string& ip, int32_t interval, int32_t feedbackType, const std::vector<int32_t>& doList = {}) -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 配置机器人向指定 IP 地址推送数据的 UDP 反馈参数 |
| 请求参数 | flag :bool 是否开启 UDP 数据推送;ip :std::string 接收端 IP 地址;interval :int32_t 发送间隔 (毫秒);feedbackType :int32_t 反馈数据格式 (0: XML,1: JSON,2: PROTO);doList : std::vector<int32_t> DO 信号列表 (最多 10 个,可选) |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 备注 | 参数设置仅在 UDP 数据推送功能启用时有效 |
| 兼容版本 | 协作 (Copper): v7.5.2.0+ 工业 (Bronze): 不支持 |
3.4.7 Payload 子对象
负载相关能力统一挂在 arm.motionControl.payload 下。
3.4.7.1 获取当前激活的负载编号
cpp
payload.GetCurrentId() -> std::pair<int32_t, STATUS_CODE>| 项 | 说明 |
|---|---|
| 描述 | 获取当前激活的负载编号,返回对应的 ID 编号 |
| 请求参数 | 无 |
| 返回值 | int32_t: 负载编号 STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.7.2 根据 ID 获取负载信息
cpp
payload.GetById(int32_t payloadId) -> std::pair<PayloadInfo, STATUS_CODE>| 项 | 说明 |
|---|---|
| 描述 | 获取指定 ID 的负载信息 |
| 请求参数 | payloadId : int32_t 负载 ID 编号 |
| 返回值 | PayloadInfo: 负载信息 STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.7.3 激活指定负载
cpp
payload.SetCurrentId(int32_t payloadId) -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 根据 ID 激活指定负载 |
| 请求参数 | payloadId : int32_t 负载 ID 编号 |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.7.4 添加自定义负载
cpp
payload.Add(const PayloadInfo& payloadInfo) -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 向机器人控制柜添加用户自定义负载信息 |
| 请求参数 | payloadInfo : PayloadInfo 用户自定义负载信息 |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.7.5 删除负载
cpp
payload.Delete(int32_t payloadId) -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 从控制器删除指定 ID 的用户自定义负载 |
| 请求参数 | payloadId : int32_t 负载 ID 编号 |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
| 备注 | 无法删除当前激活的负载,如需删除激活负载,请先激活其他负载再删除当前负载 |
3.4.7.6 更新负载
cpp
payload.Update(const PayloadInfo& payloadInfo) -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 更新机器人中已存在的用户自定义负载信息 |
| 请求参数 | payloadInfo : PayloadInfo 包含更新信息的负载对象 |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.7.7 获取所有负载
cpp
payload.GetAll() -> std::pair<std::vector<PayloadSummary>, STATUS_CODE>| 项 | 说明 |
|---|---|
| 描述 | 获取所有负载信息列表 |
| 请求参数 | 无 |
| 返回值 | std::vector<PayloadSummary> : 所有负载摘要列表(只包含 id 与 comment) STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
3.4.7.8 检测 3 轴水平度
cpp
payload.CheckAxisThreeHorizontal() -> std::pair<Float64, STATUS_CODE>| 项 | 说明 |
|---|---|
| 描述 | 检测机器人 3 轴是否水平 |
| 请求参数 | 无 |
| 返回值 | Float64: 返回 3 轴的水平角度,单位为度 STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.2.0+ 工业 (Bronze): 不支持 |
| 备注 | 水平角度必须在 - 1~1 度之间才能进行负载测定 |
3.4.7.9 获取负载测定状态
cpp
payload.GetIdentifyState() -> std::pair<PayloadIdentifyState, STATUS_CODE>| 项 | 说明 |
|---|---|
| 描述 | 获取负载测定的状态 |
| 请求参数 | 无 |
| 返回值 | PayloadIdentifyState: 负载测定状态 STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.2.0+ 工业 (Bronze): 不支持 |
3.4.7.10 开始负载测定
cpp
payload.StartIdentify(Float64 weight, Float64 angle) -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 开始负载测定过程 |
| 请求参数 | weight :Float64 负载重量 (未知填 -1);angle :Float64 6 轴允许转动角度 (30~90 度) |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.2.0+ 工业 (Bronze): 不支持 |
| 备注 | 开始负载测定前必须先进入负载测定状态 |
3.4.7.11 获取负载测定结果
cpp
payload.GetIdentifyResult() -> std::pair<PayloadInfo, STATUS_CODE>| 项 | 说明 |
|---|---|
| 描述 | 获取负载测定结果 |
| 请求参数 | 无 |
| 返回值 | PayloadInfo: 负载测定结果 STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.2.0+ 工业 (Bronze): 不支持 |
3.4.7.12 开始干涉检查
cpp
payload.InterferenceCheckForPayloadIdentify(Float64 weight, Float64 angle) -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 开始负载测定的干涉检查 |
| 请求参数 | weight : Float64 负载重量;angle : Float64 6 轴转动角度 (30~90 度) |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.2.0+ 工业 (Bronze): 不支持 |
3.4.7.13 进入负载测定状态
cpp
payload.IdentifyStart() -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 进入负载测定准备状态 |
| 请求参数 | 无 |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.2.0+ 工业 (Bronze): 不支持 |
3.4.7.14 结束负载测定状态
cpp
payload.IdentifyDone() -> STATUS_CODE| 项 | 说明 |
|---|---|
| 描述 | 结束负载测定准备状态 |
| 请求参数 | 无 |
| 返回值 | STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.2.0+ 工业 (Bronze): 不支持 |
3.4.7.15 负载测定全流程
cpp
payload.Identify(Float64 weight, Float64 angle) -> std::pair<PayloadInfo, STATUS_CODE>| 项 | 说明 |
|---|---|
| 描述 | 完整的负载测定流程,包含负载测定全部步骤,无特殊需求时仅使用此接口即可 |
| 请求参数 | weight : Float64 负载重量 (未知填 -1);angle : Float64 6 轴转动角度 (30~90 度) |
| 返回值 | PayloadInfo: 负载测定结果 STATUS_CODE: 函数执行结果 |
| 兼容版本 | 协作 (Copper): v7.5.2.0+ 工业 (Bronze): 不支持 |
| 备注 | 返回的负载可新增到机器人中或写入机器人中已有的某个负载 全流程步骤: 1. 移动到指定水平位并检测是否水平 2. 进入负载测定状态 3. 开始负载测定 4. 获取负载测定结果 5. 结束负载测定状态 |
最小调用示例
cpp
#include <iostream> // 引入标准输出流,用于打印运动查询结果
#include "arm_api.h" // 引入 Arm 主入口,连接后通过 arm.motionControl 访问运动接口
#include "status_code.h" // 引入 STATUS_CODE,用于检查 SDK 调用结果
int main() // 示例程序入口
{ // 进入示例主函数
Arm arm; // 创建机器人会话对象
STATUS_CODE connectRet = arm.Connect("192.168.110.2", ""); // 连接控制器,示教器地址留空表示使用默认规则
if (connectRet != STATUS_CODE::OK) { // 判断连接是否失败
return 1; // 连接失败时直接退出
} // 结束连接结果判断
auto [ovc, ovcRet] = arm.motionControl.GetOVC(); // 读取当前全局速度比率 OVC
auto [jointPose, poseRet] = arm.motionControl.GetCurrentPose(PoseType::JOINT); // 读取当前关节位姿
if (ovcRet != STATUS_CODE::OK || poseRet != STATUS_CODE::OK) { // 判断 OVC 或位姿读取是否失败
return 1; // 任一读取失败时返回错误码
} // 结束读取结果判断
auto [cartPose, convertRet] = arm.motionControl.ConvertJointToCart(jointPose); // 将关节位姿转换为笛卡尔位姿
if (convertRet != STATUS_CODE::OK) { // 判断位姿转换是否失败
return 1; // 转换失败时返回错误码
} // 结束位姿转换判断
std::cout << "ovc=" << ovc << "\n"; // 打印当前全局速度比率
std::cout << "joint_count=" << jointPose.joint.size() << "\n"; // 打印关节数组长度
std::cout << "cartesian_count=" << cartPose.cartesian.size() << "\n"; // 打印笛卡尔数组长度
return 0; // 示例正常结束
} // 结束示例主函数场景化示例
下面几组片段按 “参数读写、位姿转换、基础运动、拖动 / UDP、负载管理、负载测定” 交叉覆盖本页 API。片段默认承接最小调用示例里已经连接成功的 arm 对象;会驱动机器人或改变配置的调用保持注释,确认现场后再执行。
读取和设置运动参数
cpp
auto [ovc, ovcRet] = arm.motionControl.GetOVC(); // 读取当前全局速度比率
auto [oac, oacRet] = arm.motionControl.GetOAC(); // 读取当前全局加速度比率
auto [tf, tfRet] = arm.motionControl.GetTF(); // 读取当前工具坐标系编号
auto [uf, ufRet] = arm.motionControl.GetUF(); // 读取当前用户坐标系编号
auto [tcs, tcsRet] = arm.motionControl.GetTCS(); // 读取当前示教坐标系
if (ovcRet == STATUS_CODE::OK && oacRet == STATUS_CODE::OK && tfRet == STATUS_CODE::OK && ufRet == STATUS_CODE::OK && tcsRet == STATUS_CODE::OK) { // 判断基础参数读取是否全部成功
std::cout << "ovc=" << ovc << " oac=" << oac << " tf=" << tf << " uf=" << uf << " tcs=" << static_cast<int>(tcs) << "\n"; // 打印基础参数查询结果
} // 结束基础参数读取判断
// STATUS_CODE setOvcRet = arm.motionControl.SetOVC(0.5); // 设置全局速度比率会改变控制器参数,确认后再执行
// STATUS_CODE setOacRet = arm.motionControl.SetOAC(0.5); // 设置全局加速度比率会改变控制器参数,确认后再执行
// STATUS_CODE setTfRet = arm.motionControl.SetTF(tf); // 切换当前工具坐标系会影响后续运动,确认后再执行
// STATUS_CODE setUfRet = arm.motionControl.SetUF(uf); // 切换当前用户坐标系会影响后续运动,确认后再执行
// STATUS_CODE setTcsRet = arm.motionControl.SetTCS(tcs); // 切换示教坐标系会影响示教行为,确认后再执行读取位姿和做坐标转换
cpp
auto [jointPose, jointRet] = arm.motionControl.GetCurrentPose(PoseType::JOINT); // 读取当前关节位姿
if (jointRet != STATUS_CODE::OK) { // 判断关节位姿读取是否失败
return; // 读取失败时退出当前流程
} // 结束关节位姿读取判断
auto [cartPose, cartRet] = arm.motionControl.ConvertJointToCart(jointPose); // 将关节位姿转换为笛卡尔位姿
auto [jointFromCart, cartToJointRet] = arm.motionControl.ConvertCartToJoint(cartPose); // 将笛卡尔位姿转换为关节位姿
auto [jointSimple, simpleRet] = arm.motionControl.ConvertCartToJointSimple(cartPose); // 不使用姿态信息求关节解
if (cartRet == STATUS_CODE::OK && cartToJointRet == STATUS_CODE::OK && simpleRet == STATUS_CODE::OK) { // 判断位姿转换是否全部成功
std::cout << "joint_count=" << jointPose.joint.size() << " cart_count=" << cartPose.cartesian.size() << "\n"; // 打印位姿数组长度
} // 结束位姿转换结果判断执行基础运动
cpp
auto [jointPose, jointRet] = arm.motionControl.GetCurrentPose(PoseType::JOINT); // 读取当前关节位姿作为运动目标示例
auto [cartPose, cartRet] = arm.motionControl.ConvertJointToCart(jointPose); // 将当前关节位姿转换为笛卡尔目标示例
if (jointRet != STATUS_CODE::OK || cartRet != STATUS_CODE::OK) { // 判断运动目标准备是否失败
return; // 目标准备失败时退出当前流程
} // 结束运动目标准备判断
// STATUS_CODE moveJointRet = arm.motionControl.MoveJoint(jointPose, 0.1, 0.1); // 关节运动会驱动机器人,确认安全后再执行
// STATUS_CODE moveLineRet = arm.motionControl.MoveLine(cartPose, 50.0, 0.1); // 直线运动会驱动机器人,确认安全后再执行
// STATUS_CODE moveCircleRet = arm.motionControl.MoveCircle(cartPose, cartPose, 50.0, 0.1); // 圆弧运动会驱动机器人,确认安全后再执行DH、拖动和 UDP 推送
cpp
auto [dhList, dhRet] = arm.motionControl.GetDHParam(); // 读取 DH 参数列表
auto [dragStatus, dragRet] = arm.motionControl.GetDragStatus(); // 读取拖动示教轴锁定状态
auto [softLimits, limitRet] = arm.motionControl.GetUserSoftLimit(); // 读取用户软限位
if (dhRet == STATUS_CODE::OK || dragRet == STATUS_CODE::OK || limitRet == STATUS_CODE::OK) { // 判断至少一个扩展查询是否成功
std::cout << "dh_count=" << dhList.size() << " soft_limit_count=" << softLimits.size() << "\n"; // 打印 DH 和软限位数量
} // 结束扩展查询结果判断
// STATUS_CODE setDhRet = arm.motionControl.SetDHParam(dhList); // 写入 DH 参数会改变机器人模型参数,确认后再执行
// STATUS_CODE enableDragRet = arm.motionControl.EnableDrag(true); // 进入拖动状态会改变机器人控制状态,确认后再执行
// STATUS_CODE setDragRet = arm.motionControl.SetDragStatus(dragStatus); // 修改轴锁定状态会影响拖动示教,确认后再执行
// STATUS_CODE udpRet = arm.motionControl.SetUdpFeedbackParams(true, "192.168.110.10", 100, 1, std::vector<int32_t>{0, 1}); // 配置 UDP 推送会改变反馈设置,确认后再执行查询和维护负载
cpp
auto [payloadId, payloadIdRet] = arm.motionControl.payload.GetCurrentId(); // 读取当前负载编号
auto [payloads, payloadsRet] = arm.motionControl.payload.GetAll(); // 读取全部负载摘要
if (payloadIdRet != STATUS_CODE::OK) { // 判断当前负载编号读取是否失败
return; // 读取失败时退出当前流程
} // 结束负载编号读取判断
auto [payloadInfo, payloadRet] = arm.motionControl.payload.GetById(payloadId); // 按负载编号读取负载详情
if (payloadRet == STATUS_CODE::OK || payloadsRet == STATUS_CODE::OK) { // 判断至少一个负载查询是否成功
std::cout << "payload_id=" << payloadId << " payload_count=" << payloads.size() << "\n"; // 打印负载查询摘要
} // 结束负载查询结果判断
// STATUS_CODE setPayloadRet = arm.motionControl.payload.SetCurrentId(payloadId); // 切换当前负载会影响动力学参数,确认后再执行
// STATUS_CODE addPayloadRet = arm.motionControl.payload.Add(payloadInfo); // 新增负载会修改控制器配置,确认后再执行
// STATUS_CODE updatePayloadRet = arm.motionControl.payload.Update(payloadInfo); // 更新负载会修改控制器配置,确认后再执行
// STATUS_CODE deletePayloadRet = arm.motionControl.payload.Delete(payloadId); // 删除负载会修改控制器配置,确认后再执行负载测定流程
cpp
auto [axisAngle, axisRet] = arm.motionControl.payload.CheckAxisThreeHorizontal(); // 检测 3 轴水平角度
auto [identifyState, stateRet] = arm.motionControl.payload.GetIdentifyState(); // 读取负载测定状态
auto [identifyResult, resultRet] = arm.motionControl.payload.GetIdentifyResult(); // 读取负载测定结果
if (axisRet == STATUS_CODE::OK || stateRet == STATUS_CODE::OK || resultRet == STATUS_CODE::OK) { // 判断至少一个负载测定查询是否成功
std::cout << "axis_angle=" << axisAngle << " identify_state=" << static_cast<int>(identifyState) << "\n"; // 打印负载测定查询摘要
} // 结束负载测定查询判断
// STATUS_CODE interferenceRet = arm.motionControl.payload.InterferenceCheckForPayloadIdentify(-1.0, 45.0); // 干涉检查会访问负载测定流程,确认后再执行
// STATUS_CODE identifyStartRet = arm.motionControl.payload.IdentifyStart(); // 进入负载测定状态会改变机器人状态,确认后再执行
// STATUS_CODE startIdentifyRet = arm.motionControl.payload.StartIdentify(-1.0, 45.0); // 开始负载测定会驱动测定流程,确认后再执行
// STATUS_CODE identifyDoneRet = arm.motionControl.payload.IdentifyDone(); // 结束负载测定状态会改变机器人状态,确认后再执行
// auto [identifiedPayload, identifyRet] = arm.motionControl.payload.Identify(-1.0, 45.0); // 完整负载测定会执行整套流程,确认后再执行示例代码
cpp
#include "query_motion_state/run.h"
#include "query_current_pose/run.h"
#include "convert_pose/run.h"
#include "query_limits/run.h"
#include "write_motion_config/run.h"
#include "run_motion_apis/run.h"
int main(void)
{
// [ZH] 默认只调用一个门面方法;如需体验其他接口,请把下一行替换成下面任意一行。
// [EN] The main function calls only one facade by default. Replace the next line with any line below to try other APIs.
return RunMotionBasicQueryMotionState();
// return RunMotionBasicQueryCurrentPose();
// return RunMotionBasicConvertPose();
// return RunMotionBasicQueryLimits();
// return RunMotionBasicWriteMotionConfig();
// return RunMotionBasicRunMotionApis();
}cpp
#include "query_current_pose/run.h"
#include "convert_joint_to_cart/run.h"
#include "convert_cart_to_joint/run.h"
int main(void)
{
// [ZH] 默认只调用一个门面方法;如需体验其他接口,请把下一行替换成下面任意一行。
// [EN] The main function calls only one facade by default. Replace the next line with any line below to try other APIs.
return RunMotionPoseQueryCurrentPose();
// return RunMotionPoseConvertJointToCart();
// return RunMotionPoseConvertCartToJoint();
}cpp
#include "query_drag_status/run.h"
#include "enable_drag/run.h"
#include "set_drag_status/run.h"
int main(void)
{
// [ZH] 默认只调用一个门面方法;如需体验其他接口,请把下一行替换成下面任意一行。
// [EN] The main function calls only one facade by default. Replace the next line with any line below to try other APIs.
return RunMotionDragQueryDragStatus();
// return RunMotionDragEnableDrag();
// return RunMotionDragSetDragStatus();
}cpp
#include "query_payload_info/run.h"
#include "manage_payloads/run.h"
#include "identify_payload/run.h"
int main(void)
{
// [ZH] 默认只调用一个门面方法;如需体验其他接口,请把下一行替换成下面任意一行。
// [EN] The main function calls only one facade by default. Replace the next line with any line below to try other APIs.
return RunMotionPayloadQueryPayloadInfo();
// return RunMotionPayloadManagePayloads();
// return RunMotionPayloadIdentifyPayload();
}