@horizon36596/zenith-cli 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NOTICE +18 -0
- package/README.md +207 -0
- package/dist/autoLoad.d.ts +54 -0
- package/dist/autoLoad.d.ts.map +1 -0
- package/dist/autoLoad.js +139 -0
- package/dist/autoLoad.js.map +1 -0
- package/dist/calibrateFit.d.ts +38 -0
- package/dist/calibrateFit.d.ts.map +1 -0
- package/dist/calibrateFit.js +69 -0
- package/dist/calibrateFit.js.map +1 -0
- package/dist/commandLibrary.d.ts +19 -0
- package/dist/commandLibrary.d.ts.map +1 -0
- package/dist/commandLibrary.js +27 -0
- package/dist/commandLibrary.js.map +1 -0
- package/dist/commands/calibrate.d.ts +18 -0
- package/dist/commands/calibrate.d.ts.map +1 -0
- package/dist/commands/calibrate.js +116 -0
- package/dist/commands/calibrate.js.map +1 -0
- package/dist/commands/codegen.d.ts +12 -0
- package/dist/commands/codegen.d.ts.map +1 -0
- package/dist/commands/codegen.js +63 -0
- package/dist/commands/codegen.js.map +1 -0
- package/dist/commands/deploy.d.ts +63 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +181 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/diff.d.ts +11 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +68 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/estimate.d.ts +9 -0
- package/dist/commands/estimate.d.ts.map +1 -0
- package/dist/commands/estimate.js +81 -0
- package/dist/commands/estimate.js.map +1 -0
- package/dist/commands/init.d.ts +10 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +67 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/new.d.ts +10 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +28 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/propose.d.ts +15 -0
- package/dist/commands/propose.d.ts.map +1 -0
- package/dist/commands/propose.js +67 -0
- package/dist/commands/propose.js.map +1 -0
- package/dist/commands/render.d.ts +16 -0
- package/dist/commands/render.d.ts.map +1 -0
- package/dist/commands/render.js +90 -0
- package/dist/commands/render.js.map +1 -0
- package/dist/commands/sim.d.ts +31 -0
- package/dist/commands/sim.d.ts.map +1 -0
- package/dist/commands/sim.js +213 -0
- package/dist/commands/sim.js.map +1 -0
- package/dist/commands/validate.d.ts +19 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +97 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/coreGate.d.ts +19 -0
- package/dist/coreGate.d.ts.map +1 -0
- package/dist/coreGate.js +23 -0
- package/dist/coreGate.js.map +1 -0
- package/dist/fieldImage.d.ts +19 -0
- package/dist/fieldImage.d.ts.map +1 -0
- package/dist/fieldImage.js +63 -0
- package/dist/fieldImage.js.map +1 -0
- package/dist/findings.d.ts +20 -0
- package/dist/findings.d.ts.map +1 -0
- package/dist/findings.js +57 -0
- package/dist/findings.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +194 -0
- package/dist/index.js.map +1 -0
- package/dist/javaCodegen.d.ts +44 -0
- package/dist/javaCodegen.d.ts.map +1 -0
- package/dist/javaCodegen.js +537 -0
- package/dist/javaCodegen.js.map +1 -0
- package/dist/launcher.d.ts +39 -0
- package/dist/launcher.d.ts.map +1 -0
- package/dist/launcher.js +153 -0
- package/dist/launcher.js.map +1 -0
- package/dist/lib.d.ts +13 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +13 -0
- package/dist/lib.js.map +1 -0
- package/dist/project.d.ts +33 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +104 -0
- package/dist/project.js.map +1 -0
- package/dist/skeletons.d.ts +16 -0
- package/dist/skeletons.d.ts.map +1 -0
- package/dist/skeletons.js +120 -0
- package/dist/skeletons.js.map +1 -0
- package/dist/traceReport.d.ts +75 -0
- package/dist/traceReport.d.ts.map +1 -0
- package/dist/traceReport.js +91 -0
- package/dist/traceReport.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,537 @@
|
|
|
1
|
+
import { RUNTIME_PACKAGE } from "./commandLibrary.js";
|
|
2
|
+
const SOLVERSLIB_PACKAGE = RUNTIME_PACKAGE.solverslib;
|
|
3
|
+
const SOLVERSLIB = {
|
|
4
|
+
imports: [
|
|
5
|
+
"import com.pedropathing.api.Paths;",
|
|
6
|
+
"import com.pedropathing.paths.Path;",
|
|
7
|
+
"import com.seattlesolvers.solverslib.command.Command;",
|
|
8
|
+
"import com.seattlesolvers.solverslib.command.ConditionalCommand;",
|
|
9
|
+
"import com.seattlesolvers.solverslib.command.InstantCommand;",
|
|
10
|
+
"import com.seattlesolvers.solverslib.command.SequentialCommandGroup;",
|
|
11
|
+
"import com.seattlesolvers.solverslib.command.WaitUntilCommand;",
|
|
12
|
+
"import com.seattlesolvers.solverslib.geometry.Pose2d;",
|
|
13
|
+
"import com.seattlesolvers.solverslib.geometry.Rotation2d;",
|
|
14
|
+
"",
|
|
15
|
+
"import org.horizon36596.zenith.Args;",
|
|
16
|
+
`import ${SOLVERSLIB_PACKAGE}.AutoFromFile;`,
|
|
17
|
+
`import ${SOLVERSLIB_PACKAGE}.DeferredPath;`,
|
|
18
|
+
`import ${SOLVERSLIB_PACKAGE}.NamedCommands;`,
|
|
19
|
+
`import ${SOLVERSLIB_PACKAGE}.Parallel;`,
|
|
20
|
+
`import ${SOLVERSLIB_PACKAGE}.PathMarkers;`,
|
|
21
|
+
`import ${SOLVERSLIB_PACKAGE}.Poses;`,
|
|
22
|
+
`import ${SOLVERSLIB_PACKAGE}.RobotTimeout;`,
|
|
23
|
+
`import ${SOLVERSLIB_PACKAGE}.WaitRobotTime;`,
|
|
24
|
+
],
|
|
25
|
+
poseType: "Pose2d",
|
|
26
|
+
newPose: "new Pose2d(xIn, yIn, new Rotation2d(headingRad))",
|
|
27
|
+
toPedro: (pose) => `Poses.toPedro(${pose})`,
|
|
28
|
+
waitUntil: (condition) => `new WaitUntilCommand(${condition})`,
|
|
29
|
+
sequenceClass: "SequentialCommandGroup",
|
|
30
|
+
emptyArm: "new InstantCommand()",
|
|
31
|
+
branch: (thenArm, elseArm, condition) => `new ConditionalCommand(${thenArm}, ${elseArm}, ${condition})`,
|
|
32
|
+
};
|
|
33
|
+
const IVY_PACKAGE = RUNTIME_PACKAGE.ivy;
|
|
34
|
+
const IVY = {
|
|
35
|
+
imports: [
|
|
36
|
+
"import com.pedropathing.api.Paths;",
|
|
37
|
+
"import com.pedropathing.ivy.Command;",
|
|
38
|
+
"import com.pedropathing.ivy.commands.Commands;",
|
|
39
|
+
"import com.pedropathing.math.Pose;",
|
|
40
|
+
"import com.pedropathing.paths.Path;",
|
|
41
|
+
"",
|
|
42
|
+
"import org.horizon36596.zenith.Args;",
|
|
43
|
+
`import ${IVY_PACKAGE}.AutoFromFile;`,
|
|
44
|
+
`import ${IVY_PACKAGE}.Branch;`,
|
|
45
|
+
`import ${IVY_PACKAGE}.DeferredPath;`,
|
|
46
|
+
`import ${IVY_PACKAGE}.NamedCommands;`,
|
|
47
|
+
`import ${IVY_PACKAGE}.Parallel;`,
|
|
48
|
+
`import ${IVY_PACKAGE}.PathMarkers;`,
|
|
49
|
+
`import ${IVY_PACKAGE}.RobotTimeout;`,
|
|
50
|
+
`import ${IVY_PACKAGE}.Sequence;`,
|
|
51
|
+
`import ${IVY_PACKAGE}.WaitRobotTime;`,
|
|
52
|
+
],
|
|
53
|
+
poseType: "Pose",
|
|
54
|
+
newPose: "new Pose(xIn, yIn, headingRad)",
|
|
55
|
+
toPedro: (pose) => pose,
|
|
56
|
+
waitUntil: (condition) => `Commands.waitUntil(${condition})`,
|
|
57
|
+
sequenceClass: "Sequence",
|
|
58
|
+
// Never Command.NOOP, which never finishes.
|
|
59
|
+
emptyArm: "Commands.instant(() -> { })",
|
|
60
|
+
branch: (thenArm, elseArm, condition) => `Branch.of(${condition}, ${thenArm}, ${elseArm})`,
|
|
61
|
+
};
|
|
62
|
+
const DIALECTS = { solverslib: SOLVERSLIB, ivy: IVY };
|
|
63
|
+
const INDENT = " ";
|
|
64
|
+
/** `first-auto` -> `FirstAuto`; the class is `<Pascal>Generated`. */
|
|
65
|
+
export function pascalCase(name) {
|
|
66
|
+
return name
|
|
67
|
+
.split(/[^a-zA-Z0-9]+/)
|
|
68
|
+
.filter((part) => part.length > 0)
|
|
69
|
+
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
70
|
+
.join("");
|
|
71
|
+
}
|
|
72
|
+
/** `first-auto` -> `firstAuto`, for a private helper method name. */
|
|
73
|
+
function camelCase(name) {
|
|
74
|
+
const pascal = pascalCase(name);
|
|
75
|
+
return pascal.length === 0 ? "step" : pascal.charAt(0).toLowerCase() + pascal.slice(1);
|
|
76
|
+
}
|
|
77
|
+
/** A Java double literal: always carries a decimal point, four places, no trailing noise. */
|
|
78
|
+
function num(value) {
|
|
79
|
+
const rounded = Number(value.toFixed(4));
|
|
80
|
+
const text = (rounded === 0 ? 0 : rounded).toString();
|
|
81
|
+
return text.includes(".") || text.includes("e") ? text : `${text}.0`;
|
|
82
|
+
}
|
|
83
|
+
function javaString(value) {
|
|
84
|
+
return JSON.stringify(value);
|
|
85
|
+
}
|
|
86
|
+
function poseExpr(pose, comment) {
|
|
87
|
+
const base = `alliance(pose(${num(pose.xIn)}, ${num(pose.yIn)}, ${num(pose.headingRad)}))`;
|
|
88
|
+
return comment === undefined ? base : `${base} /* ${comment} */`;
|
|
89
|
+
}
|
|
90
|
+
function argsExpr(args) {
|
|
91
|
+
const entries = Object.entries(args ?? {});
|
|
92
|
+
// Args.of, not Map.of: Map.of is Android API 30 and a Control Hub runs API 24.
|
|
93
|
+
if (entries.length === 0)
|
|
94
|
+
return "Args.of()";
|
|
95
|
+
const parts = entries.map(([key, value]) => {
|
|
96
|
+
const javaValue = typeof value === "string" ? javaString(value) : typeof value === "boolean" ? String(value) : num(value);
|
|
97
|
+
return `${javaString(key)}, ${javaValue}`;
|
|
98
|
+
});
|
|
99
|
+
return `Args.of(${parts.join(", ")})`;
|
|
100
|
+
}
|
|
101
|
+
function commandCallExpr(call) {
|
|
102
|
+
return `NamedCommands.build(${javaString(call.name)}, ${argsExpr(call.args)}, this)`;
|
|
103
|
+
}
|
|
104
|
+
/** The raw `from` a segment names, for a short comment: a waypoint ref, "current", or nothing. */
|
|
105
|
+
function fromComment(segment) {
|
|
106
|
+
if (segment.from === "current")
|
|
107
|
+
return "current";
|
|
108
|
+
if (typeof segment.from === "object" && "ref" in segment.from)
|
|
109
|
+
return `ref: ${segment.from.ref}`;
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
function toComment(segment) {
|
|
113
|
+
if (typeof segment.to === "object" && "ref" in segment.to)
|
|
114
|
+
return `ref: ${segment.to.ref}`;
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* One segment's bare curve, no heading yet: `Paths.line(...)` or `Paths.curve(...)`. `liveFrom` names
|
|
119
|
+
* the variable holding the robot's pose when the step starts, for a first segment from `"current"`.
|
|
120
|
+
*/
|
|
121
|
+
function curveExpr(dialect, segment, fromPose, toPose, liveFrom) {
|
|
122
|
+
const from = dialect.toPedro(liveFrom ?? poseExpr(fromPose, fromComment(segment)));
|
|
123
|
+
const to = dialect.toPedro(poseExpr(toPose, toComment(segment)));
|
|
124
|
+
if (segment.kind === "line")
|
|
125
|
+
return `Paths.line(${from}, ${to})`;
|
|
126
|
+
const controls = segment.control.map((point) => dialect.toPedro(poseExpr({ xIn: point.xIn, yIn: point.yIn, headingRad: point.headingRad ?? 0 })));
|
|
127
|
+
return `Paths.curve(${[from, ...controls, to].join(", ")})`;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* A heading the file wrote, in the running alliance's frame: `AutoFromFile.headingRad`, which mirrors
|
|
131
|
+
* it through the same `alliance(...)` the poses go through, so a file run as the other alliance faces
|
|
132
|
+
* the other alliance's way.
|
|
133
|
+
*/
|
|
134
|
+
const headingExpr = (rad) => `headingRad(${num(rad)})`;
|
|
135
|
+
/**
|
|
136
|
+
* A heading reached by turning `turn` from `rad`, in the running alliance's frame: the start through
|
|
137
|
+
* `headingRad`, the turn through `turnRad`, which keeps its size and reverses it under a reflection.
|
|
138
|
+
* `turnExpr` is Java, so a range can turn by an expression in t.
|
|
139
|
+
*/
|
|
140
|
+
const turnedExpr = (rad, turnExpr) => turnExpr === null ? headingExpr(rad) : `${headingExpr(rad)} + turnRad(${turnExpr})`;
|
|
141
|
+
/** A point a `facePoint` heading faces, through `alliance(...)` like every other pose. */
|
|
142
|
+
const pointExpr = (dialect, xIn, yIn) => dialect.toPedro(poseExpr({ xIn, yIn, headingRad: 0 }));
|
|
143
|
+
/** Pedro's own interpolator for one range's mode, or a range-local turn for `linear`. */
|
|
144
|
+
function rangeInterpolatorExpr(dialect, range, from, to, localFrom, localTo) {
|
|
145
|
+
const interpolator = "com.pedropathing.paths.interpolator.Interpolator";
|
|
146
|
+
const inner = range.heading;
|
|
147
|
+
switch (inner.mode) {
|
|
148
|
+
case "tangent":
|
|
149
|
+
return `${interpolator}.tangent`;
|
|
150
|
+
case "tangentReversed":
|
|
151
|
+
return `${interpolator}.tangent.reverse()`;
|
|
152
|
+
case "constant":
|
|
153
|
+
return `${interpolator}.constant(${headingExpr(inner.headingRad)})`;
|
|
154
|
+
case "facePoint":
|
|
155
|
+
return `${interpolator}.facingPoint(${pointExpr(dialect, inner.xIn, inner.yIn)})`;
|
|
156
|
+
case "linear": {
|
|
157
|
+
// Pedro's Interpolator.linear runs over the whole of t, so a range turns over its own stretch
|
|
158
|
+
// with a small lambda, the short way, as PathBuilder.rangeInterpolator does.
|
|
159
|
+
const span = range.endT - range.startT;
|
|
160
|
+
const raw = inner.toRad - inner.fromRad;
|
|
161
|
+
const wrapped = ((((raw + Math.PI) % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI)) - Math.PI;
|
|
162
|
+
const at = (fraction) => inner.fromRad + wrapped * (span <= 0 ? 1 : (fraction - range.startT) / span);
|
|
163
|
+
const start = at(from);
|
|
164
|
+
const delta = at(to) - start;
|
|
165
|
+
const localSpan = localTo - localFrom;
|
|
166
|
+
const progress = `Math.min(1, Math.max(0, (t - ${num(localFrom)}) / ${num(localSpan > 0 ? localSpan : 1)}))`;
|
|
167
|
+
const already = start - inner.fromRad;
|
|
168
|
+
const turn = `${Number(num(already)) === 0 ? "" : `${num(already)} + `}${num(delta)} * ${progress}`;
|
|
169
|
+
return `(curve, t) -> ${turnedExpr(inner.fromRad, turn)}`;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* A `piecewise` heading on one segment, clipped to it the way `PathBuilder.piecewiseFor` clips it.
|
|
175
|
+
* The segment's own t is taken as its arc-length fraction here, which is exact for a line and a close
|
|
176
|
+
* reading for a curve (the runtime maps through its chord table).
|
|
177
|
+
*/
|
|
178
|
+
function piecewiseExpr(dialect, heading, startFraction, endFraction) {
|
|
179
|
+
const span = endFraction - startFraction;
|
|
180
|
+
const pieces = [];
|
|
181
|
+
let previous = 0;
|
|
182
|
+
heading.ranges.forEach((range, index) => {
|
|
183
|
+
const from = Math.max(range.startT, startFraction);
|
|
184
|
+
const to = Math.min(range.endT, endFraction);
|
|
185
|
+
if (to <= from && !(span <= 0 && index === heading.ranges.length - 1))
|
|
186
|
+
return;
|
|
187
|
+
const localFrom = span <= 0 ? 0 : (from - startFraction) / span;
|
|
188
|
+
const localTo = span <= 0 ? 1 : (to - startFraction) / span;
|
|
189
|
+
if (localTo <= previous)
|
|
190
|
+
return;
|
|
191
|
+
pieces.push({ end: localTo, expr: rangeInterpolatorExpr(dialect, range, from, to, localFrom, localTo) });
|
|
192
|
+
previous = localTo;
|
|
193
|
+
});
|
|
194
|
+
const last = pieces[pieces.length - 1];
|
|
195
|
+
if (last !== undefined)
|
|
196
|
+
last.end = 1;
|
|
197
|
+
const untils = pieces.map((piece) => `.until(${num(piece.end)}, ${piece.expr})`).join("");
|
|
198
|
+
return `com.pedropathing.paths.interpolator.Interpolator.piecewise()${untils}`;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Attaches the step's heading mode to one segment's curve. Mirrors `PedroPaths.withHeading`, with the
|
|
202
|
+
* heading in the running alliance's frame as `AllianceFrame` puts it there: every heading through
|
|
203
|
+
* `headingRad`, every turn through `turnRad`, every point through `alliance(...)`.
|
|
204
|
+
*/
|
|
205
|
+
function withHeadingExpr(dialect, curve, heading, startFraction = 0, endFraction = 1) {
|
|
206
|
+
if (heading === undefined)
|
|
207
|
+
return curve;
|
|
208
|
+
switch (heading.mode) {
|
|
209
|
+
case "piecewise":
|
|
210
|
+
return `${curve}.heading(${piecewiseExpr(dialect, heading, startFraction, endFraction)})`;
|
|
211
|
+
case "tangent":
|
|
212
|
+
return `${curve}.tangent()`;
|
|
213
|
+
case "tangentReversed":
|
|
214
|
+
return `${curve}.reverseTangent()`;
|
|
215
|
+
case "constant":
|
|
216
|
+
return `${curve}.constant(${headingExpr(heading.headingRad)})`;
|
|
217
|
+
case "linear": {
|
|
218
|
+
// One sweep across the whole step, cut into the share this segment owns by arc length, as
|
|
219
|
+
// PedroPaths.withHeading cuts it, so a two-segment path turns half way by the join. The sweep
|
|
220
|
+
// is a turn, so the other alliance turns it the mirrored way.
|
|
221
|
+
const sweep = heading.toRad - heading.fromRad;
|
|
222
|
+
const turn = (fraction) => {
|
|
223
|
+
const turned = num(sweep * fraction);
|
|
224
|
+
return Number(turned) === 0 ? null : turned;
|
|
225
|
+
};
|
|
226
|
+
return `${curve}.linear(${turnedExpr(heading.fromRad, turn(startFraction))}, ${turnedExpr(heading.fromRad, turn(endFraction))})`;
|
|
227
|
+
}
|
|
228
|
+
case "facePoint":
|
|
229
|
+
return `${curve}.facingPoint(${pointExpr(dialect, heading.xIn, heading.yIn)})`;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* A unique, readable method name for a step, so two steps that share an id never collide. Prefixed
|
|
234
|
+
* with `step` so a step called `drive`, `follower` or `run` cannot shadow a method the class inherits
|
|
235
|
+
* from `AutoFromFile`, its `AutoContext` or the SDK's OpMode, which would not compile.
|
|
236
|
+
*/
|
|
237
|
+
function methodName(ctx, id) {
|
|
238
|
+
return uniqueName(ctx, `step${pascalCase(id) || "Unnamed"}`);
|
|
239
|
+
}
|
|
240
|
+
/** `base`, or `base` with the first free number after it, reserved so no later method takes it. */
|
|
241
|
+
function uniqueName(ctx, base) {
|
|
242
|
+
let candidate = base;
|
|
243
|
+
let suffix = 2;
|
|
244
|
+
while (ctx.usedNames.has(candidate)) {
|
|
245
|
+
candidate = `${base}${String(suffix)}`;
|
|
246
|
+
suffix += 1;
|
|
247
|
+
}
|
|
248
|
+
ctx.usedNames.add(candidate);
|
|
249
|
+
return candidate;
|
|
250
|
+
}
|
|
251
|
+
function pushLines(ctx, indent, text) {
|
|
252
|
+
ctx.lines.push(`${indent}${text}`);
|
|
253
|
+
}
|
|
254
|
+
/** True when the step's first segment starts from `"current"`, which the runtime builds when the step starts. */
|
|
255
|
+
function startsFromCurrent(planStep) {
|
|
256
|
+
return planStep.kind === "path" && planStep.step.segments[0]?.from === "current";
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* The body of a path step that starts from `"current"`: `DeferredPath.of`, the runtime's own call for
|
|
260
|
+
* such a step, which builds the path from the live pose when the step starts by calling `buildName`.
|
|
261
|
+
* The marker commands are built here, at init, as the runtime builds them, for their requirements.
|
|
262
|
+
*/
|
|
263
|
+
function generateDeferredPathBody(ctx, planStep, buildName, indent) {
|
|
264
|
+
const step = planStep.step;
|
|
265
|
+
const markers = (step.markers ?? []).map((marker) => `, ${commandCallExpr(marker.command)}`).join("");
|
|
266
|
+
pushLines(ctx, indent, `// Starts from "current": built when the step starts, from where the robot is then.`);
|
|
267
|
+
pushLines(ctx, indent, `return DeferredPath.of(${javaString(planStep.id)}, this, from -> ${buildName}(from)${markers});`);
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* True when some number in a path step's Java comes from the step's length, which for a step from
|
|
271
|
+
* `"current"` is the planned one here and the live one on the robot: a marker anywhere but the start,
|
|
272
|
+
* or a heading shared out between segments by arc length.
|
|
273
|
+
*/
|
|
274
|
+
function dependsOnLength(step) {
|
|
275
|
+
// Progress along the path is measured against the segment lengths, so only a marker at its very
|
|
276
|
+
// start fires in the same place whatever the length.
|
|
277
|
+
const markers = (step.markers ?? []).some((marker) => !(("t" in marker.at && marker.at.t === 0) || ("distanceIn" in marker.at && marker.at.distanceIn === 0)));
|
|
278
|
+
const heading = step.heading?.mode === "piecewise" || (step.heading?.mode === "linear" && step.segments.length > 1);
|
|
279
|
+
return markers || heading;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Builds the `Command` for a path step's body, as the statements of a private helper method.
|
|
283
|
+
* `liveFrom` is set for a step from `"current"`: the name of the parameter holding the live pose.
|
|
284
|
+
*/
|
|
285
|
+
function generatePathBody(ctx, planStep, indent, liveFrom) {
|
|
286
|
+
const step = planStep.step;
|
|
287
|
+
const segments = planStep.segments ?? [];
|
|
288
|
+
const curveVars = [];
|
|
289
|
+
if (liveFrom !== undefined && dependsOnLength(step)) {
|
|
290
|
+
pushLines(ctx, indent, "// The lengths, marker distances and heading splits below are the planned path's; the runtime measures the live one.");
|
|
291
|
+
}
|
|
292
|
+
segments.forEach((segment, index) => {
|
|
293
|
+
const raw = step.segments[index];
|
|
294
|
+
if (raw === undefined) {
|
|
295
|
+
throw new Error(`codegen: step "${planStep.id}" segment ${String(index)} has no source segment; plan() and the file disagree on segment count.`);
|
|
296
|
+
}
|
|
297
|
+
const curve = curveExpr(ctx.dialect, raw, segment.fromPose, segment.toPose, index === 0 ? liveFrom : undefined);
|
|
298
|
+
const breaks = planStep.geometry?.breaks;
|
|
299
|
+
const total = planStep.geometry?.lengthIn ?? 0;
|
|
300
|
+
const startFraction = breaks === undefined || total === 0 ? 0 : (breaks[index] ?? 0) / total;
|
|
301
|
+
const endFraction = breaks === undefined || total === 0 ? 1 : (breaks[index + 1] ?? total) / total;
|
|
302
|
+
const withHeading = withHeadingExpr(ctx.dialect, curve, step.heading, startFraction, endFraction);
|
|
303
|
+
const varName = `seg${String(index)}`;
|
|
304
|
+
pushLines(ctx, indent, `Path ${varName} = ${withHeading};`);
|
|
305
|
+
curveVars.push(varName);
|
|
306
|
+
});
|
|
307
|
+
const pathExpr = curveVars.length === 1 ? curveVars[0] : `Paths.path(${curveVars.join(", ")})`;
|
|
308
|
+
pushLines(ctx, indent, `Path path = ${pathExpr};`);
|
|
309
|
+
// No speedFraction in the file means the robot's own default, exactly as AutoBuilder reads it.
|
|
310
|
+
const speed = step.speedFraction === undefined ? "defaultSpeedFraction()" : num(step.speedFraction);
|
|
311
|
+
pushLines(ctx, indent, `Command drive = followPath(path, ${speed});`);
|
|
312
|
+
if (step.endCondition !== undefined) {
|
|
313
|
+
const until = ctx.dialect.waitUntil(`NamedCommands.condition(${javaString(step.endCondition.condition)})`);
|
|
314
|
+
pushLines(ctx, indent, `drive = Parallel.race(drive, ${until});`);
|
|
315
|
+
}
|
|
316
|
+
const markers = step.markers ?? [];
|
|
317
|
+
if (markers.length === 0) {
|
|
318
|
+
pushLines(ctx, indent, "return drive;");
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
const totalLengthIn = planStep.lengthIn;
|
|
322
|
+
const breaks = planStep.geometry?.breaks ?? [0, totalLengthIn];
|
|
323
|
+
const segmentLengths = breaks.slice(1).map((end, index) => end - (breaks[index] ?? 0));
|
|
324
|
+
pushLines(ctx, indent, `double[] segmentLengthsIn = { ${segmentLengths.map(num).join(", ")} };`);
|
|
325
|
+
pushLines(ctx, indent, "java.util.List<PathMarkers.Marker> markers = new java.util.ArrayList<PathMarkers.Marker>();");
|
|
326
|
+
for (const marker of markers) {
|
|
327
|
+
const distanceIn = "t" in marker.at
|
|
328
|
+
? marker.at.t * totalLengthIn
|
|
329
|
+
: "distanceIn" in marker.at
|
|
330
|
+
? marker.at.distanceIn
|
|
331
|
+
: totalLengthIn - marker.at.distanceFromEndIn;
|
|
332
|
+
pushLines(ctx, indent, `markers.add(new PathMarkers.Marker(${num(distanceIn)}, ${commandCallExpr(marker.command)}));`);
|
|
333
|
+
}
|
|
334
|
+
pushLines(ctx, indent, "return PathMarkers.wrap(drive, segmentLengthsIn, markers, this);");
|
|
335
|
+
}
|
|
336
|
+
function generateCommandBody(ctx, planStep, indent) {
|
|
337
|
+
const step = planStep.step;
|
|
338
|
+
pushLines(ctx, indent, `return ${commandCallExpr({ name: step.name, args: step.args })};`);
|
|
339
|
+
}
|
|
340
|
+
function generateWaitBody(ctx, planStep, indent) {
|
|
341
|
+
const step = planStep.step;
|
|
342
|
+
if (step.until !== undefined) {
|
|
343
|
+
pushLines(ctx, indent, `return ${ctx.dialect.waitUntil(`NamedCommands.condition(${javaString(step.until)})`)};`);
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
pushLines(ctx, indent, `return new WaitRobotTime(${String(Math.round((step.seconds ?? 0) * 1000))}, this);`);
|
|
347
|
+
}
|
|
348
|
+
function generateParallelBody(ctx, planStep, indent) {
|
|
349
|
+
const step = planStep.step;
|
|
350
|
+
const children = planStep.children ?? [];
|
|
351
|
+
pushLines(ctx, indent, "java.util.List<Command> members = new java.util.ArrayList<Command>();");
|
|
352
|
+
let deadlineVar = null;
|
|
353
|
+
for (const child of children) {
|
|
354
|
+
const name = stepCall(ctx, child);
|
|
355
|
+
const varName = `m_${camelCase(child.id)}`;
|
|
356
|
+
const memberVar = `member_${camelCase(child.id)}`;
|
|
357
|
+
pushLines(ctx, indent, `Command ${varName} = ${name}();`);
|
|
358
|
+
// The wrapped command is hoisted into its own local exactly once, then both added to members
|
|
359
|
+
// and (when this is the deadline child) reused as `deadline` — the same object, not a second
|
|
360
|
+
// `step(...)` call building a fresh wrapper WPILib would reject as "added to more than one
|
|
361
|
+
// CommandGroup" (finding 7).
|
|
362
|
+
pushLines(ctx, indent, `Command ${memberVar} = step(${javaString(child.id)}, ${varName});`);
|
|
363
|
+
pushLines(ctx, indent, `members.add(${memberVar});`);
|
|
364
|
+
if (child.id === step.deadline)
|
|
365
|
+
deadlineVar = memberVar;
|
|
366
|
+
}
|
|
367
|
+
if (step.mode === "all") {
|
|
368
|
+
pushLines(ctx, indent, "return Parallel.all(members.toArray(new Command[0]));");
|
|
369
|
+
}
|
|
370
|
+
else if (step.mode === "race") {
|
|
371
|
+
pushLines(ctx, indent, "return Parallel.race(members.toArray(new Command[0]));");
|
|
372
|
+
}
|
|
373
|
+
else {
|
|
374
|
+
if (deadlineVar === null) {
|
|
375
|
+
// Silently falling back to members.get(0) would run the group against a deadline the auto
|
|
376
|
+
// file never named, disagreeing with whatever packages/core's estimator assumed (finding 6);
|
|
377
|
+
// failing loudly here, naming the step, is the only sound choice codegen can make on its own.
|
|
378
|
+
const names = children.map((child) => child.id).join(", ") || "(no children)";
|
|
379
|
+
throw new Error(`codegen: parallel step ${javaString(planStep.id)} has mode "deadline" but its deadline ` +
|
|
380
|
+
`(${JSON.stringify(step.deadline ?? null)}) names no direct child; it must be one of: ${names}.`);
|
|
381
|
+
}
|
|
382
|
+
pushLines(ctx, indent, `Command deadline = ${deadlineVar};`);
|
|
383
|
+
pushLines(ctx, indent, "members.remove(deadline);");
|
|
384
|
+
pushLines(ctx, indent, "return Parallel.deadline(deadline, members.toArray(new Command[0]));");
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* A `sequence` step is a `SequentialCommandGroup` (on Ivy, the runtime's `Sequence`) of its members, each wrapped in `step(...)` like
|
|
389
|
+
* the top level's, so the trace names every member and a timeout on a member still applies.
|
|
390
|
+
*/
|
|
391
|
+
function generateSequenceBody(ctx, planStep, indent) {
|
|
392
|
+
const names = (planStep.children ?? []).map((child) => {
|
|
393
|
+
const name = stepCall(ctx, child);
|
|
394
|
+
return `step(${javaString(child.id)}, ${name}())`;
|
|
395
|
+
});
|
|
396
|
+
pushLines(ctx, indent, `return new ${ctx.dialect.sequenceClass}(${names.join(", ")});`);
|
|
397
|
+
}
|
|
398
|
+
function generateBranchBody(ctx, planStep, indent) {
|
|
399
|
+
const step = planStep.step;
|
|
400
|
+
const children = planStep.children ?? [];
|
|
401
|
+
// `resolve()` lays a branch's children out as [...then, ...else] in file order
|
|
402
|
+
// (packages/core/src/resolve.ts), so a slice by count is exact where matching by id would miss a step with no
|
|
403
|
+
// explicit id (resolve gives those an auto id that does not appear in the raw file at all).
|
|
404
|
+
const thenSteps = children.slice(0, step.then.length);
|
|
405
|
+
const elseSteps = children.slice(step.then.length, step.then.length + (step.else?.length ?? 0));
|
|
406
|
+
const sequence = (label, steps) => {
|
|
407
|
+
if (steps.length === 0)
|
|
408
|
+
return ctx.dialect.emptyArm;
|
|
409
|
+
const names = steps.map((child) => {
|
|
410
|
+
const name = stepCall(ctx, child);
|
|
411
|
+
return `step(${javaString(child.id)}, ${name}())`;
|
|
412
|
+
});
|
|
413
|
+
pushLines(ctx, indent, `Command ${label} = new ${ctx.dialect.sequenceClass}(${names.join(", ")});`);
|
|
414
|
+
return label;
|
|
415
|
+
};
|
|
416
|
+
const thenVar = sequence("thenBranch", thenSteps);
|
|
417
|
+
const elseVar = step.else === undefined ? ctx.dialect.emptyArm : sequence("elseBranch", elseSteps);
|
|
418
|
+
pushLines(ctx, indent, `return ${ctx.dialect.branch(thenVar, elseVar, `NamedCommands.condition(${javaString(step.condition)})`)};`);
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Generates one step's private helper method (recursing into `sequence`, `parallel` and `branch`
|
|
422
|
+
* children first).
|
|
423
|
+
*/
|
|
424
|
+
function generateStepMethod(ctx, planStep) {
|
|
425
|
+
const name = methodName(ctx, planStep.id);
|
|
426
|
+
const body = [];
|
|
427
|
+
const inner = { ...ctx, lines: body };
|
|
428
|
+
const indent = INDENT + INDENT;
|
|
429
|
+
// A step from "current" also gets the method that builds its path, written after its own.
|
|
430
|
+
let buildMethod;
|
|
431
|
+
switch (planStep.kind) {
|
|
432
|
+
case "path":
|
|
433
|
+
if (startsFromCurrent(planStep)) {
|
|
434
|
+
const buildName = uniqueName(ctx, `${name}From`);
|
|
435
|
+
ctx.deferred.used = true;
|
|
436
|
+
generateDeferredPathBody(inner, planStep, buildName, indent);
|
|
437
|
+
const buildBody = [];
|
|
438
|
+
generatePathBody({ ...inner, lines: buildBody }, planStep, indent, "from");
|
|
439
|
+
buildMethod = [
|
|
440
|
+
`${INDENT}private Command ${buildName}(${ctx.dialect.poseType} from) {`,
|
|
441
|
+
...buildBody,
|
|
442
|
+
`${INDENT}}`,
|
|
443
|
+
].join("\n");
|
|
444
|
+
}
|
|
445
|
+
else {
|
|
446
|
+
generatePathBody(inner, planStep, indent);
|
|
447
|
+
}
|
|
448
|
+
break;
|
|
449
|
+
case "command":
|
|
450
|
+
generateCommandBody(inner, planStep, indent);
|
|
451
|
+
break;
|
|
452
|
+
case "wait":
|
|
453
|
+
generateWaitBody(inner, planStep, indent);
|
|
454
|
+
break;
|
|
455
|
+
case "sequence":
|
|
456
|
+
generateSequenceBody(inner, planStep, indent);
|
|
457
|
+
break;
|
|
458
|
+
case "parallel":
|
|
459
|
+
generateParallelBody(inner, planStep, indent);
|
|
460
|
+
break;
|
|
461
|
+
case "branch":
|
|
462
|
+
generateBranchBody(inner, planStep, indent);
|
|
463
|
+
break;
|
|
464
|
+
}
|
|
465
|
+
const method = [
|
|
466
|
+
`${INDENT}private Command ${name}() {`,
|
|
467
|
+
...body,
|
|
468
|
+
`${INDENT}}`,
|
|
469
|
+
];
|
|
470
|
+
ctx.helpers.push(method.join("\n"));
|
|
471
|
+
if (buildMethod !== undefined)
|
|
472
|
+
ctx.helpers.push(buildMethod);
|
|
473
|
+
return name;
|
|
474
|
+
}
|
|
475
|
+
/** Generates a step's method, wraps it in `RobotTimeout` when it has a `timeoutS`, and returns the
|
|
476
|
+
* name of the method to call for its finished command (with or without the timeout wrapper). */
|
|
477
|
+
function stepCall(ctx, planStep) {
|
|
478
|
+
const innerName = generateStepMethod(ctx, planStep);
|
|
479
|
+
const timeoutS = planStep.step.timeoutS;
|
|
480
|
+
if (timeoutS === undefined)
|
|
481
|
+
return innerName;
|
|
482
|
+
const wrapperName = uniqueName(ctx, `${innerName}WithTimeout`);
|
|
483
|
+
ctx.helpers.push([
|
|
484
|
+
`${INDENT}private Command ${wrapperName}() {`,
|
|
485
|
+
`${INDENT}${INDENT}return RobotTimeout.of(${innerName}(), ${num(timeoutS)}, this);`,
|
|
486
|
+
`${INDENT}}`,
|
|
487
|
+
].join("\n"));
|
|
488
|
+
return wrapperName;
|
|
489
|
+
}
|
|
490
|
+
/** Renders the full generated class. Pure: every input is the plan's own numbers. */
|
|
491
|
+
export function generateAutoJava(plan, options) {
|
|
492
|
+
const className = `${pascalCase(plan.auto.name)}Generated`;
|
|
493
|
+
const dialect = DIALECTS[options.commandLibrary];
|
|
494
|
+
const ctx = { lines: [], helpers: [], usedNames: new Set(), dialect, deferred: { used: false } };
|
|
495
|
+
const topCalls = plan.steps.map((planStep) => {
|
|
496
|
+
const called = stepCall(ctx, planStep);
|
|
497
|
+
return `${INDENT}${INDENT}${INDENT}step(${javaString(planStep.id)}, ${called}())`;
|
|
498
|
+
});
|
|
499
|
+
const startPoseLine = `${INDENT}${INDENT}return ${poseExpr(plan.startPose)};`;
|
|
500
|
+
const lines = [
|
|
501
|
+
`/** GENERATED by zenith from ${options.sourcePath} (sha ${options.shaHex}). Do not edit; edit the file. */`,
|
|
502
|
+
"",
|
|
503
|
+
`package ${options.packageName};`,
|
|
504
|
+
"",
|
|
505
|
+
...dialect.imports.filter((line) => ctx.deferred.used || !line.endsWith(".DeferredPath;")),
|
|
506
|
+
"",
|
|
507
|
+
"/**",
|
|
508
|
+
` * GENERATED by zenith from ${options.sourcePath} (sha ${options.shaHex}). Do not edit; edit the file.`,
|
|
509
|
+
" *",
|
|
510
|
+
" * Reads as the plan: one private method per step, called in file order from buildRoutine().",
|
|
511
|
+
" * Abstract, and never referenced by an {@code @Autonomous} OpMode; {@code zenith deploy} writes the",
|
|
512
|
+
" * class that actually runs on the robot.",
|
|
513
|
+
" */",
|
|
514
|
+
`public abstract class ${className} extends AutoFromFile {`,
|
|
515
|
+
"",
|
|
516
|
+
`${INDENT}@Override`,
|
|
517
|
+
`${INDENT}protected ${dialect.poseType} startPose() {`,
|
|
518
|
+
startPoseLine,
|
|
519
|
+
`${INDENT}}`,
|
|
520
|
+
"",
|
|
521
|
+
`${INDENT}@Override`,
|
|
522
|
+
`${INDENT}protected Command buildRoutine() {`,
|
|
523
|
+
`${INDENT}${INDENT}return new ${dialect.sequenceClass}(`,
|
|
524
|
+
topCalls.join(",\n"),
|
|
525
|
+
`${INDENT}${INDENT});`,
|
|
526
|
+
`${INDENT}}`,
|
|
527
|
+
"",
|
|
528
|
+
`${INDENT}private static ${dialect.poseType} pose(double xIn, double yIn, double headingRad) {`,
|
|
529
|
+
`${INDENT}${INDENT}return ${dialect.newPose};`,
|
|
530
|
+
`${INDENT}}`,
|
|
531
|
+
"",
|
|
532
|
+
ctx.helpers.join("\n\n"),
|
|
533
|
+
"}",
|
|
534
|
+
];
|
|
535
|
+
return `${lines.join("\n")}\n`;
|
|
536
|
+
}
|
|
537
|
+
//# sourceMappingURL=javaCodegen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"javaCodegen.js","sourceRoot":"","sources":["../src/javaCodegen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** A sim command that cannot be launched, with a message written for the person running it. */
|
|
2
|
+
export declare class LauncherError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
/** What a missing tool is, so the message can say what to install. */
|
|
6
|
+
export declare class MissingToolError extends LauncherError {
|
|
7
|
+
readonly tool: "java" | "gradle" | "command";
|
|
8
|
+
constructor(tool: "java" | "gradle" | "command", message: string);
|
|
9
|
+
}
|
|
10
|
+
export interface SimLaunch {
|
|
11
|
+
/** The executable, absolute where Zenith resolved it. */
|
|
12
|
+
file: string;
|
|
13
|
+
args: string[];
|
|
14
|
+
/** The command as the team wrote it, with `{auto}` filled in, for a progress header. */
|
|
15
|
+
display: string;
|
|
16
|
+
}
|
|
17
|
+
/** The host facts the launcher depends on, so tests can play Windows on Linux and the reverse. */
|
|
18
|
+
export interface Platform {
|
|
19
|
+
platform: NodeJS.Platform;
|
|
20
|
+
env: NodeJS.ProcessEnv;
|
|
21
|
+
exists: (path: string) => boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare const hostPlatform: () => Platform;
|
|
24
|
+
/** The `java` executable Gradle would use: `JAVA_HOME` first, then the `PATH`. */
|
|
25
|
+
export declare function findJava(host?: Platform): string;
|
|
26
|
+
/**
|
|
27
|
+
* Gradle skips a test task whose inputs have not changed since it last passed, and then no trace is
|
|
28
|
+
* written: running the sim again on an unchanged auto would only ever report a stale trace. Gradle's
|
|
29
|
+
* built-in `--rerun` task option (Gradle 7.6 and later) runs the task regardless. It is added last,
|
|
30
|
+
* where it binds to the command's last task, unless the command already forces a rerun itself.
|
|
31
|
+
*/
|
|
32
|
+
export declare function withRerun(args: readonly string[]): string[];
|
|
33
|
+
/**
|
|
34
|
+
* Turns the command's argv into something `spawn` can start with `shell: false` on this platform,
|
|
35
|
+
* and fails with a plain-language `LauncherError` when the tool it needs is missing or the command
|
|
36
|
+
* cannot be started safely.
|
|
37
|
+
*/
|
|
38
|
+
export declare function resolveLauncher(argv: readonly string[], root: string, host?: Platform): SimLaunch;
|
|
39
|
+
//# sourceMappingURL=launcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAoBA,+FAA+F;AAC/F,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAED,sEAAsE;AACtE,qBAAa,gBAAiB,SAAQ,aAAa;IAE/C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;gBAAnC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,EAC5C,OAAO,EAAE,MAAM;CAKlB;AAED,MAAM,WAAW,SAAS;IACxB,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,wFAAwF;IACxF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,kGAAkG;AAClG,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACnC;AAED,eAAO,MAAM,YAAY,QAAO,QAAkF,CAAC;AAKnH,kFAAkF;AAClF,wBAAgB,QAAQ,CAAC,IAAI,GAAE,QAAyB,GAAG,MAAM,CAmBhE;AAqBD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,QAAyB,GAAG,SAAS,CAyEjH"}
|