diff --git a/coverage/trt-parametric/rtcp-jog-browser.report.json b/coverage/trt-parametric/rtcp-jog-browser.report.json new file mode 100644 index 0000000..67fa590 --- /dev/null +++ b/coverage/trt-parametric/rtcp-jog-browser.report.json @@ -0,0 +1,657 @@ +{ + "report_id": "trt-rtcp-jog-browser-v1", + "status": "verified", + "machines": [ + { + "coordinates": "XYZAC", + "rows": [ + { + "axis": "a", + "before": { + "joints": [ + 5.466649999999972, + 4.066650000000003, + 0, + 0, + 0 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": 0, + "y_offset": 20, + "z_offset": 10, + "tool_offset": 0 + }, + "tick": 66, + "rendered_tick": 66, + "tool_tip": [ + 0, + 2, + 0 + ] + }, + "moving": { + "joints": [ + 5.466649999999972, + 7.197756186722254, + -3.7831126951749035, + 14.999999999999876, + 0 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": 0, + "y_offset": 20, + "z_offset": 10, + "tool_offset": 0 + }, + "tick": 126, + "rendered_tick": 109, + "tool_tip": [ + 0, + 2, + 0 + ], + "tcp_error": 4.440892098500626e-16 + }, + "stopped": { + "joints": [ + 5.466649999999972, + 7.637011353442125, + -4.178439757165844, + 16.799999999999883, + 0 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": 0, + "y_offset": 20, + "z_offset": 10, + "tool_offset": 0 + }, + "tick": 137, + "rendered_tick": 137, + "tool_tip": [ + 0, + 2, + 0 + ], + "tcp_error": 0 + } + }, + { + "axis": "c", + "before": { + "joints": [ + 5.466649999999972, + 7.637011353442125, + -4.178439757165844, + 16.799999999999883, + 0 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": 0, + "y_offset": 20, + "z_offset": 10, + "tool_offset": 0 + }, + "tick": 137, + "rendered_tick": 137, + "tool_tip": [ + 0, + 2, + 0 + ] + }, + "moving": { + "joints": [ + 5.130732460810536, + 8.035612665739814, + -4.058094925733048, + 16.799999999999883, + 4.499999999999995 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": 0, + "y_offset": 20, + "z_offset": 10, + "tool_offset": 0 + }, + "tick": 162, + "rendered_tick": 162, + "tool_tip": [ + 0, + 2, + 0 + ], + "tcp_error": 4.441434166503682e-16 + }, + "stopped": { + "joints": [ + 4.98738562094063, + 8.187776781292149, + -4.012153870670515, + 16.799999999999883, + 6.30000000000001 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": 0, + "y_offset": 20, + "z_offset": 10, + "tool_offset": 0 + }, + "tick": 173, + "rendered_tick": 173, + "tool_tip": [ + 0, + 2, + 0 + ], + "tcp_error": 0 + } + }, + { + "axis": "a", + "before": { + "joints": [ + 4.98738562094063, + 8.187776781292149, + -4.012153870670515, + 16.799999999999883, + 6.30000000000001 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": 0, + "y_offset": 20, + "z_offset": 10, + "tool_offset": 0 + }, + "tick": 173, + "rendered_tick": 173, + "tool_tip": [ + 0, + 2, + 0 + ] + }, + "moving": { + "joints": [ + 4.98738562094063, + 9.79672537538304, + -5.223740026635218, + 23.099999999999895, + 6.30000000000001 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": 0, + "y_offset": 20, + "z_offset": 10, + "tool_offset": 0 + }, + "tick": 204, + "rendered_tick": 203, + "tool_tip": [ + 0, + 2, + 0 + ], + "tcp_error": 4.163336342344337e-17 + }, + "stopped": { + "joints": [ + 4.98738562094063, + 10.279949305726852, + -5.5367206309661015, + 24.899999999999906, + 6.30000000000001 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": 0, + "y_offset": 20, + "z_offset": 10, + "tool_offset": 0 + }, + "tick": 215, + "rendered_tick": 215, + "tool_tip": [ + 0, + 2, + 0 + ], + "tcp_error": 6.938893903907228e-18 + } + }, + { + "axis": "c", + "before": { + "joints": [ + 4.98738562094063, + 10.279949305726852, + -5.5367206309661015, + 24.899999999999906, + 6.30000000000001 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": 0, + "y_offset": 20, + "z_offset": 10, + "tool_offset": 0 + }, + "tick": 215, + "rendered_tick": 215, + "tool_tip": [ + 0, + 2, + 0 + ] + }, + "moving": { + "joints": [ + 4.607806376235921, + 10.621901380081653, + -5.37799176280733, + 24.899999999999906, + 10.800000000000004 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": 0, + "y_offset": 20, + "z_offset": 10, + "tool_offset": 0 + }, + "tick": 240, + "rendered_tick": 234, + "tool_tip": [ + 0, + 2, + 0 + ], + "tcp_error": 4.446309804673419e-16 + }, + "stopped": { + "joints": [ + 4.447883154027174, + 10.750935773512055, + -5.318095991561005, + 24.899999999999906, + 12.60000000000002 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": 0, + "y_offset": 20, + "z_offset": 10, + "tool_offset": 0 + }, + "tick": 251, + "rendered_tick": 251, + "tool_tip": [ + 0, + 2, + 0 + ], + "tcp_error": 6.938893903907228e-18 + } + } + ] + }, + { + "coordinates": "XYZBC", + "rows": [ + { + "axis": "b", + "before": { + "joints": [ + 4.866649999999986, + 4.266649999999998, + 0, + 0, + 0 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": -20, + "y_offset": 0, + "z_offset": -15, + "tool_offset": 0 + }, + "tick": 315, + "rendered_tick": 315, + "tool_tip": [ + 0, + 1.5, + 0 + ] + }, + "moving": { + "joints": [ + 6.460824988717725, + 4.266649999999998, + -3.034423409674286, + 6.766650000000004, + 0 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": -20, + "y_offset": 0, + "z_offset": -15, + "tool_offset": 0 + }, + "tick": 346, + "rendered_tick": 346, + "tool_tip": [ + 0, + 1.4696557659032572, + 0 + ], + "tcp_error": 4.163336342344337e-17 + }, + "stopped": { + "joints": [ + 6.881516837115303, + 4.266649999999998, + -4.012082328376053, + 8.866650000000012, + 0 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": -20, + "y_offset": 0, + "z_offset": -15, + "tool_offset": 0 + }, + "tick": 357, + "rendered_tick": 357, + "tool_tip": [ + 0, + 1.4598791767162396, + 0 + ], + "tcp_error": 6.938893903907228e-18 + } + }, + { + "axis": "c", + "before": { + "joints": [ + 6.881516837115303, + 4.266649999999998, + -4.012082328376053, + 8.866650000000012, + 0 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": -20, + "y_offset": 0, + "z_offset": -15, + "tool_offset": 0 + }, + "tick": 357, + "rendered_tick": 357, + "tool_tip": [ + 0, + 1.4598791767162396, + 0 + ] + }, + "moving": { + "joints": [ + 6.389875321215886, + 4.774921995664075, + -3.935386480812939, + 8.866650000000012, + 6.30000000000001 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": -20, + "y_offset": 0, + "z_offset": -15, + "tool_offset": 0 + }, + "tick": 388, + "rendered_tick": 388, + "tool_tip": [ + 0, + 1.4606461351918705, + 0 + ], + "tcp_error": 2.2215299868541707e-16 + }, + "stopped": { + "joints": [ + 6.239553636866457, + 4.909801419605384, + -3.911936368046927, + 8.866650000000012, + 8.100000000000021 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": -20, + "y_offset": 0, + "z_offset": -15, + "tool_offset": 0 + }, + "tick": 399, + "rendered_tick": 399, + "tool_tip": [ + 0, + 1.4608806363195308, + 0 + ], + "tcp_error": 1.5515838457795457e-17 + } + }, + { + "axis": "b", + "before": { + "joints": [ + 6.239553636866457, + 4.909801419605384, + -3.911936368046927, + 8.866650000000012, + 8.100000000000021 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": -20, + "y_offset": 0, + "z_offset": -15, + "tool_offset": 0 + }, + "tick": 399, + "rendered_tick": 399, + "tool_tip": [ + 0, + 1.4608806363195308, + 0 + ] + }, + "moving": { + "joints": [ + 7.833212442181058, + 4.909801419605384, + -8.936039634310779, + 19.483300000000032, + 8.100000000000021 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": -20, + "y_offset": 0, + "z_offset": -15, + "tool_offset": 0 + }, + "tick": 441, + "rendered_tick": 424, + "tool_tip": [ + 0, + 1.4391649802175794, + 0 + ], + "tcp_error": 2.1942709178604383e-17 + }, + "stopped": { + "joints": [ + 8.036725480793326, + 4.909801419605384, + -9.960024356917343, + 21.58330000000004, + 8.100000000000021 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": -20, + "y_offset": 0, + "z_offset": -15, + "tool_offset": 0 + }, + "tick": 452, + "rendered_tick": 452, + "tool_tip": [ + 0, + 1.4003997564308268, + 0 + ], + "tcp_error": 2.222613395836815e-16 + } + }, + { + "axis": "c", + "before": { + "joints": [ + 8.036725480793326, + 4.909801419605384, + -9.960024356917343, + 21.58330000000004, + 8.100000000000021 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": -20, + "y_offset": 0, + "z_offset": -15, + "tool_offset": 0 + }, + "tick": 452, + "rendered_tick": 452, + "tool_tip": [ + 0, + 1.4003997564308268, + 0 + ] + }, + "moving": { + "joints": [ + 7.512048008812801, + 5.3428919838003095, + -9.752466730299833, + 21.58330000000004, + 14.40000000000003 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": -20, + "y_offset": 0, + "z_offset": -15, + "tool_offset": 0 + }, + "tick": 483, + "rendered_tick": 483, + "tool_tip": [ + 0, + 1.4024753326970016, + 0 + ], + "tcp_error": 4.220764384040162e-17 + }, + "stopped": { + "joints": [ + 7.354314924758338, + 5.45498912019934, + -9.690068959643082, + 21.58330000000004, + 16.200000000000042 + ], + "offsets": { + "x_rot_point": 0, + "y_rot_point": 0, + "z_rot_point": 0, + "x_offset": -20, + "y_offset": 0, + "z_offset": -15, + "tool_offset": 0 + }, + "tick": 494, + "rendered_tick": 494, + "tool_tip": [ + 0, + 1.4030993104035694, + 0 + ], + "tcp_error": 2.2484586062492886e-16 + } + } + ] + } + ], + "browser_errors": [] +} diff --git a/coverage/trt-parametric/rtcp-jog-xyzac.png b/coverage/trt-parametric/rtcp-jog-xyzac.png new file mode 100644 index 0000000..e3a9244 Binary files /dev/null and b/coverage/trt-parametric/rtcp-jog-xyzac.png differ diff --git a/coverage/trt-parametric/rtcp-jog-xyzbc.png b/coverage/trt-parametric/rtcp-jog-xyzbc.png new file mode 100644 index 0000000..2df8c06 Binary files /dev/null and b/coverage/trt-parametric/rtcp-jog-xyzbc.png differ diff --git a/coverage/trt-parametric/rtcp-jog.report.json b/coverage/trt-parametric/rtcp-jog.report.json new file mode 100644 index 0000000..3717d49 --- /dev/null +++ b/coverage/trt-parametric/rtcp-jog.report.json @@ -0,0 +1,3589 @@ +{ + "report_id": "trt-rtcp-jog-v1", + "status": "verified", + "rows": [ + { + "machine": "xyzac-trt", + "samples": [ + { + "phase": "M428", + "tick": 163, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12, + 8, + 6, + 0, + 0 + ], + "error": 1.3877787807814457e-17 + }, + { + "phase": "a-continuous-0", + "tick": 164, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.0075000000000000015, + "b": 0, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12, + 8.002225337626763, + 5.999345647177577, + 0.0075000000000000015, + 0 + ], + "error": 4.440892098500626e-16 + }, + { + "phase": "a-continuous-1", + "tick": 165, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.03, + "b": 0, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12, + 8.00890186416763, + 5.9973843365648385, + 0.03, + 0 + ], + "error": 0 + }, + { + "phase": "a-continuous-2", + "tick": 166, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.06749999999999999, + "b": 0, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12, + 8.020031118316258, + 5.994121312397244, + 0.06749999999999999, + 0 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "a-continuous-3", + "tick": 167, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.12000000000000002, + "b": 0, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12, + 8.035615656933835, + 5.989565317302457, + 0.12000000000000002, + 0 + ], + "error": 0 + }, + { + "phase": "a-continuous-4", + "tick": 168, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.18750000000000008, + "b": 0, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12, + 8.055659043602471, + 5.983728595638528, + 0.18750000000000008, + 0 + ], + "error": 1.3877787807814457e-17 + }, + { + "phase": "a-continuous-5", + "tick": 169, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.2700000000000002, + "b": 0, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12, + 8.08016583259137, + 5.976626898138001, + 0.2700000000000002, + 0 + ], + "error": 4.440892098500626e-16 + }, + { + "phase": "a-continuous-6", + "tick": 170, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.3675000000000004, + "b": 0, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12, + 8.109141548227306, + 5.968279487828493, + 0.3675000000000004, + 0 + ], + "error": 4.443059973708341e-16 + }, + { + "phase": "a-continuous-7", + "tick": 171, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.4800000000000005, + "b": 0, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12, + 8.142592659658698, + 5.958709147191975, + 0.4800000000000005, + 0 + ], + "error": 4.440892098500626e-16 + }, + { + "phase": "a-continuous-8", + "tick": 172, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6075000000000007, + "b": 0, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12, + 8.180526551000199, + 5.9479421865164355, + 0.6075000000000007, + 0 + ], + "error": 1.3877787807814457e-17 + }, + { + "phase": "a-continuous-9", + "tick": 173, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.7500000000000009, + "b": 0, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12, + 8.222951486842817, + 5.936008453385156, + 0.7500000000000009, + 0 + ], + "error": 5.551115123125783e-17 + }, + { + "phase": "a-continuous-10", + "tick": 174, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.9075000000000011, + "b": 0, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12, + 8.269876573112445, + 5.922941343240353, + 0.9075000000000011, + 0 + ], + "error": 4.443059973708341e-16 + }, + { + "phase": "a-continuous-11", + "tick": 175, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.0800000000000012, + "b": 0, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12, + 8.321311713257895, + 5.908777810949207, + 1.0800000000000012, + 0 + ], + "error": 2.7755575615628914e-17 + }, + { + "phase": "a-continuous-12", + "tick": 176, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.2675000000000012, + "b": 0, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12, + 8.377267559747976, + 5.893558383291939, + 1.2675000000000012, + 0 + ], + "error": 1.3877787807814457e-17 + }, + { + "phase": "a-continuous-13", + "tick": 177, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.470000000000001, + "b": 0, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12, + 8.43775546085554, + 5.8773271722827545, + 1.470000000000001, + 0 + ], + "error": 1.3877787807814457e-17 + }, + { + "phase": "a-continuous-14", + "tick": 178, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.6875000000000009, + "b": 0, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12, + 8.502787402705268, + 5.860131889225823, + 1.6875000000000009, + 0 + ], + "error": 4.449557262054371e-16 + }, + { + "phase": "a-released", + "tick": 178, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.6875000000000009, + "b": 0, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12, + 8.502787402705268, + 5.860131889225823, + 1.6875000000000009, + 0 + ], + "error": 4.449557262054371e-16 + }, + { + "phase": "a-idle", + "tick": 179, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.6875000000000009, + "b": 0, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12, + 8.502787402705268, + 5.860131889225823, + 1.6875000000000009, + 0 + ], + "error": 4.449557262054371e-16 + }, + { + "phase": "a-increment", + "tick": 196, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6875000000000009, + "b": 0, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12, + 8.20434040541591, + 5.941229556240771, + 0.6875000000000009, + 0 + ], + "error": 2.237726045655905e-16 + }, + { + "phase": "c-continuous-0", + "tick": 197, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6875000000000009, + "b": 0, + "c": 0.0075, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.998036478895019, + 8.20473294772533, + 5.9412342666364175, + 0.6875000000000009, + 0.0075 + ], + "error": 2.7755575615628914e-17 + }, + { + "phase": "c-continuous-1", + "tick": 198, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6875000000000009, + "b": 0, + "c": 0.03, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.992145607491388, + 8.20590903257168, + 5.9412483793188215, + 0.6875000000000009, + 0.03 + ], + "error": 5.721958498152797e-17 + }, + { + "phase": "c-continuous-2", + "tick": 199, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6875000000000009, + "b": 0, + "c": 0.06749999999999999, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.982326463541861, + 8.207864033306459, + 5.9412718387695165, + 0.6875000000000009, + 0.06749999999999999 + ], + "error": 3.1031676915590914e-17 + }, + { + "phase": "c-continuous-3", + "tick": 200, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6875000000000009, + "b": 0, + "c": 0.12, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.968577516697847, + 8.210590237509955, + 5.941304552441675, + 0.6875000000000009, + 0.12 + ], + "error": 4.443059973708341e-16 + }, + { + "phase": "c-continuous-4", + "tick": 201, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6875000000000009, + "b": 0, + "c": 0.18750000000000008, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.95089663860719, + 8.214076844995875, + 5.941346390736136, + 0.6875000000000009, + 0.18750000000000008 + ], + "error": 4.443059973708341e-16 + }, + { + "phase": "c-continuous-5", + "tick": 202, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6875000000000009, + "b": 0, + "c": 0.2700000000000002, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.929281117056187, + 8.218309965043737, + 5.941397186968224, + 0.6875000000000009, + 0.2700000000000002 + ], + "error": 4.3885418357208765e-17 + }, + { + "phase": "c-continuous-6", + "tick": 203, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6875000000000009, + "b": 0, + "c": 0.3675000000000003, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.903727674160862, + 8.223272612884942, + 5.9414567373255665, + 0.6875000000000009, + 0.3675000000000003 + ], + "error": 4.462523459318059e-16 + }, + { + "phase": "c-continuous-7", + "tick": 204, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6875000000000009, + "b": 0, + "c": 0.4800000000000005, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.874232488613883, + 8.228944705475879, + 5.941524800817369, + 0.6875000000000009, + 0.4800000000000005 + ], + "error": 4.3885418357208765e-17 + }, + { + "phase": "c-continuous-8", + "tick": 205, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6875000000000009, + "b": 0, + "c": 0.6075000000000007, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.840791221994715, + 8.235303056598847, + 5.941601099215642, + 0.6875000000000009, + 0.6075000000000007 + ], + "error": 4.449557262054371e-16 + }, + { + "phase": "c-continuous-9", + "tick": 206, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6875000000000009, + "b": 0, + "c": 0.7500000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.803399049151855, + 8.242321371339045, + 5.9416853169889094, + 0.6875000000000009, + 0.7500000000000009 + ], + "error": 3.1031676915590914e-17 + }, + { + "phase": "c-continuous-10", + "tick": 207, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6875000000000009, + "b": 0, + "c": 0.9075000000000012, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.762050692666904, + 8.249970239993363, + 5.941777101229139, + 0.6875000000000009, + 0.9075000000000012 + ], + "error": 1.3877787807814457e-17 + }, + { + "phase": "c-continuous-11", + "tick": 208, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6875000000000009, + "b": 0, + "c": 1.0800000000000012, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.716740461411304, + 8.258217131474186, + 5.941876061572557, + 0.6875000000000009, + 1.0800000000000012 + ], + "error": 1.962615573354719e-17 + }, + { + "phase": "c-continuous-12", + "tick": 209, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6875000000000009, + "b": 0, + "c": 1.2675000000000012, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.667462293207176, + 8.267026386279003, + 5.941981770115319, + 0.6875000000000009, + 1.2675000000000012 + ], + "error": 3.1031676915590914e-17 + }, + { + "phase": "c-continuous-13", + "tick": 210, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6875000000000009, + "b": 0, + "c": 1.470000000000001, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.614209801604428, + 8.27635920910408, + 5.9420937613248554, + 0.6875000000000009, + 1.470000000000001 + ], + "error": 4.462523459318059e-16 + }, + { + "phase": "c-continuous-14", + "tick": 211, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6875000000000009, + "b": 0, + "c": 1.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.556976326786616, + 8.286173661188121, + 5.942211531947997, + 0.6875000000000009, + 1.6875000000000009 + ], + "error": 4.451720917549152e-16 + }, + { + "phase": "c-released", + "tick": 211, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6875000000000009, + "b": 0, + "c": 1.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.556976326786616, + 8.286173661188121, + 5.942211531947997, + 0.6875000000000009, + 1.6875000000000009 + ], + "error": 4.451720917549152e-16 + }, + { + "phase": "c-idle", + "tick": 212, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6875000000000009, + "b": 0, + "c": 1.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.556976326786616, + 8.286173661188121, + 5.942211531947997, + 0.6875000000000009, + 1.6875000000000009 + ], + "error": 4.451720917549152e-16 + }, + { + "phase": "c-increment", + "tick": 229, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6875000000000009, + "b": 0, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.819801273527016, + 8.239254611819097, + 5.941648516750181, + 0.6875000000000009, + 0.6875000000000009 + ], + "error": 4.477603233993732e-16 + }, + { + "phase": "a-continuous-0", + "tick": 230, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.6950000000000008, + "b": 0, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.819801273527016, + 8.24148758558735, + 5.941025482783033, + 0.6950000000000008, + 0.6875000000000009 + ], + "error": 1.3877787807814457e-17 + }, + { + "phase": "a-continuous-1", + "tick": 231, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.7175000000000009, + "b": 0, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.819801273527016, + 8.248186995954008, + 5.939158134729794, + 0.7175000000000009, + 0.6875000000000009 + ], + "error": 4.451720917549152e-16 + }, + { + "phase": "a-continuous-2", + "tick": 232, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.7550000000000009, + "b": 0, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.819801273527016, + 8.259354307808827, + 5.936051734774676, + 0.7550000000000009, + 0.6875000000000009 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "a-continuous-3", + "tick": 233, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.8075000000000009, + "b": 0, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.819801273527016, + 8.274991954980429, + 5.931715055352591, + 0.8075000000000009, + 0.6875000000000009 + ], + "error": 1.962615573354719e-17 + }, + { + "phase": "a-continuous-4", + "tick": 234, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.875000000000001, + "b": 0, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.819801273527016, + 8.295103328750798, + 5.926160382326266, + 0.875000000000001, + 0.6875000000000009 + ], + "error": 4.462523459318059e-16 + }, + { + "phase": "a-continuous-5", + "tick": 235, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0.9575000000000011, + "b": 0, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.819801273527016, + 8.31969276176741, + 5.919403519404693, + 0.9575000000000011, + 0.6875000000000009 + ], + "error": 4.443059973708341e-16 + }, + { + "phase": "a-continuous-6", + "tick": 236, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.0550000000000013, + "b": 0, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.819801273527016, + 8.348765507344947, + 5.911463793773528, + 1.0550000000000013, + 0.6875000000000009 + ], + "error": 4.44522679167363e-16 + }, + { + "phase": "a-continuous-7", + "tick": 237, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.1675000000000013, + "b": 0, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.819801273527016, + 8.382327714146385, + 5.9023640628993235, + 1.1675000000000013, + 0.6875000000000009 + ], + "error": 1.962615573354719e-17 + }, + { + "phase": "a-continuous-8", + "tick": 238, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.2950000000000017, + "b": 0, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.819801273527016, + 8.420386396231086, + 5.892130722461324, + 1.2950000000000017, + 0.6875000000000009 + ], + "error": 4.44522679167363e-16 + }, + { + "phase": "a-continuous-9", + "tick": 239, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.4375000000000018, + "b": 0, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.819801273527016, + 8.46294939845562, + 5.8807937153557575, + 1.4375000000000018, + 0.6875000000000009 + ], + "error": 2.2291027918243403e-16 + }, + { + "phase": "a-continuous-10", + "tick": 240, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.595000000000002, + "b": 0, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.819801273527016, + 8.51002535721109, + 5.868386541709221, + 1.595000000000002, + 0.6875000000000009 + ], + "error": 1.962615573354719e-17 + }, + { + "phase": "a-continuous-11", + "tick": 241, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.767500000000002, + "b": 0, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.819801273527016, + 8.56162365647916, + 5.8549462698289645, + 1.767500000000002, + 0.6875000000000009 + ], + "error": 4.44522679167363e-16 + }, + { + "phase": "a-continuous-12", + "tick": 242, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.955000000000002, + "b": 0, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.819801273527016, + 8.617754379187257, + 5.840513548009525, + 1.955000000000002, + 0.6875000000000009 + ], + "error": 3.1031676915590914e-17 + }, + { + "phase": "a-continuous-13", + "tick": 243, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 2.157500000000002, + "b": 0, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.819801273527016, + 8.678428253842373, + 5.825132617106203, + 2.157500000000002, + 0.6875000000000009 + ], + "error": 4.443059973708341e-16 + }, + { + "phase": "a-continuous-14", + "tick": 244, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 2.3750000000000018, + "b": 0, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.819801273527016, + 8.743656596421383, + 5.808851323777407, + 2.3750000000000018, + 0.6875000000000009 + ], + "error": 2.2291027918243403e-16 + }, + { + "phase": "a-released", + "tick": 244, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 2.3750000000000018, + "b": 0, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.819801273527016, + 8.743656596421383, + 5.808851323777407, + 2.3750000000000018, + 0.6875000000000009 + ], + "error": 2.2291027918243403e-16 + }, + { + "phase": "a-idle", + "tick": 245, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 2.3750000000000018, + "b": 0, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.819801273527016, + 8.743656596421383, + 5.808851323777407, + 2.3750000000000018, + 0.6875000000000009 + ], + "error": 2.2291027918243403e-16 + }, + { + "phase": "a-increment", + "tick": 262, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.819801273527016, + 8.444277944316603, + 5.885753054003896, + 1.3750000000000018, + 0.6875000000000009 + ], + "error": 1.962615573354719e-17 + }, + { + "phase": "c-continuous-0", + "tick": 263, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 0.6950000000000008, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.817833183377914, + 8.444646820382943, + 5.8857619080938015, + 1.3750000000000018, + 0.6950000000000008 + ], + "error": 1.3877787807814457e-17 + }, + { + "phase": "c-continuous-1", + "tick": 264, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 0.7175000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.811928623368642, + 8.44575190324844, + 5.885788433271053, + 1.3750000000000018, + 0.7175000000000009 + ], + "error": 1.3877787807814457e-17 + }, + { + "phase": "c-continuous-2", + "tick": 265, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 0.7550000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.802086726836809, + 8.447588556534093, + 5.885832518249174, + 1.3750000000000018, + 0.7550000000000009 + ], + "error": 4.44522679167363e-16 + }, + { + "phase": "c-continuous-3", + "tick": 266, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 0.8075000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.788306056090821, + 8.450149051683805, + 5.885893977520524, + 1.3750000000000018, + 0.8075000000000009 + ], + "error": 1.3877787807814457e-17 + }, + { + "phase": "c-continuous-4", + "tick": 267, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 0.875000000000001, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.770584612530897, + 8.453422566090719, + 5.885972551311308, + 1.3750000000000018, + 0.875000000000001 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "c-continuous-5", + "tick": 268, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 0.9575000000000011, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.748919850823262, + 8.45739518050003, + 5.886067905519255, + 1.3750000000000018, + 0.9575000000000011 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "c-continuous-6", + "tick": 269, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 1.0550000000000013, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.723308697132284, + 8.462049875714303, + 5.886179631634512, + 1.3750000000000018, + 1.0550000000000013 + ], + "error": 1.962615573354719e-17 + }, + { + "phase": "c-continuous-7", + "tick": 270, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 1.1675000000000013, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.693747571416512, + 8.467366528634642, + 5.886307246644655, + 1.3750000000000018, + 1.1675000000000013 + ], + "error": 1.3877787807814457e-17 + }, + { + "phase": "c-continuous-8", + "tick": 271, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 1.2950000000000017, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.660232413795724, + 8.473321907678628, + 5.8864501929246735, + 1.3750000000000018, + 1.2950000000000017 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "c-continuous-9", + "tick": 272, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 1.4375000000000018, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.622758714997243, + 8.479889667623343, + 5.8866078381132, + 1.3750000000000018, + 1.4375000000000018 + ], + "error": 3.925231146709438e-17 + }, + { + "phase": "c-continuous-10", + "tick": 273, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 1.595000000000002, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.581321550890626, + 8.487040343929323, + 5.886779474976279, + 1.3750000000000018, + 1.595000000000002 + ], + "error": 2.7755575615628914e-17 + }, + { + "phase": "c-continuous-11", + "tick": 274, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 1.767500000000002, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.535915621120779, + 8.494741346608787, + 5.886964321260166, + 1.3750000000000018, + 1.767500000000002 + ], + "error": 1.962615573354719e-17 + }, + { + "phase": "c-continuous-12", + "tick": 275, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 1.955000000000002, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.486535291850082, + 8.502956953708953, + 5.887161519534931, + 1.3750000000000018, + 1.955000000000002 + ], + "error": 3.1031676915590914e-17 + }, + { + "phase": "c-continuous-13", + "tick": 276, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 2.157500000000002, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.43317464262076, + 8.511648304489007, + 5.887370137030672, + 1.3750000000000018, + 2.157500000000002 + ], + "error": 4.44522679167363e-16 + }, + { + "phase": "c-continuous-14", + "tick": 277, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 2.3750000000000018, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.37582751734897, + 8.520773392376572, + 5.8875891654684445, + 1.3750000000000018, + 2.3750000000000018 + ], + "error": 4.3885418357208765e-17 + }, + { + "phase": "c-released", + "tick": 277, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 2.3750000000000018, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.37582751734897, + 8.520773392376572, + 5.8875891654684445, + 1.3750000000000018, + 2.3750000000000018 + ], + "error": 4.3885418357208765e-17 + }, + { + "phase": "c-idle", + "tick": 278, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 2.3750000000000018, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.37582751734897, + 8.520773392376572, + 5.8875891654684445, + 1.3750000000000018, + 2.3750000000000018 + ], + "error": 4.3885418357208765e-17 + }, + { + "phase": "c-increment", + "tick": 295, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 1.3750000000000018, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.639196558834685, + 8.477020542332117, + 5.886538970827971, + 1.3750000000000018, + 1.3750000000000018 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "invalid-jog-retains-rtcp", + "tick": 295, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 1.3750000000000018, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.639196558834685, + 8.477020542332117, + 5.886538970827971, + 1.3750000000000018, + 1.3750000000000018 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "repeated-stop", + "tick": 295, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 1.3750000000000018, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.639196558834685, + 8.477020542332117, + 5.886538970827971, + 1.3750000000000018, + 1.3750000000000018 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "abort-retains-rtcp", + "tick": 295, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 1.3750000000000018, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.639196558834685, + 8.477020542332117, + 5.886538970827971, + 1.3750000000000018, + 1.3750000000000018 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "power-off-retains-rtcp", + "tick": 295, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 1.3750000000000018, + "b": 0, + "c": 1.3750000000000018, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.639196558834685, + 8.477020542332117, + 5.886538970827971, + 1.3750000000000018, + 1.3750000000000018 + ], + "error": 2.2247786310271853e-16 + } + ], + "identity_before": [ + 12, + 8.000000000000002, + 6, + 1.3750000000000018, + 1.3750000000000018 + ], + "identity_after": [ + 12, + 8.000000000000002, + 6, + 3.3750000000000018, + 1.3750000000000018 + ], + "reused_segment_id": "verified" + }, + { + "machine": "xyzbc-trt", + "samples": [ + { + "phase": "M428", + "tick": 163, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12, + 8, + 6, + 0, + 0 + ], + "error": 1.3877787807814457e-17 + }, + { + "phase": "b-continuous-0", + "tick": 164, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.0075000000000000015, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.001047000498811, + 8, + 5.99698923850999, + 0.0075000000000000015, + 0 + ], + "error": 1.962615573354719e-17 + }, + { + "phase": "b-continuous-1", + "tick": 165, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.03, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.004185637223166, + 8, + 5.987956132088819, + 0.03, + 0 + ], + "error": 1.3877787807814457e-17 + }, + { + "phase": "b-continuous-2", + "tick": 166, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.06749999999999999, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.009408814781619, + 8, + 5.972898217978826, + 0.06749999999999999, + 0 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "b-continuous-3", + "tick": 167, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.12000000000000002, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.016704703943478, + 8, + 5.951811401904989, + 0.12000000000000002, + 0 + ], + "error": 1.962615573354719e-17 + }, + { + "phase": "b-continuous-4", + "tick": 168, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.18750000000000008, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.026056736291231, + 8, + 5.924689973563461, + 0.18750000000000008, + 0 + ], + "error": 1.3877787807814457e-17 + }, + { + "phase": "b-continuous-5", + "tick": 169, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.2700000000000002, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.037443596773691, + 8, + 5.89152662831918, + 0.2700000000000002, + 0 + ], + "error": 1.962615573354719e-17 + }, + { + "phase": "b-continuous-6", + "tick": 170, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.3675000000000004, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.050839214199659, + 8, + 5.852312495126218, + 0.3675000000000004, + 0 + ], + "error": 1.3877787807814457e-17 + }, + { + "phase": "b-continuous-7", + "tick": 171, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.4800000000000005, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.066212749723217, + 8, + 5.807037170688121, + 0.4800000000000005, + 0 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "b-continuous-8", + "tick": 172, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6075000000000007, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.083528583383508, + 8, + 5.755688759879201, + 0.6075000000000007, + 0 + ], + "error": 2.242025235105681e-16 + }, + { + "phase": "b-continuous-9", + "tick": 173, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.7500000000000009, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.102746298772917, + 8, + 5.6982539224511335, + 0.7500000000000009, + 0 + ], + "error": 3.1031676915590914e-17 + }, + { + "phase": "b-continuous-10", + "tick": 174, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.9075000000000011, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.123820665919645, + 8, + 5.63471792605251, + 0.9075000000000011, + 0 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "b-continuous-11", + "tick": 175, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.0800000000000012, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.14670162248187, + 8, + 5.565064705592083, + 1.0800000000000012, + 0 + ], + "error": 1.962615573354719e-17 + }, + { + "phase": "b-continuous-12", + "tick": 176, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.2675000000000012, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.171334253362684, + 8, + 5.489276928979275, + 1.2675000000000012, + 0 + ], + "error": 2.2633986948989007e-16 + }, + { + "phase": "b-continuous-13", + "tick": 177, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.470000000000001, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.19765876886656, + 8, + 5.407336069278104, + 1.470000000000001, + 0 + ], + "error": 4.3885418357208765e-17 + }, + { + "phase": "b-continuous-14", + "tick": 178, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.6875000000000009, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.225610481530193, + 8, + 5.319222483313015, + 1.6875000000000009, + 0 + ], + "error": 1.962615573354719e-17 + }, + { + "phase": "b-released", + "tick": 178, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.6875000000000009, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.225610481530193, + 8, + 5.319222483313015, + 1.6875000000000009, + 0 + ], + "error": 1.962615573354719e-17 + }, + { + "phase": "b-idle", + "tick": 179, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.6875000000000009, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.225610481530193, + 8, + 5.319222483313015, + 1.6875000000000009, + 0 + ], + "error": 1.962615573354719e-17 + }, + { + "phase": "b-increment", + "tick": 196, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6875000000000009, + "c": 0, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.094335062974402, + 8, + 5.723450524155055, + 0.6875000000000009, + 0 + ], + "error": 2.2291027918243403e-16 + }, + { + "phase": "c-continuous-0", + "tick": 197, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6875000000000009, + "c": 0.0075, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.092371683220946, + 8.000392570570105, + 5.723474084151584, + 0.6875000000000009, + 0.0075 + ], + "error": 4.3885418357208765e-17 + }, + { + "phase": "c-continuous-1", + "tick": 198, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6875000000000009, + "c": 0.03, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.08648123589408, + 8.001568740087485, + 5.723544767837882, + 0.6875000000000009, + 0.03 + ], + "error": 1.3877787807814457e-17 + }, + { + "phase": "c-continuous-2", + "tick": 199, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6875000000000009, + "c": 0.06749999999999999, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.076662798812944, + 8.003523881570553, + 5.723662586279854, + 0.6875000000000009, + 0.06749999999999999 + ], + "error": 3.1031676915590914e-17 + }, + { + "phase": "c-continuous-3", + "tick": 200, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6875000000000009, + "c": 0.12, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.062914841739111, + 8.006250282044348, + 5.723827557839927, + 0.6875000000000009, + 0.12 + ], + "error": 2.242025235105681e-16 + }, + { + "phase": "c-continuous-4", + "tick": 201, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6875000000000009, + "c": 0.18750000000000008, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.045235236473651, + 8.009737140545028, + 5.724039708055878, + 0.6875000000000009, + 0.18750000000000008 + ], + "error": 2.242025235105681e-16 + }, + { + "phase": "c-continuous-5", + "tick": 202, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6875000000000009, + "c": 0.2700000000000002, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.023621270998103, + 8.01397056535206, + 5.724299069471157, + 0.6875000000000009, + 0.2700000000000002 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "c-continuous-6", + "tick": 203, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6875000000000009, + "c": 0.3675000000000003, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.998069667664467, + 8.018933570474049, + 5.724605681416602, + 0.6875000000000009, + 0.3675000000000003 + ], + "error": 1.3877787807814457e-17 + }, + { + "phase": "c-continuous-7", + "tick": 204, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6875000000000009, + "c": 0.4800000000000005, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.968576605440497, + 8.024606071421521, + 5.724959589743509, + 0.6875000000000009, + 0.4800000000000005 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "c-continuous-8", + "tick": 205, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6875000000000009, + "c": 0.6075000000000007, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.935137746217983, + 8.03096488030751, + 5.72536084650794, + 0.6875000000000009, + 0.6075000000000007 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "c-continuous-9", + "tick": 206, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6875000000000009, + "c": 0.7500000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.897748265192767, + 8.037983700324139, + 5.725809509606167, + 0.6875000000000009, + 0.7500000000000009 + ], + "error": 2.237726045655905e-16 + }, + { + "phase": "c-continuous-10", + "tick": 207, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6875000000000009, + "c": 0.9075000000000012, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.856402885326382, + 8.045633119650974, + 5.726305642361144, + 0.6875000000000009, + 0.9075000000000012 + ], + "error": 1.3877787807814457e-17 + }, + { + "phase": "c-continuous-11", + "tick": 208, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6875000000000009, + "c": 1.0800000000000012, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.811095915899951, + 8.053880604858358, + 5.726849313059873, + 0.6875000000000009, + 1.0800000000000012 + ], + "error": 1.962615573354719e-17 + }, + { + "phase": "c-continuous-12", + "tick": 209, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6875000000000009, + "c": 1.2675000000000012, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.761821295172016, + 8.062690493876515, + 5.727440594441521, + 0.6875000000000009, + 1.2675000000000012 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "c-continuous-13", + "tick": 210, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6875000000000009, + "c": 1.470000000000001, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.70857263715223, + 8.072023988608676, + 5.728079563136151, + 0.6875000000000009, + 1.470000000000001 + ], + "error": 2.2291027918243403e-16 + }, + { + "phase": "c-continuous-14", + "tick": 211, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6875000000000009, + "c": 1.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.651343282503586, + 8.081839147274207, + 5.728766299053904, + 0.6875000000000009, + 1.6875000000000009 + ], + "error": 2.237726045655905e-16 + }, + { + "phase": "c-released", + "tick": 211, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6875000000000009, + "c": 1.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.651343282503586, + 8.081839147274207, + 5.728766299053904, + 0.6875000000000009, + 1.6875000000000009 + ], + "error": 2.237726045655905e-16 + }, + { + "phase": "c-idle", + "tick": 212, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6875000000000009, + "c": 1.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.651343282503586, + 8.081839147274207, + 5.728766299053904, + 0.6875000000000009, + 1.6875000000000009 + ], + "error": 2.237726045655905e-16 + }, + { + "phase": "c-increment", + "tick": 229, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6875000000000009, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.914149308791483, + 8.034916720015959, + 5.725612701765208, + 0.6875000000000009, + 0.6875000000000009 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "b-continuous-0", + "tick": 230, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.6950000000000008, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.915160392812567, + 8.034916720015959, + 5.7226131804551414, + 0.6950000000000008, + 0.6875000000000009 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "b-continuous-1", + "tick": 231, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.7175000000000009, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.91819128893605, + 8.034916720015959, + 5.71361382278119, + 0.7175000000000009, + 0.6875000000000009 + ], + "error": 2.2291027918243403e-16 + }, + { + "phase": "b-continuous-2", + "tick": 232, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.7550000000000009, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.923234928304385, + 8.034916720015959, + 5.698612250596281, + 0.7550000000000009, + 0.6875000000000009 + ], + "error": 2.242025235105681e-16 + }, + { + "phase": "b-continuous-3", + "tick": 233, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.8075000000000009, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.930279526033083, + 8.034916720015959, + 5.677604510604414, + 0.8075000000000009, + 0.6875000000000009 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "b-continuous-4", + "tick": 234, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.875000000000001, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.939308576047644, + 8.034916720015959, + 5.650585089790985, + 0.875000000000001, + 0.6875000000000009 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "b-continuous-5", + "tick": 235, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 0.9575000000000011, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.950300843894858, + 8.034916720015959, + 5.617546937038483, + 0.9575000000000011, + 0.6875000000000009 + ], + "error": 4.3885418357208765e-17 + }, + { + "phase": "b-continuous-6", + "tick": 236, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.0550000000000013, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.963230357568055, + 8.034916720015959, + 5.578481490940659, + 1.0550000000000013, + 0.6875000000000009 + ], + "error": 2.2291027918243403e-16 + }, + { + "phase": "b-continuous-7", + "tick": 237, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.1675000000000013, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.978066396397452, + 8.034916720015959, + 5.533378713831883, + 1.1675000000000013, + 0.6875000000000009 + ], + "error": 2.2633986948989007e-16 + }, + { + "phase": "b-continuous-8", + "tick": 238, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.2950000000000017, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.994773478067838, + 8.034916720015959, + 5.482227132051872, + 1.2950000000000017, + 0.6875000000000009 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "b-continuous-9", + "tick": 239, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.4375000000000018, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.013311343837586, + 8.034916720015959, + 5.425013882469283, + 1.4375000000000018, + 0.6875000000000009 + ], + "error": 1.962615573354719e-17 + }, + { + "phase": "b-continuous-10", + "tick": 240, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.595000000000002, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.033634942044415, + 8.034916720015959, + 5.3617247652908, + 1.595000000000002, + 0.6875000000000009 + ], + "error": 2.2929868617541516e-16 + }, + { + "phase": "b-continuous-11", + "tick": 241, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.767500000000002, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.055694409994807, + 8.034916720015959, + 5.292344303185328, + 1.767500000000002, + 0.6875000000000009 + ], + "error": 4.3885418357208765e-17 + }, + { + "phase": "b-continuous-12", + "tick": 242, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.955000000000002, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.079435054345751, + 8.034916720015959, + 5.216855806755586, + 1.955000000000002, + 0.6875000000000009 + ], + "error": 2.2633986948989007e-16 + }, + { + "phase": "b-continuous-13", + "tick": 243, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 2.157500000000002, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.104797330099164, + 8.034916720015959, + 5.135241446391842, + 2.157500000000002, + 0.6875000000000009 + ], + "error": 3.1031676915590914e-17 + }, + { + "phase": "b-continuous-14", + "tick": 244, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 2.3750000000000018, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.131716818341094, + 8.034916720015959, + 5.0474823305447885, + 2.3750000000000018, + 0.6875000000000009 + ], + "error": 2.2291027918243403e-16 + }, + { + "phase": "b-released", + "tick": 244, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 2.3750000000000018, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.131716818341094, + 8.034916720015959, + 5.0474823305447885, + 2.3750000000000018, + 0.6875000000000009 + ], + "error": 2.2291027918243403e-16 + }, + { + "phase": "b-idle", + "tick": 245, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 2.3750000000000018, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.131716818341094, + 8.034916720015959, + 5.0474823305447885, + 2.3750000000000018, + 0.6875000000000009 + ], + "error": 2.2291027918243403e-16 + }, + { + "phase": "b-increment", + "tick": 262, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 0.6875000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.005198219836434, + 8.034916720015959, + 5.450113088356436, + 1.3750000000000018, + 0.6875000000000009 + ], + "error": 1.962615573354719e-17 + }, + { + "phase": "c-continuous-0", + "tick": 263, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 0.6950000000000008, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 12.003230696388727, + 8.03528570232885, + 5.4501603145960456, + 1.3750000000000018, + 0.6950000000000008 + ], + "error": 2.237726045655905e-16 + }, + { + "phase": "c-continuous-1", + "tick": 264, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 0.7175000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.99732783656701, + 8.0363911034889, + 5.450302000263195, + 1.3750000000000018, + 0.7175000000000009 + ], + "error": 4.449557262054371e-16 + }, + { + "phase": "c-continuous-2", + "tick": 265, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 0.7550000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.987488773958447, + 8.038228285781706, + 5.450538166154292, + 1.3750000000000018, + 0.7550000000000009 + ], + "error": 2.237726045655905e-16 + }, + { + "phase": "c-continuous-3", + "tick": 266, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 0.8075000000000009, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.973712071285423, + 8.04078951842513, + 5.450868846768148, + 1.3750000000000018, + 0.8075000000000009 + ], + "error": 3.1031676915590914e-17 + }, + { + "phase": "c-continuous-4", + "tick": 267, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 0.875000000000001, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.955995730523636, + 8.0440639756951, + 5.451294090063109, + 1.3750000000000018, + 0.875000000000001 + ], + "error": 2.7755575615628914e-17 + }, + { + "phase": "c-continuous-5", + "tick": 268, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 0.9575000000000011, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.934337207072232, + 8.048037734327684, + 5.451813957116938, + 1.3750000000000018, + 0.9575000000000011 + ], + "error": 5.721958498152797e-17 + }, + { + "phase": "c-continuous-6", + "tick": 269, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 1.0550000000000013, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.908733427980678, + 8.052693770223444, + 5.452428521689316, + 1.3750000000000018, + 1.0550000000000013 + ], + "error": 2.2291027918243403e-16 + }, + { + "phase": "c-continuous-7", + "tick": 270, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 1.1675000000000013, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.879180814238367, + 8.058011954487473, + 5.453137869686821, + 1.3750000000000018, + 1.1675000000000013 + ], + "error": 2.237726045655905e-16 + }, + { + "phase": "c-continuous-8", + "tick": 271, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 1.2950000000000017, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.845675307134108, + 8.063969048846008, + 5.453942098530234, + 1.3750000000000018, + 1.2950000000000017 + ], + "error": 2.2291027918243403e-16 + }, + { + "phase": "c-continuous-9", + "tick": 272, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 1.4375000000000018, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.808212398693637, + 8.070538700487983, + 5.454841316423944, + 1.3750000000000018, + 1.4375000000000018 + ], + "error": 2.2291027918243403e-16 + }, + { + "phase": "c-continuous-10", + "tick": 273, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 1.595000000000002, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.766787166204399, + 8.077691436387322, + 5.455835641527256, + 1.3750000000000018, + 1.595000000000002 + ], + "error": 4.3885418357208765e-17 + }, + { + "phase": "c-continuous-11", + "tick": 274, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 1.767500000000002, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.721394310837503, + 8.085394657169418, + 5.45692520102735, + 1.3750000000000018, + 1.767500000000002 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "c-continuous-12", + "tick": 275, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 1.955000000000002, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.67202820037756, + 8.093612630592586, + 5.458110130113648, + 1.3750000000000018, + 1.955000000000002 + ], + "error": 2.2247786310271853e-16 + }, + { + "phase": "c-continuous-13", + "tick": 276, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 2.157500000000002, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.618682916071574, + 8.102306484723032, + 5.459390570853299, + 1.3750000000000018, + 2.157500000000002 + ], + "error": 1.3877787807814457e-17 + }, + { + "phase": "c-continuous-14", + "tick": 277, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 2.3750000000000018, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.561352303608299, + 8.111434200889319, + 5.460766670967529, + 1.3750000000000018, + 2.3750000000000018 + ], + "error": 2.242025235105681e-16 + }, + { + "phase": "c-released", + "tick": 277, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 2.3750000000000018, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.561352303608299, + 8.111434200889319, + 5.460766670967529, + 1.3750000000000018, + 2.3750000000000018 + ], + "error": 2.242025235105681e-16 + }, + { + "phase": "c-idle", + "tick": 278, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 2.3750000000000018, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.561352303608299, + 8.111434200889319, + 5.460766670967529, + 1.3750000000000018, + 2.3750000000000018 + ], + "error": 2.242025235105681e-16 + }, + { + "phase": "c-increment", + "tick": 295, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 1.3750000000000018, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.824645509338854, + 8.067668748808995, + 5.4544468743542645, + 1.3750000000000018, + 1.3750000000000018 + ], + "error": 2.7755575615628914e-17 + }, + { + "phase": "invalid-jog-retains-rtcp", + "tick": 295, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 1.3750000000000018, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.824645509338854, + 8.067668748808995, + 5.4544468743542645, + 1.3750000000000018, + 1.3750000000000018 + ], + "error": 2.7755575615628914e-17 + }, + { + "phase": "repeated-stop", + "tick": 295, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 1.3750000000000018, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.824645509338854, + 8.067668748808995, + 5.4544468743542645, + 1.3750000000000018, + 1.3750000000000018 + ], + "error": 2.7755575615628914e-17 + }, + { + "phase": "abort-retains-rtcp", + "tick": 295, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 1.3750000000000018, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.824645509338854, + 8.067668748808995, + 5.4544468743542645, + 1.3750000000000018, + 1.3750000000000018 + ], + "error": 2.7755575615628914e-17 + }, + { + "phase": "power-off-retains-rtcp", + "tick": 295, + "pose": { + "x": 12, + "y": 8, + "z": 6, + "a": 0, + "b": 1.3750000000000018, + "c": 1.3750000000000018, + "u": 0, + "v": 0, + "w": 0 + }, + "joints": [ + 11.824645509338854, + 8.067668748808995, + 5.4544468743542645, + 1.3750000000000018, + 1.3750000000000018 + ], + "error": 2.7755575615628914e-17 + } + ], + "identity_before": [ + 12.000000000000004, + 8.000000000000002, + 6.000000000000002, + 1.3750000000000018, + 1.3750000000000018 + ], + "identity_after": [ + 12.000000000000004, + 8.000000000000002, + 6.000000000000002, + 3.3750000000000018, + 1.3750000000000018 + ], + "reused_segment_id": "verified" + } + ], + "state_hash": "fnv1a64:eff9654296c83057" +} diff --git a/docs/trt-parametric/03-推进台账.md b/docs/trt-parametric/03-推进台账.md index 13a44ed..ac3b344 100644 --- a/docs/trt-parametric/03-推进台账.md +++ b/docs/trt-parametric/03-推进台账.md @@ -1,5 +1,30 @@ # 推进台账 +## R05 / 2026-09-18 / 仓库保存 + +- 用户授权:保存到 `https://gitea.meswork.com/wangdequan/linuxcncWebWASM.git` 的 `main` 分支。 +- 保存内容:TRT-UI01 黄色预览路径、TRT-JOG01 M428 Jog 模式保持修复、对应测试、文档、报告和截图。 +- 检查:已获取远程 main;提交前差异格式检查通过。功能验证沿用 E05/E06,本轮没有新增功能修改。 +- 原有大体积 tick trace、linuxcnc 子模块本地改动、临时脚本和用户图片保留在本地。 +- 推送完成以远程 main 与本地 HEAD 的提交 ID 一致为准;下一开发任务仍为 TRT-R01。 + +## R04 / 2026-09-17 / M428 旋转轴 Jog 刀尖跟随 + +- 用户问题:选中 M428 后 Jog 调整 A/C,机床预览没有持续体现刀尖跟随。 +- 根因:`WasmLinuxcncTp.abort()` 在 JOG_STOP 时把 `activeTag` 清零,而 switchkins 仍保持 M428。首轮 Jog 有补偿,松开时关节解跳回 identity,后续 Jog 丢失补偿。另有 Jog ID 与历史程序行 ID 复用的模式映射风险。 +- 改动:`web/worker/wasm-linuxcnc-tp.mjs` 停止只清理队列映射,保留当前坐标系;成功加入 Jog 时记录该段的当前模式,覆盖历史同 ID 条目。正逆解继续使用 WASM,无 Three.js/JS 补偿公式。 +- 测试:新增 `web/react/src/test_trt_rtcp_jog.mjs`、`scripts/test_trt_rtcp_jog_browser.mjs`;更新 `test_xyzac_runtime_followups.mjs` 等待真实 homing 完成后再测试运行/关机。 +- 验证:修复前专项在 `a-released` 明确失败(mode 0 != 1);修复后两机型均通过。检查连续/增量/反向/重复 Jog、松开无跳变、无效输入、重复停止、程序停止和关机保持、M429 对照及同 ID 段复用。浏览器真实按钮操作 A-C-A-C、B-C-B-C 均通过,快照与实际渲染刀尖一致。详见 E06。 +- 产物:`coverage/trt-parametric/rtcp-jog.report.json`、`rtcp-jog-browser.report.json`、两机型截图。 +- 下一步:TRT-R01;本轮未扩展到既有 checkpoint 全状态精度修复。 + +## R03 / 2026-09-17 / 机床预览路径颜色 + +- 用户要求:Preview 中工作台上的白色刀具预览路径改为黄色。 +- 改动:`web/react/src/XyzacMachineView.tsx` 的普通预览路径材质由 `0xdce7e8` 改为 `0xffff00`,两种 TRT 机型共用。 +- 验证:E05;对应任务 TRT-UI01。 +- 下一步:仍按 TRT-R01 接续。 + ## R02 / 2026-09-17 / 仓库保存 - 用户授权:将本轮成果保存到 `https://gitea.meswork.com/wangdequan/linuxcncWebWASM.git`。 diff --git a/docs/trt-parametric/04-任务矩阵.md b/docs/trt-parametric/04-任务矩阵.md index 95b7a42..0d4c870 100644 --- a/docs/trt-parametric/04-任务矩阵.md +++ b/docs/trt-parametric/04-任务矩阵.md @@ -11,3 +11,5 @@ | TRT-P05 | 参数编辑及文件流程 | P03,P04 | 已验收 | 分组布局、应用/重新读取/导入/保存、保留程序、错误反馈 | E03 | | TRT-P06 | 回归及证据收口 | P03,P04,P05 | 已验收 | 专项、相关回归、构建、桌面/移动交互截图和像素检查通过;既有恢复偏差独立登记 | E02,E03,E04 | | TRT-R01 | 既有 checkpoint 恢复状态精度 | P06 | 待办 | 定位 HAL tick 与 TP queue/progress 恢复差异;将恢复测试的相等性变为有效断言,再验证固定 tick 连续与恢复轨迹 | E04:遗留项 | +| TRT-UI01 | 机床预览路径改为黄色 | P04 | 已验收 | 工作台普通刀具预览路径使用黄色材质 | E05 | +| TRT-JOG01 | M428 旋转轴 Jog 刀尖跟随 | P03,P04 | 已验收 | A/B/C 连续和增量 Jog 使用 RTCP 补偿;松开、重复 Jog 不丢失模式;WASM 与机床模型刀尖位置一致;M429 对照 | E06 | diff --git a/docs/trt-parametric/05-验收证据.md b/docs/trt-parametric/05-验收证据.md index 92beb18..6a4afcf 100644 --- a/docs/trt-parametric/05-验收证据.md +++ b/docs/trt-parametric/05-验收证据.md @@ -56,3 +56,22 @@ PLAYWRIGHT_MODULE=/home/mes006/.npm/_npx/e41f203b7505f1fb/node_modules/playwrigh | `node web/worker/test_xyzac_recovery.mjs` | 退出 0,但其内部输出恢复前后 HAL tick / TP progress / queue 状态不同,`endpoint_at_checkpoint_equal=false`;登记 TRT-R01,不能声称恢复完全等价 | 本次未重跑全仓历史发布 gate、全部浏览器矩阵或官方 native 对照。专项测试验证浏览器仿真,不是实际机床控制验收。 + +## E05 机床预览路径颜色 + +- 材质检查:`XyzacMachineView.tsx` 普通预览路径使用 `0xffff00`(黄色)。 +- 命令:`node web/react/src/test_xyzac_threejs.mjs`、`npm --prefix web/react run typecheck`。 +- 结果:模型回归及 TypeScript 检查通过。 + +## E06 M428 Jog RTCP 修复 + +- 修复前:`node web/react/src/test_trt_rtcp_jog.mjs` 在 A 连续 Jog 松开时报 `a-released: RTCP motion mode must remain active`,实际模式 0、期望 1。 +- 修复后同命令通过;[WASM 测试报告](../../coverage/trt-parametric/rtcp-jog.report.json),report_id=`trt-rtcp-jog-v1`。 +- 两机型各 77 个检查点,使用非零 INI 旋转中心。覆盖 A/B/C 连续、负方向增量、重复 Jog、停止、非法值/越界拒绝、PROGRAM_ABORT、关机保持及 M429 不补偿对照;另验证历史程序行 ID 与 Jog ID 复用不污染运动学模式。 +- 编程 TCP 的 XYZ 不变,机器 XYZ 关节随角度改变;模型上同一编程点与刀尖的最大距离:XYZAC `4.48e-16`、XYZBC `4.45e-16` 场景单位。停止前后关节无跳变,motion_trace 和完整面板快照都检查。 +- 浏览器命令:`PLAYWRIGHT_MODULE=/home/mes006/.npm/_npx/e41f203b7505f1fb/node_modules/playwright/index.mjs node scripts/test_trt_rtcp_jog_browser.mjs`。 +- 页面 `http://127.0.0.1:5174/`,实际操作开机、回零、X/Y 离开旋转中心、选择 M428、连续按住/松开 A-C-A-C 与 B-C-B-C;两个机型均保持 XYZ 补偿,渲染刀尖与 Worker 关节一致,pageerror 为零。 +- [浏览器报告](../../coverage/trt-parametric/rtcp-jog-browser.report.json),report_id=`trt-rtcp-jog-browser-v1`;截图:[XYZAC](../../coverage/trt-parametric/rtcp-jog-xyzac.png)、[XYZBC](../../coverage/trt-parametric/rtcp-jog-xyzbc.png)。 +- 回归通过:`node web/react/src/test_trt_parametric.mjs`、`node web/worker/test_xyzac_trt_case.mjs`、`node web/worker/test_xyzac_program_replace.mjs`、`node web/worker/test_xyzac_runtime_followups.mjs`、`node web/worker/test_boat_trt_programs.mjs`、`npm --prefix web/react run build`。构建保留既有大 chunk 提示。 +- `runtime_followups` 初次失败因未等待 HOME 完成便启动程序;现等待 WASM homed,并断言 PROGRAM_LOAD/RUN 成功后再验收。 +- job_id / PDF:不适用;使用原有 WASM,无核心 ABI 变更。本轮不声称修复 TRT-R01。 diff --git a/docs/trt-parametric/06-决策记录.md b/docs/trt-parametric/06-决策记录.md index ff40bb0..9b20913 100644 --- a/docs/trt-parametric/06-决策记录.md +++ b/docs/trt-parametric/06-决策记录.md @@ -31,3 +31,9 @@ XYZAC 不支持 x-offset,XYZBC 不支持 y-offset。六项都可见,但不 ## D08 / 2026-09-17 / 异步界面状态 机型选择在 Worker 成功载入后提交;重新读取期间锁定主界面加载动作。参数应用成功但当前程序解析失败时,保留已生效参数并显示程序解析错误,旧路径已清理;不声称整笔操作回滚成功。 + +## D09 / 2026-09-17 / Jog 停止保持坐标系 + +JOG_STOP/abort 停止运动不能隐式执行 M429。保留停止姿态对应的运动学模式,只清理待执行段和历史 ID 映射;重新初始化使用原有 reset 路径。Jog 的 native tag 是段 ID,与运动学模式不同,必须关联本段入队时的当前模式,不能沿用同编号的历史程序行。 + +RTCP 的判据为:旋转 Jog 时刀尖在工件坐标中的 XYZ 不变,机器 XYZ 按 WASM 逆解联动;Three.js 用相同关节投影。若刀尖恰好在 C 旋转轴上,单独转 C 可没有 XYZ 位移,这属于正确几何行为;验收特意先移动 X/Y 离开旋转中心。 diff --git a/docs/trt-parametric/README.md b/docs/trt-parametric/README.md index a6430fc..90b708d 100644 --- a/docs/trt-parametric/README.md +++ b/docs/trt-parametric/README.md @@ -11,7 +11,7 @@ 每轮必须记录实际改动、命令、结果和下一任务。未运行的检查不能记为通过;历史通过任务仅在相关代码改变时回归。此目录是本专项接续入口,历史仿真/发布轨道仍保留原有指针,不据此扩大发布范围。 -当前状态:`TRT-P01` 至 `TRT-P06` 已验收。下一项为矩阵中的 `TRT-R01`,属于既有恢复精度问题,不影响本专项参数应用流程。实现不依赖聊天记录。用户文字提及 Image #1,但本轮未收到可读取的图片资源,布局按现有结构预览实现。 +当前状态:`TRT-P01` 至 `TRT-P06`、`TRT-UI01`、`TRT-JOG01` 已验收。最新修复为 M428 下停止 Jog 后保留 RTCP,避免随后 A/B/C Jog 丢失 XYZ 补偿。下一项为矩阵中的 `TRT-R01`,属于既有恢复精度问题,不影响本专项参数应用流程。实现不依赖聊天记录。用户文字提及 Image #1,但本轮未收到可读取的图片资源,布局按现有结构预览实现。 本地体验地址:`http://127.0.0.1:5174/`。启动命令:`npm --prefix web/react run dev -- --port 5174 --strictPort`;该端口被占用时选择其他端口。 diff --git a/scripts/test_trt_rtcp_jog_browser.mjs b/scripts/test_trt_rtcp_jog_browser.mjs new file mode 100644 index 0000000..453f41d --- /dev/null +++ b/scripts/test_trt_rtcp_jog_browser.mjs @@ -0,0 +1,86 @@ +import assert from "node:assert/strict"; +import { mkdir, writeFile } from "node:fs/promises"; +import { pathToFileURL } from "node:url"; +import { buildXyzacMachine, buildXyzbcMachine } from "../web/react/src/xyzac-machine-model.ts"; + +const { chromium } = await import(pathToFileURL(process.env.PLAYWRIGHT_MODULE).href); +const output = new URL("../coverage/trt-parametric/", import.meta.url); +await mkdir(output, { recursive: true }); +const browser = await chromium.launch({ executablePath: "/usr/bin/google-chrome", headless: true, args: ["--no-sandbox", "--use-angle=swiftshader", "--enable-unsafe-swiftshader"] }); +const page = await browser.newPage({ viewport: { width: 1440, height: 1000 } }); +const errors = []; page.on("pageerror", (error) => errors.push(error.message)); +const control = (id) => page.locator(`[data-axis-control="${id}"]`); +const machine = page.locator(".xyzac-machine-view"); +const report = { report_id: "trt-rtcp-jog-browser-v1", status: "running", machines: [] }; +const sample = () => machine.evaluate((element) => ({ + joints: JSON.parse(element.dataset.xyzacJoints), offsets: JSON.parse(element.dataset.xyzacOffsets), + tick: Number(element.dataset.xyzacTick), rendered_tick: Number(element.dataset.xyzacRenderedTick), tool_tip: JSON.parse(element.dataset.xyzacToolTip), +})); +const rendered = () => page.waitForFunction(() => { + const e = document.querySelector(".xyzac-machine-view"); return e && e.dataset.xyzacTick === e.dataset.xyzacRenderedTick; +}); +const jog = async (axis, delta, index) => { + await control(`manual-axis-${axis}`).check(); + const before = await sample(); + const button = await control("manual-jog-positive").boundingBox(); + await page.mouse.move(button.x + button.width / 2, button.y + button.height / 2); await page.mouse.down(); + await page.waitForFunction(({ index, initial, delta }) => { + const e = document.querySelector(".xyzac-machine-view"); + return JSON.parse(e.dataset.xyzacJoints)[index] >= initial + delta; + }, { index, initial: before.joints[index], delta }); + await rendered(); const moving = await sample(); + await page.mouse.up(); + await page.waitForFunction(() => document.querySelector(".command-status")?.textContent?.includes("JOG_STOP acknowledged") || [...document.querySelectorAll("span")].some((s) => s.textContent === "JOG_STOP acknowledged")); + await rendered(); + return { axis, before, moving, stopped: await sample() }; +}; +try { + await page.goto(process.env.XYZAC_PANEL_URL ?? "http://127.0.0.1:5174/"); + await page.waitForFunction(() => document.querySelector("main")?.dataset.axisProgramLoading === "false"); + for (const coordinates of ["XYZAC", "XYZBC"]) { + if (coordinates === "XYZBC") { + await control("toolbar-power").click(); + await page.waitForFunction(() => !document.querySelector('.trt-geometry input[aria-label="x-rot-point"]').disabled); + await control("machine-type-select").selectOption({ label: "XYZBC TRT" }); + await page.waitForFunction(() => document.querySelector(".xyzac-machine-view")?.dataset.xyzacModelId === "xyzbc-trt" && document.querySelector("main")?.dataset.axisProgramLoading === "false"); + } + await control("toolbar-power").click(); await control("manual-home-all").click(); + await page.waitForFunction(() => !document.querySelector('[data-axis-control="switchkins-1"]').disabled); + // Move off the rotary centre before enabling TCP, to make C compensation visible. + await jog("x", 4, 0); await jog("y", 3, 1); + await control("switchkins-1").click(); + await page.waitForFunction(() => document.querySelector('[data-axis-control="switchkins-1"]').getAttribute("aria-pressed") === "true"); + await rendered(); + const initial = await sample(); + const model = coordinates === "XYZAC" ? buildXyzacMachine() : buildXyzbcMachine(); + model.update(initial); model.machine.updateMatrixWorld(true); + const target = model.workOrigin.worldToLocal(model.toolTip.getWorldPosition(model.workOrigin.position.clone())); + const rows = []; + for (const axis of [coordinates[3].toLowerCase(), "c", coordinates[3].toLowerCase(), "c"]) { + const row = await jog(axis, 2, axis === "c" ? 4 : 3); + assert.equal(await control("switchkins-1").getAttribute("aria-pressed"), "true"); + assert.ok(row.stopped.joints.slice(0, 3).some((v, i) => Math.abs(v - row.before.joints[i]) > 1e-5), `${coordinates} ${axis}: missing visible XYZ compensation`); + for (const phase of ["moving", "stopped"]) { + const state = row[phase]; model.update(state); model.machine.updateMatrixWorld(true); + const point = model.workOrigin.localToWorld(target.clone()); + const tip = model.toolTip.getWorldPosition(target.clone()); + state.tcp_error = tip.distanceTo(point); + assert.ok(state.tcp_error < 1e-7, `${coordinates} ${axis} ${phase}: ${state.tcp_error}`); + if (phase === "stopped") state.tool_tip.forEach((v, i) => assert.ok(Math.abs(v - tip.toArray()[i]) < 1e-7, "rendered tool tip must match the Worker joints")); + } + rows.push(row); + } + await page.screenshot({ path: new URL(`rtcp-jog-${coordinates.toLowerCase()}.png`, output).pathname, fullPage: true }); + model.dispose(); report.machines.push({ coordinates, rows }); + } + assert.deepEqual(errors, []); report.status = "verified"; +} catch (error) { + report.status = "failed"; report.error = String(error.stack ?? error); + await page.screenshot({ path: new URL("rtcp-jog-failure.png", output).pathname, fullPage: true }); + throw error; +} finally { + report.browser_errors = errors; + await writeFile(new URL("rtcp-jog-browser.report.json", output), JSON.stringify(report, null, 2) + "\n"); + await browser.close(); +} +console.log(JSON.stringify({ report_id: report.report_id, status: report.status, machines: report.machines.map((m) => ({ coordinates: m.coordinates, jogs: m.rows.length, max_tcp_error: Math.max(...m.rows.flatMap((r) => [r.moving.tcp_error, r.stopped.tcp_error])) })), browser_errors: errors })); diff --git a/web/react/src/XyzacMachineView.tsx b/web/react/src/XyzacMachineView.tsx index 90682e2..c3a5f65 100644 --- a/web/react/src/XyzacMachineView.tsx +++ b/web/react/src/XyzacMachineView.tsx @@ -136,7 +136,7 @@ export function XyzacMachineView({ visual, toolpath, view = "p", zoom = 1, rotat // workpiece path together with the physical table. const pathGroup = new THREE.Group(); pathGroup.name = "xyzac-toolpath"; assembly.joints.rotate.add(pathGroup); const liveGroup = new THREE.Group(); liveGroup.name = "xyzac-live-toolpath"; assembly.joints.rotate.add(liveGroup); - const pathMaterials = [0xdce7e8, 0xff9a55, 0x5c9d9a].map((color) => new THREE.LineBasicMaterial({ color })); + const pathMaterials = [0xffff00, 0xff9a55, 0x5c9d9a].map((color) => new THREE.LineBasicMaterial({ color })); const clearLines = (group: THREE.Group) => { group.children.forEach((child) => (child as THREE.Line).geometry.dispose()); group.clear(); }; const limits = new THREE.Box3Helper(new THREE.Box3(), 0xdd7566); scene.add(limits); const offsets = new THREE.AxesHelper(.8); scene.add(offsets); diff --git a/web/react/src/test_trt_rtcp_jog.mjs b/web/react/src/test_trt_rtcp_jog.mjs new file mode 100644 index 0000000..359ac76 --- /dev/null +++ b/web/react/src/test_trt_rtcp_jog.mjs @@ -0,0 +1,123 @@ +import assert from "node:assert/strict"; +import { readFile, mkdir, writeFile } from "node:fs/promises"; +import * as THREE from "three"; +import createModule from "../../../build-wasm/linuxcnc-sim-core.js"; +import { loadSimulationCase, toWorkerConfiguration } from "../../workspace/sim-case-loader.mjs"; +import { writeTrtGeometry } from "../../workspace/trt-geometry.mjs"; +import { MACHINE_DEFINITIONS } from "../../workspace/machine-definitions.mjs"; +import { SimSession, CONTEXT_ID } from "../../worker/sim-session.mjs"; +import { fnv1a64 } from "../../worker/replay.mjs"; +import { buildXyzacMachine, buildXyzbcMachine } from "./xyzac-machine-model.ts"; + +const root = new URL("../../../", import.meta.url); +const fetchImpl = async (url) => { + try { const source = await readFile(new URL(String(url).replace(/^\//, ""), root), "utf8"); return { ok: true, text: async () => source }; } + catch { return { ok: false }; } +}; +const wasmBinary = await readFile(new URL("build-wasm/linuxcnc-sim-core.wasm", root)); +const close = (actual, expected, message) => assert.ok(Math.abs(actual - expected) < 1e-7, `${message}: ${actual} != ${expected}`); +const rows = []; +for (const machine of MACHINE_DEFINITIONS) { + const raw = await loadSimulationCase({ path: machine.entrypoint, fetchImpl }); + const bundle = writeTrtGeometry(raw, { x_rot_point: 9, y_rot_point: -7, z_rot_point: 13 }); + const core = await createModule({ wasmBinary }); + const session = new SimSession(core, { sessionId: `rtcp-jog-${machine.id}` }); let seq = 0; + const send = (kind, payload = {}, expectedKind = null) => { + const result = session.accept({ schema_version: 1, context_id: CONTEXT_ID, session_id: session.sessionId, kind, seq: ++seq, operation_id: `jog-${seq}`, payload }); + if (expectedKind) assert.equal(result.kind, expectedKind); + else assert.notEqual(result.kind, "ERROR", `${kind}: ${JSON.stringify(result.payload)}`); + return result; + }; + send("HELLO"); send("SESSION_ATTACH"); + send("LOAD_WORKSPACE", { root_path: "/workspace", configuration: toWorkerConfiguration(bundle) }); + send("POWER", { active: true }); send("HOME", { all: true }); + for (let i = 0; i < 500 && !session.wasmHomeLimit.read().state.homed; i++) send("SIM_STEP", { cycles: 1 }); + assert.equal(session.wasmHomeLimit.read().state.homed, true); + const drain = () => { + for (let i = 0; i < 5000 && session.wasmMotion.read().state.queue_depth > 0; i++) send("SIM_STEP", { cycles: 1 }); + assert.equal(session.wasmMotion.read().state.queue_depth, 0); + }; + send("SET_MODE", { mode: "MDI" }); + send("MDI_EXECUTE", { block: "G21 G90 G1 X12 Y8 Z6 F600" }); drain(); + send("MDI_EXECUTE", { block: "M428" }); + send("SET_MODE", { mode: "MANUAL" }); + const model = machine.coordinates === "XYZAC" ? buildXyzacMachine() : buildXyzbcMachine(); + const start = session.wasmMotion.read().state; + const target = { ...start.position }; + const samples = []; + const check = (phase, snapshot = null) => { + const state = session.wasmMotion.read().state; + assert.equal(session.xyzacKinematics.activeMode, 1, phase); + assert.equal(state.active_tag, 1, `${phase}: RTCP motion mode must remain active`); + for (const axis of ["x", "y", "z"]) close(state.position[axis], target[axis], `${phase}: programmed TCP ${axis}`); + const joints = state.joint_commanded; + const offsets = session.xyzacKinematics.snapshot().offsets; + model.update({ joints, offsets }); model.machine.updateMatrixWorld(true); + const point = model.workOrigin.localToWorld(new THREE.Vector3(target.x * .01, target.z * .01, target.y * .01)); + const tip = model.toolTip.getWorldPosition(new THREE.Vector3()); + const error = tip.distanceTo(point); + assert.ok(error < 1e-7, `${phase}: machine model TCP error ${error}`); + if (snapshot?.visual?.joints) snapshot.visual.joints.forEach((v, i) => close(v, joints[i], `${phase}: visual joint ${i}`)); + if (snapshot?.visual?.motion_trace) for (const sample of snapshot.visual.motion_trace) { + model.update({ joints: sample.joints, offsets }); model.machine.updateMatrixWorld(true); + const samplePoint = model.workOrigin.localToWorld(new THREE.Vector3(target.x * .01, target.z * .01, target.y * .01)); + close(model.toolTip.getWorldPosition(new THREE.Vector3()).distanceTo(samplePoint), 0, `${phase}: live motion trace TCP`); + } + samples.push({ phase, tick: session.tick, pose: state.position, joints, error }); + return state; + }; + check("M428"); + for (const axis of [machine.axes[3], "c", machine.axes[3], "c"]) { + const before = session.wasmMotion.read().state; + send("JOG_START", { axis, direction: 1, continuous: true, increment: null }); + for (let i = 0; i < 15; i++) { + const result = send("SIM_STEP", { cycles: 1 }); + check(`${axis}-continuous-${i}`, result.payload.panel_snapshot); + } + const moving = session.wasmMotion.read().state; + assert.ok(moving.position[axis] > before.position[axis]); + assert.ok(moving.joint_commanded.slice(0, 3).some((v, i) => Math.abs(v - before.joint_commanded[i]) > 1e-5), `${axis}: XYZ compensation missing`); + const stopped = send("JOG_STOP"); + const after = check(`${axis}-released`, stopped.payload.panel_snapshot); + after.joint_commanded.forEach((v, i) => close(v, moving.joint_commanded[i], `${axis}: no release jump`)); + send("SIM_STEP", { cycles: 1 }); check(`${axis}-idle`); + const incrementalStart = session.wasmMotion.read().state.position[axis]; + send("JOG_START", { axis, direction: -1, increment: 1 }); drain(); + close(check(`${axis}-increment`).position[axis], incrementalStart - 1, `${axis}: incremental endpoint`); + } + const beforeInvalid = session.wasmMotion.read().state; + send("JOG_START", { axis: machine.axes[3], direction: 1, increment: 100000 }, "ERROR"); + send("JOG_START", { axis: "c", direction: 1, increment: "invalid" }, "ERROR"); + assert.deepEqual(check("invalid-jog-retains-rtcp").joint_commanded, beforeInvalid.joint_commanded); + send("JOG_STOP"); check("repeated-stop"); + const beforeAbort = session.wasmMotion.read().state.joint_commanded; + send("PROGRAM_ABORT"); + assert.deepEqual(check("abort-retains-rtcp").joint_commanded, beforeAbort); + const poweredOff = send("POWER", { active: false }); + assert.deepEqual(check("power-off-retains-rtcp", poweredOff.payload.panel_snapshot).joint_commanded, beforeAbort); + send("POWER", { active: true }); + send("KINEMATICS_SELECT", { type: 0 }); + const identityBefore = session.wasmMotion.read().state.joint_commanded; + send("JOG_START", { axis: machine.axes[3], direction: 1, increment: 2 }); drain(); + const identityAfter = session.wasmMotion.read().state.joint_commanded; + identityAfter.slice(0, 3).forEach((v, i) => close(v, identityBefore[i], "M429 XYZ uncompensated")); + send("JOG_STOP"); assert.equal(session.wasmMotion.read().state.active_tag, 0); + // A completed program line and a later jog may share the native TP ID. + const reusedId = 400000; + const collisionStart = session.wasmMotion.read().state.position; + assert.equal(session.wasmMotion.enqueue({ end: { ...collisionStart, x: collisionStart.x + .1 }, source_line: reusedId, kinematics_mode: 0, motion_type: 1, velocity: 10 }).status, "verified"); + drain(); send("KINEMATICS_SELECT", { type: 1 }); + assert.equal(session.wasmMotion.jog(5, 1, 2, reusedId).status, "verified"); + for (let i = 0; i < 5000 && session.wasmMotion.read().state.queue_depth > 0; i++) { + send("SIM_STEP", { cycles: 1 }); + assert.equal(session.wasmMotion.read().state.active_tag, 1, "jog must replace the completed line's mode mapping"); + } + assert.equal(session.wasmMotion.read().state.queue_depth, 0); + send("JOG_STOP"); assert.equal(session.wasmMotion.read().state.active_tag, 1); + model.dispose(); + rows.push({ machine: machine.id, samples, identity_before: identityBefore, identity_after: identityAfter, reused_segment_id: "verified" }); +} +const report = { report_id: "trt-rtcp-jog-v1", status: "verified", rows }; +const dir = new URL("coverage/trt-parametric/", root); await mkdir(dir, { recursive: true }); +await writeFile(new URL("rtcp-jog.report.json", dir), JSON.stringify({ ...report, state_hash: fnv1a64(report) }, null, 2) + "\n"); +console.log(JSON.stringify({ report_id: report.report_id, status: report.status, rows: rows.map((r) => ({ machine: r.machine, samples: r.samples.length, max_tcp_error: Math.max(...r.samples.map((s) => s.error)) })) })); diff --git a/web/worker/test_xyzac_runtime_followups.mjs b/web/worker/test_xyzac_runtime_followups.mjs index 15b9db9..d2192ad 100644 --- a/web/worker/test_xyzac_runtime_followups.mjs +++ b/web/worker/test_xyzac_runtime_followups.mjs @@ -31,9 +31,11 @@ assert.equal(blocked.payload.code, "axis_gate"); assert.equal(blocked.payload.reason, "xyzac_machine_off"); assert.equal(blocked.payload.message_key, "xyzac_machine_off"); first.send("POWER", { active: true }); -first.send("HOME", { all: true }); -first.send("PROGRAM_LOAD", { source: PROGRAM, path: "followups.ngc" }); -first.send("PROGRAM_RUN"); +assert.equal(first.send("HOME", { all: true }).kind, "COMMAND_RESULT"); +for (let tick = 0; tick < 500 && !first.session.wasmHomeLimit.read().state.homed; tick++) first.send("SIM_STEP", { cycles: 1 }); +assert.equal(first.session.wasmHomeLimit.read().state.homed, true); +assert.equal(first.send("PROGRAM_LOAD", { source: PROGRAM, path: "followups.ngc" }).kind, "COMMAND_RESULT"); +assert.equal(first.send("PROGRAM_RUN").kind, "COMMAND_RESULT"); const compact = first.send("SIM_STEP", { cycles: 1, response: "motion_delta" }); assert.equal(compact.payload.snapshot_mode, "motion_delta"); assert.equal(compact.payload.panel_snapshot, undefined); diff --git a/web/worker/wasm-linuxcnc-tp.mjs b/web/worker/wasm-linuxcnc-tp.mjs index 7745cfd..3bea4c5 100644 --- a/web/worker/wasm-linuxcnc-tp.mjs +++ b/web/worker/wasm-linuxcnc-tp.mjs @@ -95,7 +95,15 @@ export class WasmLinuxcncTp { setVelocityScale(value) { if (!this.available) return this.read(); const result = call(this.core, "sim_linuxcnc_tp_set_velocity_scale", "number", ["number", "number"], [this.planner, Number(value)]); if (result !== 0) throw new Error(`linuxcnc_tp_velocity_scale_${result}`); return this.read(); } setJogScale(value) { if (!this.available) return this.read(); const result = call(this.core, "sim_linuxcnc_tp_set_jog_scale", "number", ["number", "number"], [this.planner, Number(value)]); if (result !== 0) throw new Error(`linuxcnc_tp_jog_scale_${result}`); return this.read(); } setAxisLimit(axis, minimum, maximum) { if (!this.available) return this.read(); const result = call(this.core, "sim_linuxcnc_tp_set_axis_limit", "number", ["number", "number", "number", "number"], [this.planner, Number(axis), Number(minimum), Number(maximum)]); if (result !== 0) throw new Error(`linuxcnc_tp_axis_limit_${result}`); return this.read(); } - jog(axis, direction, increment, tag = 0) { if (!this.available) return { status: "blocked", code: "linuxcnc_tp_unavailable" }; const result = call(this.core, "sim_linuxcnc_tp_jog", "number", ["number", "number", "number", "number", "number"], [this.planner, Number(axis), Number(direction), Number(increment), Number(tag)]); return result === 0 ? { status: "verified", command: "JOG_START" } : { status: "error", code: `linuxcnc_tp_jog_${result}` }; } + jog(axis, direction, increment, tag = 0) { + if (!this.available) return { status: "blocked", code: "linuxcnc_tp_unavailable" }; + const result = call(this.core, "sim_linuxcnc_tp_jog", "number", ["number", "number", "number", "number", "number"], [this.planner, Number(axis), Number(direction), Number(increment), Number(tag)]); + if (result !== 0) return { status: "error", code: `linuxcnc_tp_jog_${result}` }; + // The native jog tag is a segment ID, not a kinematics mode. Replace any + // earlier program-line mapping with this jog's current coordinate frame. + if (Number(tag) > 0) this.segmentTags.set(Number(tag), this.activeTag); + return { status: "verified", command: "JOG_START" }; + } jogVelocity(axis) { if (!this.available) return 0; const index = { x: 0, y: 1, z: 2, a: 3, b: 4, c: 5, u: 6, v: 7, w: 8 }[String(axis).toLowerCase()]; return index === undefined ? 0 : Number(call(this.core, "sim_linuxcnc_tp_jog_velocity", "number", ["number", "number"], [this.planner, index])); } setPaused(value) { this.controls.paused = Boolean(value); if (this.available) call(this.core, "sim_linuxcnc_tp_set_paused", "number", ["number", "number"], [this.planner, this.controls.paused ? 1 : 0]); return this.read(); } stepLine() { @@ -214,7 +222,13 @@ export class WasmLinuxcncTp { } reset() { if (this.available) call(this.core, "sim_linuxcnc_tp_reset", "number", ["number"], [this.planner]); this.controls.paused = false; this.activeTag = 0; this.segmentTags.clear(); this.lastActiveId = 0; this.queueDepthOverride = null; this.executionState = 3; return this.read(); } - abort() { if (this.available) call(this.core, "sim_linuxcnc_tp_abort", "number", ["number"], [this.planner]); this.activeTag = 0; this.segmentTags.clear(); this.lastActiveId = 0; this.queueDepthOverride = null; this.executionState = 3; return this.read(); } + abort() { + if (this.available) call(this.core, "sim_linuxcnc_tp_abort", "number", ["number"], [this.planner]); + // Stopping motion is not M429: keep the coordinate frame of the stopped + // pose, so its WASM inverse and the next jog retain RTCP compensation. + this.segmentTags.clear(); this.lastActiveId = 0; this.queueDepthOverride = null; this.executionState = 3; + return this.read(); + } exportState() { const current = this.read(); const segments = [];