Repository navigation
Releases: gh503/robot-modkit
Release list
v1.15.1 · 离线壳热修
v1.15.1 · 离线壳热修
修复发布后第一次刷新可能先拿到旧 JS 的问题。
变更
- Service Worker 对
script/style/worker改为 network-first,
网络失败才回退缓存;发布后第一次刷新即可拿到新版。 - 导航仍 network-first;图片/模型仍 stale-while-revalidate,离线仍可用。
- 缓存版本
modkit-shell-v1.15.1与包版本同步,测试拦漂移。 - 测试仍 280。
验证
- 浏览器实测:SW 更新到 v1.15.1 后,同价减重 3 个候选正常显示,无控制台异常。
make check全绿;280 项 pytest。- 发布包 SHA256 见
SHA256SUMS。
边界
- 首次离线访问仍需在线;只缓存同源 GET。
- 仍是软件装配验证;物理闸门 0/5。
v1.15.0 · 同价减重候选
v1.15.0 · 同价减重候选
预算优化器不只回答“怎么更便宜”,也能回答“成本不变怎么更轻”。
新增
suggest(include_mass=True)/ CLI--mass/ BOM 页“同价减重”:- 默认仍只列 BOM 成本严格下降的候选;
- 勾选后额外保留成本不升、重量下降的候选。
- m1 的 240→160 底盘:
- 成本 ¥1127.4 不变;
- 重量 1853.8→1773.8g(-80g);
- 18 组件/4 关节仍通过校验;支撑面变小,风险 high。
- 候选卡显示“成本不升 · 省重 80g”;Markdown 报告新增“省重 g”列。
- 规划
plan()仍只按预算优化,不把减重当目标。 - 测试 278 → 280。
边界
- 同价减重只覆盖替换表里“成本不升”的结构替换,不是拓扑优化。
- 仍是软件装配验证;没有采购/打印/装配/上电/标定;物理闸门 0/5。
验证
make check全绿;280 项 pytest;7 个装配预设 PASS。- JS/Python/CLI 三端对同价减重候选结果一致。
- 发布包 SHA256 见
SHA256SUMS。
详细说明:docs/68-预算优化器.md
v1.14.0 · 规划报告、截断提示与可访问性
v1.14.0 · 规划报告、截断提示与可访问性
这一版主要是把“结果可信”和“能用键盘/无 JS 也能理解”补齐。
新增
- 规划报告:预算报告可包含“目标规划”段(目标、每步成本、可达/未达标、仍差多少)。
- 截断诚实提示:精确搜索达到 200 节点上限时,规划卡/报告/CLI 都明确标记
“可能不是全局最优”,不再把截断结果当完整最优。 - 标签页键盘导航:
←/→/Home/End,维护aria-selected/tabindex。 - noscript:Studio 和 3D 查看器在禁用 JS 时给出说明。
- SW 版本同步:
sw.js缓存版本必须等于包版本,测试拦截漂移。
边界
- 截断提示不扩大搜索范围;仍是候选表 + 深度/节点上限。
- 仍是软件装配验证;没有采购/打印/装配/上电/标定;物理闸门 0/5。
验证
make check全绿;278 项 pytest;7 个装配预设 PASS。- 发布包 SHA256 见
SHA256SUMS。
详细说明:docs/67-网页设计器.md · docs/68-预算优化器.md
v1.13.0 · 分享、离线与导入校验
v1.13.0 · 分享、离线与导入校验
Studio 从“能算”补到“能带走、能断网打开、坏数据不崩”。
新增
- 分享链接
- 顶部“分享”把当前装配编码进 URL hash(
#d=...)并复制; - 打开链接自动载入并重新求解;
- 超过 60000 字符拒绝,提示导出 JSON。
- 顶部“分享”把当前装配编码进 URL hash(
- PWA 离线壳
manifest.webmanifest/pwa.js/sw.js;- 缓存 Studio 壳和组件数据,导航 network-first,静态资源 stale-while-revalidate;
- 断网刷新实测仍能打开并求解(首次访问需在线)。
- 导入/恢复形状校验
MODKIT_ASSEMBLY.check()在validate()前检查 JSON 对象、非空 components、
id 唯一、type 存在、parent 引用、at/rot/spin 数值、根组件恰好 1 个;- 导入和本地草稿都会先过这一层,错误显示前几条。
- 本地草稿元数据
localStorage存{schema, savedAt, assembly},兼容旧裸装配格式。
- 测试 276 → 278。
边界
- 分享链接是快照;后续编辑不会自动改写已复制的链接。
- 离线首次访问仍需在线;Service Worker 只缓存同源 GET。
- 仍是软件装配验证;没有采购/打印/装配/上电/标定;物理闸门 0/5。
验证
make check全绿;278 项 pytest;7 个装配预设 PASS。- 浏览器 QA:分享链接往返、
hashchange载入、断网刷新、无控制台异常。 - 发布包 SHA256 见
SHA256SUMS。
详细说明:docs/67-网页设计器.md
v1.12.0 · 精确预算规划
v1.12.0 · 精确预算规划
预算规划不再只看“当前这一步最省”,而是在候选树里找步数最少、成本最低的达标路径。
变更
plan()(web/budget-core.js/software/modkit/optimizer.py)从贪心改为
深度受限穷举:- 优先步数最少的达标路径;
- 同一步数再选成本最低;
- 默认最多 4 步(CLI
--max可到 8),候选树节点上限 200; - 超限返回
truncated=true和当前最优,不假装搜完。
- 网页“规划达标”和 CLI
--goal自动使用精确搜索,接口不变。 - m1 目标 ¥1000 仍是一步 ¥968;目标 ¥900 仍显示 ¥964.4 / 差 ¥64.4。
- 测试 275 → 276(新增节点上限/truncated 回归)。
边界
- “精确”只相对于当前替换候选表和深度/节点上限,不是无限制全局最优。
- 仍是软件装配验证;没有动力学/网格碰撞/运动后干涉。
- 没有采购/打印/装配/上电/标定;物理闸门 0/5。
验证
make check全绿;276 项 pytest;7 个装配预设 PASS。- 发布包 SHA256 见
SHA256SUMS。
详细说明:docs/68-预算优化器.md
v1.11.0 · 目标预算规划
v1.11.0 · 目标预算规划
优化器现在能回答“按我的预算,能不能到、要怎么到”。
新增
- 规划达标(网页 BOM 页)
- 读取
budget_cny,最多走 4 步单步候选 - 可达:列出每一步,点“应用全部”一次写入,记一步撤销
- 不可达:明确显示最多到多少、还差多少,不显示“应用全部”
- 读取
- CLI
--goalmodkit assemble suggest assemblies/m1.json --goal 1000 # 1 步可达 ¥968 modkit assemble suggest assemblies/m1.json --goal 900 # 2 步最多到 ¥964.4,仍差 ¥64.4 modkit assemble suggest assemblies/m1.json --goal 1000 \ --apply-plan --out /tmp/m1-plan.json # 写出 -plan.json,可继续 validate/plan
--json输出纯 JSON 规划元数据(不含完整 assembly)。- 每一步仍重新走
assembly.validate;网页/CLI 结果一致。 - 测试 272 → 275。
边界
- 规划是贪心:每步选节省最大,不是全局最优;可能错过“两步组合更省”的路径。
- 不可达通常意味着需要结构改动,而不是继续换小件。
- 没有动力学/网格碰撞/运动后干涉。
- 没有采购/打印/装配/上电/标定;物理闸门 0/5。
验证
make check全绿;275 项 pytest;7 个装配预设 PASS。- 规划回归:m1 ¥1000 一步 ¥968;m1 ¥900 两步 ¥964.4 / 差 ¥64.4。
- 发布包 SHA256 见
SHA256SUMS。
详细说明:docs/68-预算优化器.md
v1.10.0 · 预算报告与撤销/重做
v1.10.0 · 预算报告与撤销/重做
优化器现在有完整的“看—试—回”闭环:看候选、试应用、回退。
新增
- 预算报告导出(网页)
- BOM → 预算优化 → 导出报告
- 下载 Markdown:当前 BOM + 每条候选的节省、应用后成本、组件/关节、风险、代价
- 与 CLI
modkit assemble suggest --out report.md同用途
- Studio 撤销/重做
- 顶部
↶/↷,或Ctrl+Z/Ctrl+Shift+Z/Ctrl+Y - 最多 40 步装配快照
- 加件/换件/删件/应用参数/应用优化候选/载入预设都记一步
- 撤销后继续编辑会截断 redo 分支
- 历史只在当前会话,不写 localStorage
- 顶部
web/budget-core.js增加reportMarkdown()- 测试 271 → 272
边界
- 撤销只回滚网页装配 JSON,不回滚已导出的文件或相机视角。
- 历史不持久化;刷新后重置为当前草稿。
- 优化器仍是单步候选,不是全局最优。
- 没有采购/打印/装配/上电/标定;物理闸门 0/5。
验证
make check全绿;272 项 pytest;7 个装配预设 PASS。- 浏览器 QA:撤销/重做(含 Ctrl+Z / Ctrl+Shift+Z)、优化报告下载、无控制台异常。
- 发布包 SHA256 见
SHA256SUMS。
详细说明:docs/67-网页设计器.md · docs/68-预算优化器.md
v1.9.0 · CLI 预算优化器
v1.9.0 · CLI 预算优化器
v1.8 的预算优化器现在不只活在网页里。命令行也能生成同一批候选、写报告、直接产出新装配 JSON。
新增
# 列出候选
modkit assemble suggest assemblies/m1.json
# 纯 JSON 元数据(可直接 pipe 给 jq)
modkit assemble suggest assemblies/m1.json --json
# Markdown 报告
modkit assemble suggest assemblies/m1.json --out /tmp/budget.md
# 应用候选,写新装配
modkit assemble suggest assemblies/m1.json \
--apply drop-elbow --out /tmp/m1-opt.json
# 继续正常流程
modkit assemble validate /tmp/m1-opt.json
modkit assemble plan /tmp/m1-opt.json --out cad/out/m1-optsoftware/modkit/optimizer.py:与web/budget-core.js同语义的单步候选;
每个候选重新assembly.validate,按 BOM 节省 排序。m1的drop-elbow:18→15 组件、4→3 关节、¥1127→¥968。--apply不覆盖原文件;新 JSON 名字自动加-opt,描述记录来源候选。- 网页端 BOM → 预算优化保持同步;两端对 7 个预设的候选结果一致。
- 测试 269 → 271。
边界
- 单步候选,不是全局最优;没有组合搜索/多目标加权。
- 仍然是软件装配验证:AABB 粗碰撞/静载/质量/功率;没有动力学、网格碰撞、
运动后干涉。 - 去掉肘关节是能力裁剪,不是免费降本。
- 没有采购/打印/装配/上电/标定;物理闸门 0/5。
验证
make check全绿;271 项 pytest;7 个装配预设 PASS。- CLI:
suggest、--json、--out、--apply均实测;写出的 JSON 再校验 PASS。 - 发布包 SHA256 见
SHA256SUMS。
详细说明:docs/68-预算优化器.md
v1.8.0 · 预算优化器
v1.8.0 · 预算优化器
在线:https://gh503.github.io/robot-modkit/design.html → BOM → 预算优化
v1.7 只告诉你"超了 ¥127";v1.8 开始告诉你:哪一步替换最省钱,而且还能装上。
新增
web/budget-core.js:纯函数候选生成器- 去掉肘关节(把末端工具直接装回父件)
- 换更小的甲板/立柱/方梁/夹爪
- 每个候选重新走
MODKIT_ASSEMBLY.validate,只保留校验通过且 BOM 成本严格下降的项
- BOM 页新增 生成降本候选:
- 显示:省多少钱、代价、应用后的成本/组件数/关节数
- 点"应用"后重新校验、重新生成剩余候选
- 名字加
-opt,描述记录来源候选,自动保存到 localStorage
- 示例:
m1:18 组件 / 4 关节 / ¥1127 → 15 组件 / 3 关节 / ¥968arm_4dof:14 → 9 组件、¥869 → ¥562;标题会明确写"及下游 wrist"
- 测试 268 → 269;7 个预设仍全部 PASS。
一个刻意的反例
frame.chassis_240 → frame.chassis_160 的组件标价不同,但 BOM 里两者都是 3 块底盘板,
报价不会降。候选按 BOM 合计判断,所以不会展示这种"看起来便宜"的替换。
边界
- 单步候选,不是全局最优;没有组合搜索/多目标加权。
- AABB/静载子集;没有动力学、网格碰撞、运动后干涉。
- 去掉肘关节是能力裁剪,不是免费降本;UI 用 high risk 标出。
- 仍没有采购/打印/装配/上电/标定;物理闸门 0/5。
验证
make check全绿;269 项 pytest;7 个预设 PASS。- 浏览器 QA:7 预设生成候选、应用 m1 两关节候选、应用方梁候选、无控制台异常。
- 发布包 SHA256 见
SHA256SUMS。
详细说明:docs/68-预算优化器.md
v1.7.0 · 预算模式与 m1_budget
v1.7.0 · 预算模式与 m1_budget
在线:https://gh503.github.io/robot-modkit/design.html
这一版回答一个很具体的问题:¥1000 以内到底能做出什么? 不把完整 M1 说成"降价就能做",而是给一个任务范围明确的裁剪方案。
新增
m1_budget装配:240 底盘 +yaw+shoulder+ 固定upper100mm 梁 + 40mm 夹爪- 15 组件 / 5 舵机 / 1649g / ¥968
- 两关节定点抓放:没有肘关节,不能改变臂展;只能抓放与肩关节同一半径上的站点
- 没有相机/树莓派,不能做视觉识别;是固定工位/示教抓放,不是自主任务
- 这是有意识的裁剪,不是"三关节也能随便抓"
- Studio 预算模式:
budget_cny默认 ¥1000,可编辑;- 校验 pill / HUD / 指标 / BOM 都显示"余 ¥32"或"超 ¥127";
- 导出 JSON 会带上预算字段;
m1完整版自动红色显示超支。
- 7 个预设:
m1_budget¥968、mini_rover¥653、pan_tilt¥506、arm_4dof¥869、wide_gripper¥721、sensor_tower¥256、m1¥1127。 - 测试 267 → 268;文档 65/67、README、CHANGELOG 同步。
边界
- 预算字段只用于设计决策,不改变 BOM 计算,也不会让不合法的装配变合法;最终报价仍要供应商复核。
m1_budget没有相机/视觉,不能自主识别目标;仍是软件装配验证,没有采购/打印/装配/上电/标定;物理闸门 0/5。- 网页动画是运动学示意,不是动力学;装配 STL 是简化网格,不是精确参数化装配。
验证
make check全绿;7 个装配预设全部 PASS。- 浏览器 QA:7 预设、预算编辑、超支显示、JSON 导出(version 1.7.0)。
- 发布包 SHA256 见
SHA256SUMS。
详细说明:docs/67-网页设计器.md