CAD工具
概述
CAD(Computer-Aided Design)工具是机器人机械设计的核心软件。从概念建模到详细设计、从结构仿真到制造出图,CAD贯穿整个设计流程。本节对比主流CAD工具并介绍机器人特有的URDF/MJCF导出流程。
仿真与开发工具链请参考:开发工具链
主流CAD工具对比
| 特性 | SolidWorks | Fusion 360 | OnShape | FreeCAD |
|---|---|---|---|---|
| 类型 | 参数化 | 参数化+直接 | 参数化 | 参数化 |
| 平台 | Windows | Windows/Mac/Web | 浏览器 | 全平台 |
| 价格 | ¥35000+/年 | 免费(个人)/¥4000/年 | 免费(教育)/¥12000/年 | 免费开源 |
| 学习曲线 | 中等 | 较低 | 较低 | 较陡 |
| 装配功能 | 强 | 中 | 强 | 中 |
| 仿真 | 强(付费) | 中 | 弱 | 中(FEM) |
| 渲染 | 强 | 强 | 弱 | 弱 |
| CAM | 付费插件 | 内置 | 付费插件 | 内置(Path) |
| 协作 | PDM(付费) | 云端 | 云端实时 | Git |
| API/脚本 | VBA/C# | Python/JS | FeatureScript | Python |
| URDF导出 | 插件 | 插件 | 第三方 | 插件 |
SolidWorks
特点
SolidWorks是工业界使用最广泛的参数化CAD软件:
- 参数化建模:基于特征的建模,修改参数自动更新
- 装配设计:成熟的约束(Mate)系统,支持大型装配
- 工程图:自动生成符合标准的2D工程图
- 仿真:SolidWorks Simulation提供静力学/动力学/热/流体分析
- 生态系统:庞大的插件库和零件库(McMaster、Misumi)
URDF导出
SolidWorks有专门的ROS URDF导出插件 sw2urdf:
- 安装
sw_urdf_exporter插件 - 在装配体中定义关节(Joint)类型和轴线
- 定义Link和Joint的父子关系
- 导出URDF文件 + STL/DAE网格文件
# 安装 sw2urdf 插件
# 从 GitHub 下载: ros/solidworks_urdf_exporter
# 运行安装程序,在SolidWorks中激活插件
适用场景
- 专业机器人公司的产品开发
- 需要出工程图进行加工
- 大型装配体(>500个零件)
- 团队协作(使用PDM)
Fusion 360
特点
Fusion 360 是Autodesk推出的云端CAD/CAM/CAE一体化工具:
- 免费版可用:个人非商业用途免费
- 多功能集成:建模、装配、仿真、渲染、CAM、PCB(Eagle集成)
- 云端存储:项目自动同步到云端
- 协作:可分享链接给他人查看/编辑
- CAM功能:直接生成CNC刀路和G-code
URDF导出
使用 fusion2urdf 或 Fusion2PyBullet 插件:
# fusion2urdf 安装步骤:
# 1. 下载 fusion2urdf 插件
# 2. Fusion 360 → Scripts and Add-Ins → Add-Ins → +
# 3. 选择插件目录
# 4. 在装配体中运行插件
# 5. 定义Base Link和各Joint
# 6. 导出URDF + mesh文件
适用场景
- 个人/小团队机器人项目
- 需要快速原型设计
- 需要集成CAM(CNC加工)
- 学生和爱好者
OnShape
特点
OnShape 是完全基于浏览器的CAD工具:
- 浏览器运行:无需安装,任何设备可用
- 实时协作:类似Google Docs,多人同时编辑
- 版本控制:类Git的版本管理,分支/合并
- FeatureScript:自定义参数化特征的脚本语言
- 教育版免费:学生和教育机构免费使用
特色功能
- 零件库(Standard Content):丰富的标准件库
- Simultaneous Editing:多人实时编辑同一装配体
- Branching & Merging:设计版本的分支管理
- REST API:完整的API,可编程访问
URDF导出
使用 onshape-to-robot 工具:
# 安装
pip install onshape-to-robot
# 配置 (config.json)
{
"documentId": "your_document_id",
"outputFormat": "urdf",
"robotName": "my_robot"
}
# 导出
onshape-to-robot config.json
适用场景
- 团队协作项目
- 没有高配电脑(Chromebook也可用)
- 开源机器人项目(免费公开分享)
- 教育环境
FreeCAD
特点
FreeCAD 是开源的参数化CAD软件:
- 完全免费开源:GPL协议
- 跨平台:Windows/Mac/Linux
- Python脚本:深度Python集成,可编程建模
- 模块化:通过Workbench扩展功能
- FEM分析:内置有限元分析模块
主要Workbench
| Workbench | 功能 |
|---|---|
| Part Design | 参数化实体建模 |
| Assembly | 装配(A2plus/Assembly4) |
| FEM | 有限元分析 |
| Path | CAM/CNC刀路 |
| TechDraw | 2D工程图 |
| Robot | 机器人仿真(基础) |
URDF导出
使用 FreeCAD ROS Workbench 或手动导出:
# FreeCAD Python 脚本导出 STL
import FreeCAD
import Mesh
doc = FreeCAD.open("robot.FCStd")
for obj in doc.Objects:
if obj.Shape:
Mesh.export([obj], f"{obj.Label}.stl")
配合手写URDF文件或使用 freecad_to_urdf 工具。
适用场景
- 预算有限的项目
- Linux用户
- 需要Python脚本化建模
- 学习CAD的入门选择
URDF/MJCF 模型导出
URDF(Unified Robot Description Format)
URDF 是ROS生态中描述机器人模型的标准XML格式:
<?xml version="1.0"?>
<robot name="my_robot">
<!-- 基座 -->
<link name="base_link">
<visual>
<geometry>
<mesh filename="package://my_robot/meshes/base.stl"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://my_robot/meshes/base_collision.stl"/>
</geometry>
</collision>
<inertial>
<mass value="2.0"/>
<inertia ixx="0.01" ixy="0" ixz="0" iyy="0.01" iyz="0" izz="0.02"/>
</inertial>
</link>
<!-- 关节 -->
<joint name="joint1" type="revolute">
<parent link="base_link"/>
<child link="link1"/>
<origin xyz="0 0 0.1" rpy="0 0 0"/>
<axis xyz="0 0 1"/>
<limit lower="-3.14" upper="3.14" effort="10" velocity="3.14"/>
</joint>
<!-- 连杆1 -->
<link name="link1">
<!-- visual, collision, inertial -->
</link>
</robot>
MJCF(MuJoCo XML Format)
MJCF 是MuJoCo物理引擎的模型格式,在强化学习仿真中广泛使用:
<mujoco model="my_robot">
<worldbody>
<body name="base" pos="0 0 0.5">
<geom type="mesh" mesh="base"/>
<joint name="joint1" type="hinge" axis="0 0 1"/>
<body name="link1" pos="0 0 0.1">
<geom type="mesh" mesh="link1"/>
</body>
</body>
</worldbody>
<asset>
<mesh name="base" file="base.stl"/>
<mesh name="link1" file="link1.stl"/>
</asset>
</mujoco>
导出流程
graph LR
CAD[CAD模型<br/>SolidWorks/Fusion360] --> EXPORT[导出插件]
EXPORT --> URDF[URDF + STL meshes]
URDF --> ROS[ROS/ROS2<br/>Gazebo仿真]
URDF --> MJCF_CONV[URDF→MJCF转换]
MJCF_CONV --> MUJOCO[MuJoCo仿真]
CAD --> STL[手动导出STL]
STL --> MANUAL[手写URDF/MJCF]
MANUAL --> ROS
MANUAL --> MUJOCO
网格简化
仿真用的碰撞网格(Collision Mesh)应简化以提高仿真速度:
| 工具 | 方法 | 适用 |
|---|---|---|
| MeshLab | 二次边折叠 | 通用简化 |
| Blender | Decimate修改器 | 可视化简化 |
| V-HACD | 凸分解 | 碰撞网格 |
| trimesh (Python) | 编程简化 | 批量处理 |
# 使用 trimesh 简化网格
pip install trimesh
python -c "
import trimesh
mesh = trimesh.load('robot_part.stl')
simplified = mesh.simplify_quadric_decimation(1000) # 简化到1000面
simplified.export('robot_part_simple.stl')
"
装配设计技巧
机器人装配的特殊考虑
- 关节定义清晰:每个运动关节明确定义旋转轴和运动范围
- 干涉检查:确保运动范围内无碰撞
- 重心计算:利用CAD的质量属性功能计算重心
- 惯量计算:URDF需要精确的惯量矩阵
- 线缆空间:建模线缆走线路径
- 维护可达性:螺丝和连接器要可操作
惯量矩阵获取
CAD软件可以直接计算零件/装配体的惯量矩阵:
- SolidWorks:评估 → 质量属性
- Fusion 360:检查 → 物理属性
- OnShape:右键 → Mass Properties
输出格式通常为:
\[I = \begin{bmatrix} I_{xx} & I_{xy} & I_{xz} \\ I_{xy} & I_{yy} & I_{yz} \\ I_{xz} & I_{yz} & I_{zz} \end{bmatrix}\]
推荐工作流
个人/小团队
Fusion 360 (建模) → fusion2urdf (导出) → Gazebo (仿真) → 3D打印/CNC (制造)
教育/开源项目
OnShape (建模+协作) → onshape-to-robot (导出) → MuJoCo (仿真) → 3D打印 (制造)
专业团队
SolidWorks (建模) → sw2urdf (导出) → Gazebo/Isaac Sim (仿真) → CNC+注塑 (制造)
预算有限
FreeCAD (建模) → 手写URDF + STL导出 → Gazebo (仿真) → 3D打印 (制造)
参考资源
- SolidWorks URDF Exporter: GitHub - ros/solidworks_urdf_exporter
- fusion2urdf: GitHub
- onshape-to-robot: GitHub
- FreeCAD Documentation: freecad.org
- URDF Specification: wiki.ros.org/urdf
- MJCF Documentation: mujoco.readthedocs.io