基础仿真
Darra 提供基础仿真能力,用于在编程阶段验证点位、坐标系和动作示例。
定位
基础仿真不是工业级物理仿真,不做碰撞动力学、节拍精确计算。它的目标是让你在不接机器人的情况下:
- 查看点位是否正确
- 采集并验证坐标系
- 演示典型动作流程
- 检查路径是否穿墙/自碰撞(几何层)
如果需要精确节拍、动力学、数字孪生,参考 应用案例 → 数字孪生。
打开 3D 视口
- 视图页签 → 3D 视口
- 双击机器人节点也会打开
视口里可以看到:
- 机器人本体(按导入时的运动学)
- 坐标系标记(World/Base/Tool/工件)
- 已示教的点位(小圆点)
- 程序执行时的轨迹(虚线)
视口操作
| 操作 | 方法 |
|---|---|
| 旋转视角 | 鼠标中键拖动 |
| 平移 | Shift + 中键 |
| 缩放 | 滚轮 |
| 重置视角 | 右键 → 重置相机 |
| 切换正交 / 透视 | 工具栏按钮 |
用法 1:查看点位
示教一批点位后,想看看它们在 3D 空间的分布:
- 点视口上方的 显示点位 按钮
- 所有示教点以小圆点显示
- 鼠标悬停在点上显示名称与坐标
- 双击点 → 机器人仿真地走到该点
这能快速发现:
- 点位是不是都在工件区域内
- 是否有点太近,合并一下更整齐
- 是否有明显错误(比如 Z 写反了)
用法 2:坐标系采集
标定完坐标系后,在 3D 视口里能直接看到:
- World:世界坐标,灰色
- Base:机器人基坐标,蓝色
- Tool0:工具默认,红色
- 自定义工件坐标系,绿色
用视口验证坐标系朝向对不对,比手算快。
用法 3:动作示例演示
写完一段运动程序(见 运动编程),在视口里试跑:
- Ribbon → 运动 → 仿真模式(图标变成灰机器人)
- 程序循环执行
- 机器人本体按程序路径运动
- 实际机器人不动,纯软件仿真
仿真模式下可调速度(0.1x ~ 10x),让动作慢下来看清细节。
用法 4:几何碰撞检查
视口里加入外部模型(夹具、料框)后:
- 右键 → 碰撞检测
- 仿真运行时,如果机器人与模型碰撞,该段高亮红色并暂停
注意这是几何碰撞,不考虑物理效果(没有反弹、没有变形)。
限制
| 做不到 | 替代方案 |
|---|---|
| 节拍精确预测 | 找我们做专门的节拍分析工具 |
| 物理动力学仿真 | 接外部 Gazebo/MuJoCo |
| 视觉图像仿真 | 用 Unity/Unreal 做数字孪生 |
| 人机交互安全区仿真 | 找安全专业工具,如 Visual Components |
基础仿真只解决点位和动作对不对的问题。
仿真模式详解
Darra 支持 3 个仿真模式, 按"真实程度"递增:
模式 1 — 运动学仿真 (Kinematics Only)
- 只做正 / 逆运动学
- TCP 轨迹准确
- 不考虑伺服动力学、加减速曲线
- 计算开销最小, 适合快速检查路径
模式 2 — 轨迹仿真 (Trajectory)
- 运动学 + 完整轨迹规划
- 模拟 Jerk / Accel / Vel 曲线
- TCP 位姿、速度、加速度随时间输出
- 能预估节拍时间 (通常误差 < 5%)
- 默认模式
模式 3 — 硬件在环 (HIL, Hardware-in-the-Loop)
- 轨迹仿真结果 → 送到真实伺服驱动器
- 伺服上电但机械脱开 (或悬空)
- 测试伺服参数响应、增益、延迟
- 只有调试环境适用, 上产线无意义
仿真与实物切换
VAR
mode : ROBOT_OPERATION_MODE;
END_VAR
// 编程时切仿真
SetRobotMode(Robot := Robot1, Mode := ROBOT_SIMULATION);
// 上线切实物
SetRobotMode(Robot := Robot1, Mode := ROBOT_PHYSICAL);
切换不会丢失状态, 关节角、TCP、速度倍率都保留。
3D 视口渲染选项
| 选项 | 默认 | 说明 |
|---|---|---|
| 机器人主体 | 开 | 显示机器人 3D 模型 |
| 坐标系 | 开 | 显示 Tool / User / Base |
| 点位 | 开 | 示教点 |
| 路径 | 开 | 运动轨迹 |
| 工作空间 | 关 | 可达区域云 |
| 奇异区 | 关 | 奇异位姿集 |
| 碰撞体 | 关 | 碰撞检测用的简化网格 |
| 重心 / 惯量椭球 | 关 | 动力学可视化 |
| 力 / 速度向量 | 关 | 实时向量显示 |
| FPS 计数器 | 关 | 渲染性能 |
仿真录制与回放
- 录制: 点录制按钮, 当前仿真的所有状态 (关节 / TCP / IO) 录到 .rec 文件
- 回放: 打开 .rec, 可以倍速播放 / 暂停 / 时间点跳转
- 用途: 现场故障复现, 远程排错 (传 .rec 文件即可)
多机器人同步仿真
多机场景下:
VAR
SimGroup : SIMULATION_GROUP;
END_VAR
AddRobotToSim(Group := SimGroup, Robot := Robot1);
AddRobotToSim(Group := SimGroup, Robot := Robot2);
StartSimGroup(Group := SimGroup);
仿真组保证所有机器人同一时钟推进, 用于多机协作程序验证。
与 CAD 集成
3D 视口可导入外部 CAD 模型作为环境:
- 导入工装 STL / STEP (见 模型导入)
- 用固定对象类型添加到环境
- 碰撞检测自动考虑这些对象
- 可用拖拽调整工装位置
- 保存为场景 (.scene), 下次打开还原
参数表
| 参数 | 类型 | 单位 | 默认 | 说明 |
|---|---|---|---|---|
| SimulationMode | ENUM | - | TRAJECTORY | 仿真级别 |
| SimSpeedScale | LREAL | - | 1.0 | 仿真倍率 (0.1..10) |
| CollisionEnabled | BOOL | - | FALSE | 几何碰撞检测 |
| RenderFPS | UINT | - | 60 | 渲染帧率 |
| TraceLength | UDINT | - | 10000 | 显示轨迹点数上限 |
| RecordInterval | UDINT | ms | 10 | 录制采样间隔 |
排错清单
| 现象 | 原因 | 解决 |
|---|---|---|
| 仿真机器人不动 | 程序未关联机器人实例 | 在程序属性里绑机器人 |
| 3D 视口黑屏 | GPU 驱动问题 | 更新显卡驱动 / 用软件渲染 |
| 仿真和实物不一致 | 仿真用的 DH 与实物不同 | 重新导入机器人参数 |
| 节拍预估不准 | 动力学负载与实际差异 | 在 Mass / Inertia 配实际值 |
| 录制文件巨大 | 录制间隔太短 | 调 RecordInterval 到 50 ms |
| 碰撞报但实际可走 | 碰撞体保守 (凸包) | 改用 VHACD 简化 |
最佳实践
- 先仿真再下发: 新程序必须先仿真通, 再下发到实物
- 仿真节拍参考: 真机节拍 = 仿真节拍 × 1.05 ~ 1.10 (加减速伺服延迟)
- 工装纳入仿真: STL / STEP 导入工装, 否则碰撞检测漏掉关键
- 多机项目用仿真组: 独立仿真时钟不同步, 看不出冲突
- 长仿真记得关录制: 24 小时录制文件 > 1 GB
- 仿真 UI 操作习惯: 用 Ctrl+Scroll 缩放, Alt+拖 平移
- 仿真不是生产: 仿真通过 ≠ 实物一定通过, 还要看 诊断