Fusion2URDF:Fusion 360 机器人模型一键导出 ROS URDF 包,从 CAD 到仿真的完整入门指南
【免费下载链接】fusion2urdfA Fusion 360 Script to export URDF项目地址: https://gitcode.com/gh_mirrors/fu/fusion2urdf
Fusion2URDF 是一款运行在Fusion 360中的脚本工具,能将机器人 CAD 模型一键导出为完整的 ROS URDF 描述包:自动生成 URDF/Xacro 文件、STL 网格文件、控制器配置以及 Gazebo 仿真 launch 文件。你无需手写任何 XML,就能走通「CAD 建模 → URDF 描述 → RViz 预览 → Gazebo 物理仿真」的完整流程,非常适合 ROS 新手和机器人初学者。
🤔 Fusion2URDF 是什么?能导出什么?
一句话概括:它把 Fusion 360 里的机械装配体「翻译」成 ROS 世界能直接使用的机器人描述包。运行一次脚本,你会得到一个可直接catkin_make编译的{robot_name}_description功能包,其中包含:
| 导出内容 | 用途 |
|---|---|
.xacro文件 | 机器人的 URDF 结构描述(links、joints、惯性参数) |
.stl网格文件 | 每个 link 的外观与碰撞模型(存入meshes/) |
.launch文件 | RViz 显示与 Gazebo 仿真的一键启动脚本 |
.yaml文件 | 各关节位置控制器的 PID 配置 |
.trans/.gazebo | 传动接口与 Gazebo 物理插件配置 |
脚本主体位于 URDF_Exporter/URDF_Exporter.py 的run()入口函数,核心解析逻辑拆分为三个模块:
- Link 解析:URDF_Exporter/core/Link.py —— 计算每个部件的质量、质心与惯性张量
- Joint 解析:URDF_Exporter/core/Joint.py —— 读取关节类型、轴向与运动限位
- 文件写入:URDF_Exporter/core/Write.py —— 生成全部 xacro、launch 与 yaml 文件
📁 项目结构一览
fusion2urdf/ ├── URDF_Exporter/ # 安装到 Fusion 360 的脚本本体 │ ├── URDF_Exporter.py # 脚本入口 │ ├── core/ # Link / Joint / Write 三大解析模块 │ ├── package/ # 生成的 ROS 功能包模板(package.xml 等) │ └── utils/ # STL 导出、文件对话框等工具函数 └── Example/ ├── Basic_Robot.f3d # 示例 Fusion 360 工程(双轮小车) └── Basic_Robot_description/ # 脚本导出后的完整 ROS 包示例强烈建议先看一遍 Example/Basic_Robot_description/ 下的成品结构,包括 Basic_Robot.xacro 里的 link 定义、Basic_Robot.gazebo 的仿真插件配置,以及 meshes/ 中的三个 STL 网格文件——这就是你导出后得到的样子。
🚀 安装步骤:只需两条命令
第一步,获取项目代码:
git clone https://gitcode.com/gh_mirrors/fu/fusion2urdf第二步,把URDF_Exporter文件夹复制到 Fusion 360 的 Scripts 目录。Windows(PowerShell):
cd <path to fusion2urdf> Copy-Item ".\URDF_Exporter\" -Destination "${env:APPDATA}\Autodesk\Autodesk Fusion 360\API\Scripts\" -RecursemacOS(bash 或 zsh):
cd <path to fusion2urdf> cp -r ./URDF_Exporter "$HOME/Library/Application Support/Autodesk/Autodesk Fusion 360/API/Scripts/"安装完成后重启 Fusion 360,在顶部菜单ADD-INS中就能看到fusion2urdf选项。
⚠️ 导出前必读:3 个建模前置条件
这是新手最容易踩坑的环节,脚本本身不会报错但会导出错误结果,请务必检查:
- 每个 link 必须是独立的 Component(配置组件)。机器人由多个部件组成时,要先把每个刚性部件「新建配置组件」,让 Fusion 的组件树与机器人的连杆树一一对应。
- 定义基座并命名为
base_link。脚本强制要求存在一个名为base_link的根组件(见 URDF_Exporter.py 中的校验逻辑)。如果基座被「接地(Grounded)」,先右键取消接地再导出。 - 关节定义方向不能反:定义 Joint 时,父连杆必须是Component2,子连杆是Component1。方向反了会抛出
KeyError: xxx__1或弹出「Check whether the connections are correct」的提示(提示语见 Joint.py 的 parent/child 赋值逻辑)。
此外还有两条硬性限制:
- 组件只允许包含实体(bodies),不支持嵌套组件——「部件里套部件」的结构会导出失败或出现异常模型;
- 当前仅支持Rigid(固定)、Slider(移动/棱柱)、Revolute(旋转)三种关节类型(见 Joint.py 的关节类型映射表);旋转关节若未设置角度限位,会自动导出为
continuous连续关节。
💾 一键导出操作全流程
- 先备份模型——脚本运行后会复制并重命名你的组件,原文件会被改动,养成先另存副本的习惯;
- 打开机器人模型,点击ADD-INS → fusion2urdf;
- 弹出文件夹对话框,选择保存目录(例如
Desktop/test); - 等待几秒到几分钟(视模型复杂度而定),看到「Successfully create URDF file」即导出成功。
组件面板里会出现大量old_component,这是脚本复制组件后保留的原始副本,可以直接忽略。导出的 STL 文件位于{保存目录}/{robot_name}_description/meshes/下(导出逻辑在 utils.py)。
📦 生成的 ROS 包长什么样?
以示例包为例,结构如下(参考 Example/Basic_Robot_description/):
Basic_Robot_description/ ├── launch/ │ ├── display.launch # RViz 显示 │ ├── gazebo.launch # Gazebo 仿真 │ ├── controller.launch # 控制器加载 │ ├── controller.yaml # 各关节 PID 参数 │ └── urdf.rviz # RViz 预设配置 ├── meshes/ # base_link.stl / left_wheel_1.stl / right_wheel_1.stl ├── urdf/ │ ├── Basic_Robot.xacro # 主 URDF 描述 │ ├── materials.xacro # 材质定义 │ ├── Basic_Robot.trans # 传动接口 │ └── Basic_Robot.gazebo # Gazebo 插件与摩擦系数 ├── package.xml └── CMakeLists.txt包名与文件内容会随你的模型名自动生成——脚本会自动改写package.xml和CMakeLists.txt中的包名(逻辑见 utils.py),所以建模时机器人根组件起个好名字很重要。
🎮 在 ROS 环境中运行
把生成的_{robot_name}_description包放入工作空间,编译并启动:
cd ~/catkin_ws/ catkin_make source devel/setup.bashRViz 中查看机器人(对应 display.launch):
roslaunch {robot_name}_description display.launchGazebo 物理仿真(对应 gazebo.launch,含gazebo_ros_control插件与空世界场景):
roslaunch {robot_name}_description gazebo.launch如需关节控制,再叠加controller.launch与 controller.yaml 中的位置控制器即可驱动关节。
❓ 常见问题排查清单
| 现象 | 原因与解决办法 |
|---|---|
| 提示「There is no base_link」 | 忘记把基座组件命名为base_link,或它被接地了,改名/取消接地后重跑 |
弹出KeyError: xxx__1 | 关节的 Component1/Component2 定义反了,交换后重新定义关节 |
| 部件在 RViz 中绕地图中心旋转 | 模型 Z 轴未竖直,在 Fusion 中确保 Z 轴朝上;同时确认关节原点定义无误 |
| 导出「正常」但模型异常 | 多半是关节定义问题(脚本可能静默出错),重新定义关节再试 |
| 复杂运动学回路出错 | 不要用 Fusion 自带关节编辑器手动拖拽对位,保持关节原始生成位置,参考 README.md 中的「Complex Kinematic Loops」一节 |
| 导出前建议关闭「Capture design history」 | 部分复杂装配体在关闭该选项后导出更稳定 |
📌 项目限制与适用边界
- 目前仅支持 Gazebo 仿真;如果你使用 PyBullet,请选择同作者的另一款姊妹工具 Fusion2PyBullet;
- 仓库已停止主动开发,但欢迎提交 Issue 与 PR;
- 单位约定:内部计算使用 cm 与 kg/cm²,导出时自动换算为米与 kg·m²(见 Link.py 的单位转换)。
掌握「组件化建模 → 正确命名 base_link → 一键导出 → catkin 编译 → RViz/Gazebo 启动」这条主线,你的 Fusion 360 机器人就正式接入 ROS 生态了。🎉
【免费下载链接】fusion2urdfA Fusion 360 Script to export URDF项目地址: https://gitcode.com/gh_mirrors/fu/fusion2urdf
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考