模型导入
Darra 机器人模块内置 90+ 常见品牌型号 (ABB / Kuka / Fanuc / Yaskawa / Universal Robots / AUBO / JAKA / ELite / 埃夫特 / 新松 / 遨博 / 大族等), 直接从内置库选择即可。如果是自研机器人、冷门型号或需要加入自定义工装 (夹具 / 工作台 / 料框 / 围栏), 则使用本页的模型导入功能。
支持的模型格式
| 格式 | 扩展名 | 用途 | 推荐度 |
|---|---|---|---|
| URDF | .urdf / .xacro | 完整机器人 (链式运动学 + 视觉 + 碰撞) | 推荐, 主流 |
| STL | .stl | 纯网格, 单关节或工装 | 快, 无运动学 |
| STEP | .step / .stp | CAD 原生, 精确几何 | 精确, 文件大 |
| OBJ | .obj + .mtl | 带材质纹理, 演示用 | 演示好看 |
| DAE (Collada) | .dae | 多用于 ROS / Gazebo | 兼容 URDF |
| Xacro | .xacro | URDF 宏展开 | 需先转 URDF |
URDF 导入 — 完整机器人
URDF 基本结构
URDF (Unified Robot Description Format) 用 XML 描述机器人的链接 (link) 和关节 (joint):
<robot name="my_robot">
<link name="base_link">
<visual>
<geometry>
<mesh filename="meshes/base.stl"/>
</geometry>
<material name="gray"><color rgba="0.5 0.5 0.5 1"/></material>
</visual>
<collision>
<geometry>
<mesh filename="meshes/base_collision.stl"/>
</geometry>
</collision>
<inertial>
<mass value="15.0"/>
<origin xyz="0 0 0.1"/>
<inertia ixx="0.1" iyy="0.1" izz="0.1" ixy="0" ixz="0" iyz="0"/>
</inertial>
</link>
<joint name="joint1" type="revolute">
<parent link="base_link"/>
<child link="link1"/>
<origin xyz="0 0 0.35" rpy="0 0 0"/>
<axis xyz="0 0 1"/>
<limit lower="-3.14" upper="3.14" effort="100" velocity="3.14"/>
</joint>
<!-- ...更多 link / joint ... -->
</robot>
导入步骤
- 准备一个包含
robot.urdf和meshes/子目录的文件夹 - 项目浏览器 → 机器人 → 右键 → 添加机器人 → URDF 文件
- 选择
.urdf根文件, 系统自动加载所有关联网格 - 向导提示:
- 基准链接 (base_link): 自动识别, 一般不需改
- 工具链接 (tool0): 选最后一个 link 或
flange命名的 link - 关节映射: 6 个 revolute 关节自动映射为 J1..J6
- 初始零位: 默认 URDF 的
xyz/rpy原点, 如机器人零位与 URDF 不一致需手动修正
- 点 下一步, 系统根据 URDF 参数求解运动学闭解 (6 轴球腕机构) 或退化到数值解 (非球腕)
- 如果求解闭解失败, 系统提示使用数值逆解, 性能略低但通用
URDF 常见坑
| 问题 | 解决 |
|---|---|
网格路径 package://robot/meshes/xxx.stl | 替换为相对路径 meshes/xxx.stl |
| Xacro 未展开 | 用 ROS 工具 xacro robot.xacro > robot.urdf 先展开 |
| 质量 / 惯量为 0 | 动力学会失效, 按手册补齐 (没数据就估算) |
| 多个 base_link | URDF 必须唯一根, 合并或重命名 |
| mesh 带纹理 | 贴图文件要一并放到 meshes/ 目录, PNG / JPG 均支持 |
| 单位不是米 | URDF 标准用米 / 弧度 / 千克, 如果是 mm 要缩放 0.001 |
STL 导入 — 工装模型
STL 只有网格 (三角面片), 没有运动学或层级信息, 适合静态工装:
- 项目浏览器 → 工装 → 右键 → 添加工装 → STL 文件
- 选择
.stl文件 (支持 ASCII 和 binary) - 设置:
- 实例名: 如
Fixture_A - 单位: mm (默认) / m (URDF 风格)
- 初始位姿: 世界坐标下的 X/Y/Z + 姿态
- 实例名: 如
- 确认后工装出现在 3D 视口, 可拖拽调整位置
- 右键 → 锁定 防止后续误拖
STEP 导入 — CAD 精确模型
STEP (ISO 10303) 是 CAD 工业标准, 保留精确 B-rep 几何. 缺点是文件大、加载慢:
- 右键 → 添加工装 → STEP 文件
- 系统调用内置 STEP 解析器 (基于 OpenCascade) 加载
- 提示自动网格化参数:
- 网格精度: 高 (精度 0.01 mm, 文件大) / 中 (0.1 mm, 推荐) / 低 (1 mm, 快)
- 合并对称面: 是 / 否
- 网格化后自动生成简化 STL 用于显示和碰撞检测
STEP 加载慢
一个 50 MB 的 STEP 文件网格化可能需要 30 秒以上, 建议只对关键工装用 STEP, 常规模型用 STL。
手工 DH 参数输入
如果没有 URDF 只有技术手册的 DH 参数表, 可以手工输入:
- 添加机器人 → 手工参数 → DH 表
- 选 DH 类型: Standard DH (SDH) 或 Modified DH (MDH, Craig 版本)
- 逐行输入 6 行 (6 轴机器人):
| i | a (mm) | α (°) | d (mm) | θ 偏移 (°) | 关节范围 (°) | 速度上限 (°/s) |
|---|---|---|---|---|---|---|
| 1 | 0 | -90 | 345 | 0 | ±170 | 150 |
| 2 | 270 | 0 | 0 | -90 | -135 ~ +85 | 150 |
| 3 | 70 | -90 | 0 | 0 | -155 ~ +158 | 160 |
| 4 | 0 | 90 | 302 | 0 | ±185 | 280 |
| 5 | 0 | -90 | 0 | 0 | ±120 | 280 |
| 6 | 0 | 0 | 72 | 0 | ±360 | 400 |
- 点 求解运动学, 系统识别是否为球腕 (最后 3 轴相交于一点)
- 球腕 → 使用闭解, 10 μs / 次
- 非球腕 → 使用数值逆解 (DLS), 100 μs / 次
SDH vs MDH 快速判断
| 特征 | SDH (经典) | MDH (Craig) |
|---|---|---|
| 变换顺序 | Rz(θ) · Tz(d) · Tx(a) · Rx(α) | Rx(α) · Tx(a) · Rz(θ) · Tz(d) |
| a / α 下标 | 连杆 i-1 到 i | 连杆 i 到 i+1 |
| 适用参考 | 早期教材, Paul 1981 | Craig 教材 (2005 后), ROS 默认 |
手册给的是 MDH 的概率 > 70%, 看公式形式就能判断。
碰撞体简化
网格显示用的视觉模型 (visual mesh) 通常有几万面, 用于碰撞检测会拖慢 PLC 周期. 必须做碰撞体简化 (collision mesh):
- 3D 视口 → 选中 link → 生成碰撞体
- 选算法:
- 凸包 (Convex Hull): 最快, 对凸形物体精确, 对凹形物体偏保守 (误报增多)
- 长方体 (AABB): 最快, 精度最低
- 胶囊体 (Capsule): 适合圆柱类关节
- 多凸包分解 (VHACD): 对凹形物体精确, 拆成多个凸包, 精度 + 性能平衡
- VHACD 参数:
- 凸包最大数量: 16 (推荐)
- 最大顶点数: 64
- 误差: 1%
- 预览简化结果, 满意后点 应用
- 碰撞体可独立导出 STL 存档
碰撞体性能目标
| 模型规模 | 单周期碰撞检测耗时 |
|---|---|
| 全身 50 万面视觉网格 | 20 ms (不可用) |
| 全身 5000 面粗网格 | 0.5 ms |
| 每关节 1 个凸包 | 50 μs (推荐) |
| 每关节胶囊体 | 10 μs (最优) |
导入后处理
- 对比零位: 让机器人回零, 3D 视口的关节角应全 0, 姿态应与实物匹配 (法兰面朝上或水平, 看型号)
- 关节限位校核: 实物机器人加不了极限位, 软件里扫一遍确保不超机械极限
- 速度 / 加速度限幅: 手册给的是关节最大速度, 设置时打 80% 折扣留余量
- 负载设定: 工具 + 工件质量填到
MC_SetLoad或 IDE 机器人属性 → 负载, 否则重力补偿不准 - 保存为项目模板: 导入无误后另存模板, 下次同型号直接复用
参数表
| 参数 | 类型 | 单位 | 说明 |
|---|---|---|---|
| ModelFormat | ENUM | - | URDF / STL / STEP / OBJ / DAE |
| Scale | LREAL | - | 模型缩放因子, 默认 1.0 |
| OriginOffset | LREAL[6] | mm/° | 导入位姿偏移 X/Y/Z/Rx/Ry/Rz |
| MeshResolution | LREAL | mm | STEP 网格精度, 默认 0.1 |
| CollisionType | ENUM | - | ConvexHull / AABB / Capsule / VHACD |
| MaxConvexHulls | UINT | - | VHACD 凸包数上限 (默认 16) |
排错清单
| 现象 | 原因 | 解决 |
|---|---|---|
| URDF 加载后机器人散架 | Joint 父子链接名拼写错 | 检查 <parent> / <child> |
| 机器人零位与实物反 | URDF 零位与厂家定义不同 | 手动设置零位偏移 |
| 网格显示黑色 | 法线方向反 | 用 MeshLab / Blender 翻面后重导出 |
| STEP 加载闪退 | 文件损坏或版本不支持 | 用 CAD 另存为 AP214 / AP242 |
| 3D 视口卡 | 视觉网格太多面 | 减面或启用碰撞体显示模式 |
| 关节限位不对 | URDF 写的是弧度, 转成度时漏转换 | 单位标注检查, URDF 标准是弧度 |
| 逆解失败 | DH 参数中有错 (正负号常见) | 对照手册核对 α 正负 |
最佳实践
- URDF 优先: 主流 CAD (Solidworks / Inventor / CATIA) 都有 URDF 导出插件, 比 STEP → 手工拼强
- 视觉 / 碰撞分离: 视觉网格保留细节, 碰撞网格尽量粗 (面数 < 500)
- 单位统一: 全项目用 mm (Darra 默认) 或 m (URDF 默认), 不要混
- 版本化: 每次模型修改都导出到 git, 不要直接覆盖
- 内置库优先: 如果厂家型号在内置库里, 直接用, 参数和调优都是官方给的
- 增量导入: 工装可以先用简单长方体占位, 工程后期再换精细 STEP
- 对比实物: 导入后拿实物卷尺量关键尺寸, 误差 > 5 mm 就重导