diff --git a/src/components/panels/ScienceControlPanel.tsx b/src/components/panels/ScienceControlPanel.tsx index a8b34ca..34de05c 100644 --- a/src/components/panels/ScienceControlPanel.tsx +++ b/src/components/panels/ScienceControlPanel.tsx @@ -7,6 +7,13 @@ import ROSLIB from 'roslib'; // -------------------- // Types + Config // -------------------- + +interface RunPolarimeterResponse { + success: boolean; + message: string; + file_path: string; +} + type DCMotorConfig = { id: number; name: string; @@ -22,7 +29,6 @@ type ServoConfig = { defaultPosition: number; minPulseUs: number; maxPulseUs: number; - periodUs: number; maxDegrees: number; frequency: number; type: 'servo'; @@ -32,6 +38,7 @@ type MotorConfig = DCMotorConfig | ServoConfig; type SendCommandFn = ( motorID: number, + type: number, value: number, duration?: number, frequency?: number, @@ -50,6 +57,9 @@ type ServoMotorProps = { disabled: boolean; }; +const TYPE_DC = 0; +const TYPE_SERVO = 1; + function isDCMotor(motor: MotorConfig): motor is DCMotorConfig { return motor.type === 'dc'; } @@ -72,18 +82,6 @@ const motors: MotorConfig[] = [ defaultPosition: 90, minPulseUs: 615, maxPulseUs: 2495, - periodUs: 20000, - maxDegrees: 195, - frequency: 50, - type: 'servo', - }, - { - id: 27, - name: 'Polar Servo', - defaultPosition: 45, - minPulseUs: 615, - maxPulseUs: 2495, - periodUs: 20000, maxDegrees: 195, frequency: 50, type: 'servo', @@ -94,7 +92,6 @@ const motors: MotorConfig[] = [ defaultPosition: 45, minPulseUs: 350, maxPulseUs: 2500, - periodUs: 20000, maxDegrees: 360, frequency: 50, type: 'servo', @@ -107,8 +104,12 @@ const motors: MotorConfig[] = [ const ScienceControlPanel: React.FC = () => { const { ros } = useROS(); + const [title, setTitle] = useState(""); + const [polarStatus, setPolarStatus] = useState(""); + const sendCommand: SendCommandFn = ( motorID, + type, value, duration, frequency, @@ -132,6 +133,7 @@ const ScienceControlPanel: React.FC = () => { topic.publish( new ROSLIB.Message({ pin: motorID, + type: type, duty_cycle: dutyCycle, duration: safeDurationMs, frequency, @@ -141,6 +143,7 @@ const ScienceControlPanel: React.FC = () => { console.log('[SCIENCE PWM CMD]', { pin: motorID, + type: type, duty_cycle: dutyCycle, duration: safeDurationMs, frequency, @@ -148,6 +151,25 @@ const ScienceControlPanel: React.FC = () => { }); }; + const handlePolar = () => { + if (!ros) return; + + setPolarStatus("Waiting..."); + + const polarSrv = new ROSLIB.Service({ + ros, + name: "/run_polarimeter", + serviceType: "interfaces/srv/RunPolarimeter", + }); + + polarSrv.callService( + new ROSLIB.ServiceRequest({title: title}), + (response: RunPolarimeterResponse) => { + setPolarStatus(response.success ? "Success: " + response.message : "Failed"); + }, + ); + }; + return (

Science Control

@@ -170,6 +192,26 @@ const ScienceControlPanel: React.FC = () => { /> ) )} +
+

Polarimeter

+ + + +
+ + {polarStatus} +
+