跳到主要内容

报错及异常现象处理

开始运动阶段

开始运动时轻微下坠

负载设置

  • 检查负载设置是否正常,开启实时模式后,需要使用setLoad(tool_load, ec);
  • 注意区分实时运动控制中的void setLoad(const Load &load, error_code &ec)与算法模型库中的void setLoad(double mass, const std::array<double, 3> &cog, const std::array<double, 3> &inertia)以及力控模块的void setLoad(const Load &load, error_code &ec)

指令下发

  • 重力补偿打开后,下发当前点位作为初始点,若出现点头现象,检查下发指令是否为重力补偿前数据
  • 重力补偿前关节位置获取:jntPos = robot.jointPos(ec);
  • 重力补偿前tcp位姿获取:robot.getStateData(rokae::RtSupportedFields::tcpPoseAbc_m, tcp_pose)

开始运动报错

运动中报错

如何捕获运动报错

void funRTControl() {
try {
auto rtCon = robot.getRtMotionController().lock();
rtCon->startMove(RtControllerMode::jointPosition);
// 调用方式一:阻塞运行,运动中报错会抛出异常
rtCon->startLoop(true);
// 调用方式二:非阻塞运行,运动中如果出错,stopLoop时会抛出异常
rtCon->startLoop(false);
rtCon->stopLoop();
} catch (const std::exception &e) {
std::cerr << e.what();
}
}

报错原因及处理

实时模式一共有 20个错误类型

报错 kInstabilityDetection

如果常出现 kInstabilityDetection,可在实时模式关闭状态下调高网络阈值(setRtNetworkTolerance),建议 60% 以上。

速度/加速度超出阈值

  • 若在 startMove 刚开始即停止,通常是起始位置不是当前位置。
  • 若在运动中出现,可能和上位机实时性、网络波动有关。
  • 自定义轨迹规划时,通常是相邻指令差距过大,需要优化规划。
  • 存在交换机等复杂链路时,建议先改为直连验证。

如何正确设置起始位置

比如 MoveJ(start_pos, target_pos, speed)start_pos 可按以下方式获取:

  1. 推荐:用 posture()/jointPos() 读取。
std::array<double, 16> init_position{};
Utils::postureToTransArray(
robot.posture(rokae::CoordinateType::flangeInBase, ec),
init_position);
  1. 循环 updateRobotState 清空旧帧,读最新状态。
while (robot.updateRobotState(chrono::steady_clock::duration::zero()));
  1. 在回调首帧读取并更新起始位姿。
std::function<CartesianPosition()> callback = [&, rtCon]() {
if (init) {
robot.getStateData(RtSupportedFields::tcpPose_m, init_pos);
init = false;
}
};
rtCon->setControlLoop(callback, 0, true);

位置控制过程中发生异响或抖动

处理方式

  • 运行 SDK 示例时:
    • 建议设置滤波(setFilterFrequencysetFilterLimit)。
    • Windows 上通常更需要滤波。
    • 建议直连,减少网络抖动。
    • 网卡差异会影响实时性(现场反馈 Realtek 稳定性更好)。
  • 自定义规划时:
    • 除上述项外,重点排查回调是否超时(单周期是否超过 1ms)。
    • 必要时检查结合诊断曲线、或获取状态数据检查速度曲线是否平滑。

更多示教器生效范围、回调实时性与跟随延迟问题,请参考 其它使用与实时性问题

如何查看诊断数据

诊断曲线含义说明(4.0控制器新增)

alt text

指令值

  • rci_q_c:关节位置模式,用户下发的指令位置(可以根据此数据判断指令是否平滑)

测量值

  • rci_q_m:当前关节空间位置测量值
  • rci_cart_m:当前笛卡尔空间位姿测量值
  • rci_qv_m:当前关节空间速度测量值
  • rci_cart_v_m:当前笛卡尔空间速度测量值

滤波值

  • rci_q_c_hw:关节空间,用户下发指令位置滤波后下发伺服数据,滤波截止频率由rtCon->setFilterFrequency控制
  • rci_cart_c_hw:笛卡尔空间,用户下发指令位置滤波后下发伺服数据,滤波截止频率由rtCon->setFilterFrequency控制