# URDF-Studio
**Repository Path**: findme404/URDF-Studio
## Basic Information
- **Project Name**: URDF-Studio
- **Description**: No description available
- **Primary Language**: TypeScript
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-04-26
- **Last Updated**: 2026-04-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# URDF Studio
[](https://reactjs.org/)
[](https://threejs.org/)
[](https://www.typescriptlang.org/)
[](https://vitejs.dev/)
[](LICENSE)
面向 `URDF`、`MJCF`、`USD`、`Xacro`、`SDF` 和 `.usp` 项目工作流的机器人设计、组装、可视化与导出工作台。
**在线体验:** [urdf.d-robotics.cc](https://urdf.d-robotics.cc/)
[English](./README.md) | [中文](./README_CN.md)
---
## 项目简介
URDF Studio 是一个运行在浏览器中的机器人建模环境,用来处理机器人拓扑、视觉/碰撞几何体、硬件参数、多文件工作区以及导出交付,而不需要每次都直接手写 XML。
当前版本重点整合了:
- `Skeleton`、`Detail`、`Hardware` 三种编辑模式
- 多机器人组装、桥接关节和工作区文件管理
- 基于 worker 的导入/导出链路
- USD runtime hydration、prepared export cache 和 roundtrip archive 工作流
- AI 生成、AI 审阅与报告导出
- 可复用的 `@urdf-studio/react-robot-canvas` 包工作区
包身份说明:
- 根应用:`urdf-studio@2.0.0`(私有工作区应用)
- 对外发布包:`@urdf-studio/react-robot-canvas@0.1.0`
版本管理约定:
- 私有应用与对外发布包采用各自独立的语义化版本
- 应用版本在构建时注入前端,并显示在 About 弹窗中
- 版本升级统一通过 `npm run version:bump`,不要手改多个清单文件
## 核心能力
### 编辑能力
- 构建与编辑 link/joint 运动学树
- 编辑 visual mesh、collision mesh、测量与辅助显示
- 配置电机与硬件参数
- 通过统一 viewer 壳层切换不同编辑模式
### 工作区与组装
- 支持单文件、文件夹、ZIP 和 `.usp` 项目归档导入
- 维护 workspace 文件树、源码文本与选中状态同步
- 将多个机器人装配到同一工作区,并通过 bridge joint 建立连接
- 保留历史记录、pending edit 和预解析机器人缓存
### 可视化
- 基于 React Three Fiber 的共享工作区画布,同时服务 visualizer 与 URDF/USD viewer
- 运行时 URDF/MJCF viewer 与 vendored USD viewer runtime
- USD stage preparation、hydration、metadata extraction 和 offscreen worker 渲染链路
- 支持截图、helper overlay、transform controls 与碰撞编辑
### 导出与互操作
- 导出 `URDF`、`MJCF`、`USD`、`SDF`、`Xacro`、CSV/BOM、PDF、ZIP 和 `.usp`
- worker 化的 project archive、USD export、USD binary archive 转换
- 面向 roundtrip 的 USD archive 生成与 prepared export cache
- 对外复用的 `react-robot-canvas` 包工作区
## 技术栈
- **前端**:React 19.2、TypeScript 5.8、Vite 6.2
- **3D**:Three.js 0.181、React Three Fiber 9、Drei 10
- **状态管理**:Zustand 5
- **样式**:Tailwind CSS 4
- **解析 / 导出**:位于 `src/core` 的 URDF、MJCF、USD、Xacro、SDF 与 mesh 管线
- **打包导出**:JSZip、jsPDF
- **包工作区**:`packages/react-robot-canvas`
## 仓库结构
```text
src/
app/ 应用壳、编排、overlay、viewer handoff
features/ 业务模块(visualizer、urdf-viewer、file-io、code-editor 等)
store/ Zustand store
shared/ 共享 UI、3D 基础设施、i18n、debug、静态数据
core/ 解析器、生成器、loader、robot 逻辑
lib/ 仓库内可复用库入口
styles/ 全局样式与语义 token
types/ 跨模块类型
packages/react-robot-canvas/
可发布的复用包工作区
docs/
架构说明、runtime 审计、贡献者上下文
scripts/
回归验证、schema 生成、比较脚本、本地工具
log/
本地运行日志与保留的排障输出
.tmp/
某些脚本使用的临时构建/运行 scratch 目录
.worktrees/
使用 git worktree 时的本地隔离工作区目录
public/
静态资源、Monaco、USD bindings、示例机器人
tmp/
截图、trace、临时验证产物
output/
用户可见导出与需要保留的验证产物
test/
fixture 语料、浏览器回归样本与外部镜像工程
```
架构补充:
- `src/app` 不是一个薄壳。它已经明确分成 `components/`、`hooks/`、`utils/`、`workers/`,负责 document loading、viewer handoff、导入导出编排、pending history 和 binary/archive worker bridge。
- `src/features/urdf-viewer` 是当前最重的 feature 之一,内部同时包含 React UI、vendored USD runtime、adapter/utils,以及 worker 驱动的 offscreen 渲染链路。
## 快速开始
### 环境要求
- Node.js 18 或更高版本
- npm
- 用于本地 USD 验证的现代 Chromium 浏览器
### 安装
```bash
git clone https://github.com/OpenLegged/URDF-Studio.git
cd URDF-Studio
npm install
```
### 可选环境变量
项目即使没有 AI 凭据也可以运行。如果需要启用 AI 生成 / AI 审阅,请设置 `vite.config.ts` 注入到前端运行时的环境变量:
```bash
OPENAI_API_KEY=your_api_key
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4.1-mini
# 当前 Vite define shim 也支持这个备选键
GEMINI_API_KEY=
# 可选:覆盖 Monaco 静态资源路径
VITE_MONACO_VS_PATH=
```
可以放到 `.env.local` 中。
### 启动
```bash
npm run dev
```
打开:
- `http://127.0.0.1:3000`
当前 Vite dev server 会固定绑定在 `127.0.0.1`,并返回 USD WASM runtime 所需的 cross-origin isolation headers。
## USD 运行时要求
USD 加载依赖 `SharedArrayBuffer`,因此页面必须处于 cross-origin isolated 环境。
- 开发使用 `npm run dev`
- 本地验证生产构建使用 `npm run preview`
- 优先使用 `127.0.0.1` / `localhost` 或 HTTPS
- 不要用缺少下列响应头的普通静态服务器直接托管 `dist/`
```http
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Resource-Policy: same-site
```
如果这些响应头不存在,应用壳可能仍然能打开,但 USD 导入 / stage open 会失败。
## 常用命令
```bash
# 应用
npm run dev
npm run build
npm run preview
# 版本管理
npm run version:show
npm run version:bump -- --app minor
npm run version:bump -- --package patch
# 可复用包工作区
npm run build:package:react-robot-canvas
npm run pack:package:react-robot-canvas
# schema / 对比工具
npm run code-editor:generate-urdf-schema
npm run mjcf:compare
npm run sdf:compare
# 回归脚本
npm run regression:shadow-hand-hover
npx tsx scripts/regression/validate_unitree_model_roundtrip_archive.ts
# Codex 韧性 / key-router 工具
npm run codex:retry
npm run codex:gui
npm run codex:key-router:deploy:dry
```
`scripts/` 下还包含 URDF 检查、机器人预览图生成、MuJoCo/MJCF 对比、回归 runner,以及本地 Codex 支撑工具。
## 测试与验证
当前仓库已经提供统一的根级质量命令,用于格式化、Lint 和 CI 校验:
- `npm run format`
- `npm run format:check`
- `npm run lint`
- `npm run typecheck:quality`
- `npm run check`
`npm run typecheck` 仍保留为全仓 TypeScript 债务检查。CI 和 `npm run check` 当前使用 `npm run typecheck:quality`,它会先排除 test/spec 文件,以便在测试夹具持续迁移期间保持 runtime 编译为绿。
Git hooks 通过 Husky + lint-staged + Commitlint 接入:
- `pre-commit`:对 staged 文件执行格式化,并在 staged diff 上运行 ESLint / Stylelint
- `commit-msg`:校验 Conventional Commit 提交信息
目前仓库仍然**没有**强行统一成单一的根级 `npm test`,因为测试验证依旧以模块定向和 fixture 回归为主。
通常通过以下方式完成验证:
- 在改动模块旁边运行定向 `node --test` / `npx tsx --test`
- 运行 `scripts/regression/` 下的定向回归脚本
- 执行 `npm run build`
- 如果改动了 `src/lib` 或 `packages/react-robot-canvas`,补跑包构建
- 针对 `test/` 下的大型 fixture 语料做回归检查,尤其是 `test/unitree_model`、`test/gazebo_models`、`test/awesome_robot_descriptions_repos`、`test/usd-viewer`
## 文档入口
- [更新日志](./CHANGELOG.md)
- [发布流程](./RELEASING.md)
- [架构边界](./docs/architecture-boundaries.md)
- [Robot Canvas 库说明](./docs/robot-canvas-lib.md)
- [Runtime Fallback Audit](./docs/runtime-fallback-audit.md)
- [贡献者 Prompt 主文档](./docs/prompts/CLAUDE.md)
- [Agent 规范](./AGENTS.md)
## 包工作区
仓库内同时包含可发布的包工作区:
- [`packages/react-robot-canvas`](./packages/react-robot-canvas)
这个包当前对外提供 `RobotCanvas`,用于在独立 React 应用中嵌入 URDF/MJCF 查看能力,而不需要带上完整的 URDF Studio 应用壳。
## 贡献说明
- 保持依赖方向符合 `app -> features -> store -> shared -> core -> types`
- 优先复用现有 hooks / utils,而不是重复实现 viewer 或 export 逻辑
- 遵循 [AGENTS.md](./AGENTS.md) 中的运行时与样式约束
- 临时截图、trace、浏览器验证产物统一放到 `tmp/`
## 许可证
本项目采用 **Apache License 2.0**,详见 [LICENSE](./LICENSE)。
## 致谢
感谢 [D-Robotics](https://developer.d-robotics.cc/) 提供支持。
[](https://www.star-history.com/#OpenLegged/URDF-Studio&type=date&legend=top-left)