跳到主要内容

样条曲线运动 (Spline)

MoveJ / MoveL / MoveC 只能走直线或标准圆弧, 但复杂曲面路径 (自由曲线焊缝、汽车外壳涂装、弯管切割) 无法用有限段直线或圆弧精确描述。样条曲线 (Spline) 是从 CAD 离散点生成平滑曲线的标准方法, 可以直接在机器人上走。

支持的样条类型

类型缩写特点应用
Bezier 三次曲线Bezier2 个控制点, 起终点精确过简单自由曲线
Catmull-RomCR只需点列, 自动平滑连接最常用, 示教点直接用
B 样条 (均匀)B-Spline局部控制, 不过控制点平面涂胶路径
NURBSNURBS支持权重, 精确过工业曲面汽车外壳, 飞机蒙皮
三次自然样条Cubic Spline过所有点, 二阶连续通用

Darra 默认推荐 Catmull-Rom: 控制直观 (就是示教点), 自动平滑, 容易调优。NURBS 用于 CAD 直接出的高精度场景。

MoveSpline 功能块

VAR
mcSpline : MC_MoveSplineAbsolute;
waypoints : ARRAY[0..10] OF ROBOT_POS;
wp_count : UINT;
END_VAR

// 准备点列 (通常从 CAD 或示教获取)
waypoints[0] := p_start;
waypoints[1] := p_mid1;
waypoints[2] := p_mid2;
// ...
wp_count := 5;

mcSpline(
Robot := Robot1,
Execute := bStart,
SplineType := SPLINE_CATMULL_ROM,
Waypoints := ADR(waypoints),
WaypointCount := wp_count,
Velocity := 50.0, // 平均切向速度
VelocityMode := VEL_TANGENT, // 切向速度恒定 / 参数 u 恒定
Tension := 0.5, // Catmull-Rom 张力 (0..1)
OriMode := ORI_PATH_FOLLOW,
ToolId := 1,
UserFrameId := 1
);

Catmull-Rom 详解

原理

给定 N 个路径点 P0, P1, ..., PN-1, 两两之间用三次多项式连接, 使得:

  1. 曲线通过所有路径点
  2. 在每个点处切线连续 (C¹ 连续)
  3. 切线方向由前后两点的连线方向决定:
tangent_i = (P_{i+1} - P_{i-1}) · tension

端点 P0 和 PN-1 处用镜像 (或重复首末点) 定义切线。

Tension 参数

Tension效果
0直线段 (退化)
0.5 (默认)平滑过渡
1尖锐, 过冲可能

Tension 0.5 = centripetal Catmull-Rom, 是业界默认。

Bezier 示例

mcBezier(
Robot := Robot1, Execute := TRUE,
SplineType := SPLINE_BEZIER_CUBIC,
P0 := p_start,
P1 := p_control1, // 起点切线控制
P2 := p_control2, // 终点切线控制
P3 := p_end,
Velocity := 50.0
);

Bezier 起终点精确过 P0 / P3, 但不过 P1 / P2 (P1/P2 只控制切线方向和长度)。

NURBS 示例 (CAD 直接导出)

VAR
nurbs : NURBS_CURVE; // 由 CAD 导入的 NURBS 定义结构
END_VAR

// nurbs 从 STEP 文件加载
LoadNurbsFromStep(FilePath := 'D:\path\car_hood.step', EdgeId := 'Weld_Edge_1', Curve := nurbs);

mcNurbs(
Robot := Robot1,
Execute := TRUE,
SplineType := SPLINE_NURBS,
NurbsCurve := ADR(nurbs),
UStart := 0.0,
UEnd := 1.0,
Velocity := 30.0
);

NURBS 曲线保留 CAD 精度 (0.01 mm), 适合大型曲面生产线。

速度插值模式

样条曲线上速度控制有两种:

VEL_TANGENT — 切向速度恒定

TCP 沿曲线方向的速度 = Velocity, 曲率大的地方时间少, 曲率小的地方时间多. 焊接 / 涂胶必须用:

  • 焊道宽度 / 胶量由 送丝速度 / TCP 切向速度 决定
  • 切向速度恒定 → 焊道厚薄均匀

VEL_UNIFORM — 参数 u 线性变化

du/dt = const, TCP 速度在不同曲率区段不同, 直道慢, 弯道快 (曲率大时切向速度大)。一般不用, 除了某些仿形打磨。

姿态插值 (Orientation)

样条路径上的姿态变化:

模式说明
ORI_SPLINE_QUATERNION每段用 Slerp 四元数插值, 与位置样条同步
ORI_FIXED全程姿态不变 (起点姿态)
ORI_PATH_FOLLOW姿态跟随切线方向 (工具朝前)
ORI_SURFACE_NORMAL姿态垂直于曲面 (需提供法向量)

焊接 / 涂胶用 ORI_PATH_FOLLOW, 打磨用 ORI_SURFACE_NORMAL

光顺过渡 (Smoothing)

MoveJ + MoveL + Spline 混用时, 段间过渡:

mcJ(TargetPosition := p_home, Velocity := 200, Zone := 20);
mcL(TargetPosition := p_spline_enter, Velocity := 50, Zone := 5); // 进入样条前
mcSpline(Waypoints := waypoints, WaypointCount := 5,
Velocity := 30, EntryBlend := TRUE); // 与前段平滑拼接
mcL(TargetPosition := p_retreat, Velocity := 50);

EntryBlend / ExitBlend 控制样条首尾与相邻段的 C¹ 连续性 — 开启时, 曲线两端的切线会自动对齐前后段的运动方向, 避免拐点跳变。

预计算 vs 实时计算

模式说明适用
预计算 (Precomputed)程序启动时把整条样条插值成 0.1 mm 步长的点阵, 运行时查表少变化、高节拍
实时 (Real-time)每个 PLC 周期动态计算下一位置大型曲线, 曲线可参数化修改

预计算内存占用 (10 m 曲线按 0.1 mm 步长): 100,000 点 × 60 byte = 6 MB, 可以接受。实时计算 CPU 开销约 5 μs / 点 @ Catmull-Rom, 轻松满足 1 ms 周期。

CAD 导入流程

从 STEP 文件提取焊缝

  1. 外部 CAD (Solidworks / Creo) 把焊缝导出为 STEP
  2. Darra IDE 打开文件浏览器 → 导入 CAD 焊缝
  3. 选择 STEP 文件, IDE 解析并显示所有边 (Edge)
  4. 用户勾选焊缝边
  5. 系统自动:
    • 沿边按 1 mm 间隔采样
    • 转换到机器人工件坐标系
    • 生成路径点或 NURBS 曲线
  6. 保存为样条路径对象
  7. SCL 程序里 mcSpline(NurbsCurve := ADR(imported_curve)) 调用

视觉生成样条

场景方法
相机拍摄的水渍 / 胶痕复现边缘检测 → 离散点 → Catmull-Rom 样条
激光扫描毛坯轮廓点云去噪 → 凸包或 α-shape → 样条拟合
示教 + 自动加点示教稀疏点, 系统在拐角处自动加密

参数表

参数类型单位范围默认说明
SplineTypeENUM-BEZIER/CR/B/NURBS/CUBICCR样条类型
WaypointsARRAY OF ROBOT_POS-2..1000-路径点
TensionLREAL-0..10.5Catmull-Rom 张力
VelocityLREALmm/s0.1..50030切向速度
VelocityModeENUM-TANGENT/UNIFORMTANGENT速度插值模式
MaxLateralAccLREALmm/s²100..50001000最大横向加速度 (曲率限速用)
OriModeENUM--SPLINE_QUAT姿态模式
DiscretStepLREALmm0.01..100.1预计算离散步长
EntryBlendBOOL--TRUE起点与前段 C¹ 平滑
ExitBlendBOOL--TRUE终点与后段 C¹ 平滑

曲率限速

样条曲线某些点曲率 κ 很大, 按恒切向速度走横向加速度 a_lat = v²·κ 可能超 MaxLateralAcc 甚至超工具能力 (焊丝甩飞 / 打磨烧痕). 系统自动:

  1. 扫描曲线曲率 κ(u)
  2. 曲率大的区段限速 v_max(u) = sqrt(MaxLateralAcc / κ(u))
  3. 全程速度曲线前后平滑 (加减速有限), 避免速度抖动

曲率限速会让部分段速度低于 Velocity 设定, 是正常行为。

排错清单

现象原因解决
样条曲线偏离示教点Catmull-Rom tension 0调 tension 到 0.5
样条起点 / 终点方向不对端点外推错误前后各重复起终点, 或启用 EntryBlend
焊道厚度不均用了 VEL_UNIFORM换 VEL_TANGENT
曲线过了示教点 (Bezier)Bezier 不过 P1/P2 是正常换 CR 或 Cubic Spline
NURBS 加载失败STEP 版本不支持CAD 另存为 AP242 / AP214
姿态翻转Slerp 在 ±180° 有短路径翻转手动在中间加姿态约束点
速度达不到设定曲率限速起作用提高 MaxLateralAcc 或降低原设速度

最佳实践

  1. 少量稀疏控制点: Catmull-Rom 用 10~20 个点就够一米曲线, 更多点反而易抖
  2. 非相邻点不应过近: 连续两点距离 > 10 mm (对 0.1 mm 精度)
  3. CAD 导入优先: 曲线精度要求 < 0.5 mm 时, 从 CAD 直出比示教准
  4. 起点停顿一下: 样条前加 WaitTime(200) 确保伺服完全稳定再开起弧 / 开胶
  5. 验证再运行: 3D 视口仿真看曲线形态, 不对就调 tension 或加点
  6. 曲率限速与目标节拍权衡: 高节拍要求下, 减少曲线拐点数量
  7. 姿态约束点: 长样条上每 500 mm 加一个强制姿态点, 避免累积飘移

相关文档