37 lines
1.6 KiB
Python
37 lines
1.6 KiB
Python
# -*- coding: utf-8 -*-
|
|||
|
|
"""从 travel_detail.json 的单关节硬限位重新生成 docs/travel.json。
|
||
|
|
|
||
|
|
滑块范围 = 单关节硬限位(任意单关节推满零干涉,含 1° 安全余量);
|
||
|
|
组合折叠约束保留在 travel_detail.json 的 combos 字段里,供报告引用。
|
||
|
|
"""
|
||
|
|
import json
|
||
|
|
import math
|
||
|
|
|
||
|
|
import os
|
||
|
|
import sys
|
||
|
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||
|
|
from sweep_v2 import CHAIN, DOCS
|
||
|
|
|
||
|
|
d = json.load(open(DOCS + "/travel_detail.json", encoding="utf-8"))
|
||
|
|
out = []
|
||
|
|
for t in CHAIN[1:]:
|
||
|
|
s = d["singles"][t]
|
||
|
|
lo, hi = s["lo"], s["hi"]
|
||
|
|
if lo <= -179.9 and hi >= 179.9:
|
||
|
|
out.append(dict(axis=t, lo=-180.0, hi=180.0, continuous=True, zero=0.0,
|
||
|
|
note="整周无干涉,可 360° 连续旋转(全对全动态扫描验证)"))
|
||
|
|
else:
|
||
|
|
lo_out = float(math.ceil(lo + 1.0)) if lo < -0.5 else 0.0
|
||
|
|
hi_out = float(math.floor(hi - 1.0)) if hi > 0.5 else 0.0
|
||
|
|
out.append(dict(axis=t, lo=lo_out, hi=hi_out, continuous=False, zero=0.0,
|
||
|
|
note="正向 +%d° / 反向 %d°,总行程 %d°(全对全动态扫描验证,含相邻件与电机)"
|
||
|
|
% (hi_out, lo_out, hi_out - lo_out)))
|
||
|
|
print("%-3s %7.1f .. %7.1f -> %s .. %s" % (t, lo, hi, out[-1]["lo"], out[-1]["hi"]))
|
||
|
|
|
||
|
|
json.dump(out, open(DOCS + "/travel.json", "w", encoding="utf-8"),
|
||
|
|
ensure_ascii=False, indent=1)
|
||
|
|
d["final"] = out
|
||
|
|
json.dump(d, open(DOCS + "/travel_detail.json", "w", encoding="utf-8"),
|
||
|
|
ensure_ascii=False, indent=1)
|
||
|
|
print("rewrote docs/travel.json (single-joint hard stops) + updated travel_detail.json")
|