145 lines
3.6 KiB
JSON
145 lines
3.6 KiB
JSON
{
|
|
"schema_version": "machine-capabilities.v1",
|
|
"machine_id": "fullum-alpha",
|
|
"machine_family": "swing-arm",
|
|
"machine_name": "Fullum swing-arm polisher",
|
|
"controller_version": "polisher-control/0.1.0",
|
|
"supported_motion_families": [
|
|
"swing-arm-rosette"
|
|
],
|
|
"force_range_n": [
|
|
0,
|
|
80
|
|
],
|
|
"table_rpm_range": [
|
|
0,
|
|
5.0
|
|
],
|
|
"spindle_rpm_range": [
|
|
0,
|
|
80
|
|
],
|
|
"cam_amplitude_range_deg": [
|
|
0,
|
|
45
|
|
],
|
|
"cam_offset_range_deg": [
|
|
-30,
|
|
30
|
|
],
|
|
"force_modulation": {
|
|
"supported": true,
|
|
"max_harmonics": 3,
|
|
"max_amplitude_n": 20.0,
|
|
"notes": "Angle-synchronized force modulation from live table encoder angle; validate during commissioning."
|
|
},
|
|
"supported_dither_profiles": [
|
|
"none",
|
|
"default"
|
|
],
|
|
"segment_duration_limits": {
|
|
"min_s": 10,
|
|
"max_s": 7200
|
|
},
|
|
"pause_resume_support": true,
|
|
"telemetry_channels": [
|
|
{
|
|
"name": "timestamp_us",
|
|
"unit": "see docs/05-telemetry-channel-spec-v1.md",
|
|
"sample_rate_hz": 100
|
|
},
|
|
{
|
|
"name": "table_angle_deg",
|
|
"unit": "see docs/05-telemetry-channel-spec-v1.md",
|
|
"sample_rate_hz": 100
|
|
},
|
|
{
|
|
"name": "arm_angle_deg",
|
|
"unit": "see docs/05-telemetry-channel-spec-v1.md",
|
|
"sample_rate_hz": 100
|
|
},
|
|
{
|
|
"name": "fz_n",
|
|
"unit": "see docs/05-telemetry-channel-spec-v1.md",
|
|
"sample_rate_hz": 100
|
|
},
|
|
{
|
|
"name": "mx",
|
|
"unit": "see docs/05-telemetry-channel-spec-v1.md",
|
|
"sample_rate_hz": 100
|
|
},
|
|
{
|
|
"name": "my",
|
|
"unit": "see docs/05-telemetry-channel-spec-v1.md",
|
|
"sample_rate_hz": 100
|
|
},
|
|
{
|
|
"name": "mz",
|
|
"unit": "see docs/05-telemetry-channel-spec-v1.md",
|
|
"sample_rate_hz": 100
|
|
},
|
|
{
|
|
"name": "spindle_rpm_actual",
|
|
"unit": "see docs/05-telemetry-channel-spec-v1.md",
|
|
"sample_rate_hz": 100
|
|
},
|
|
{
|
|
"name": "table_rpm_actual",
|
|
"unit": "see docs/05-telemetry-channel-spec-v1.md",
|
|
"sample_rate_hz": 100
|
|
},
|
|
{
|
|
"name": "arm_amplitude_deg_derived",
|
|
"unit": "see docs/05-telemetry-channel-spec-v1.md",
|
|
"sample_rate_hz": 100
|
|
},
|
|
{
|
|
"name": "arm_center_deg_derived",
|
|
"unit": "see docs/05-telemetry-channel-spec-v1.md",
|
|
"sample_rate_hz": 100
|
|
},
|
|
{
|
|
"name": "machine_state",
|
|
"unit": "see docs/05-telemetry-channel-spec-v1.md",
|
|
"sample_rate_hz": 100
|
|
},
|
|
{
|
|
"name": "force_setpoint_n",
|
|
"unit": "see docs/05-telemetry-channel-spec-v1.md",
|
|
"sample_rate_hz": 100
|
|
},
|
|
{
|
|
"name": "spindle_direction_setpoint",
|
|
"unit": "enum(cw|ccw)",
|
|
"sample_rate_hz": 10
|
|
},
|
|
{
|
|
"name": "spindle_direction_actual",
|
|
"unit": "enum(cw|ccw)",
|
|
"sample_rate_hz": 10
|
|
}
|
|
],
|
|
"safety_limits": {
|
|
"max_force_n": 80,
|
|
"max_table_rpm": 5.0,
|
|
"max_spindle_rpm": 80,
|
|
"notes": "Initial source-aligned limits; final hardware commissioning must verify."
|
|
},
|
|
"known_constraints": [
|
|
"Manual mode is the first production target.",
|
|
"No powered Zero-G/admittance mode in v1.",
|
|
"Oscillation amplitude/center are operator-entered configuration in v1, not actuated cam commands.",
|
|
"Controller rejects unknown controller-job fields rather than silently ignoring them."
|
|
],
|
|
"unknowns": [
|
|
"Exact KWR75B-CAN frame map, scaling, status bits, and update rate.",
|
|
"Final ODrive runtime interface and command scaling.",
|
|
"Final SV2A-2150 torque/current command scaling and Iq monitor mapping.",
|
|
"Final safety relay model and wiring details."
|
|
],
|
|
"supported_spindle_directions": [
|
|
"cw",
|
|
"ccw"
|
|
]
|
|
}
|