From bb041056c268527ea272b449ffbe8d4d87b5f5db Mon Sep 17 00:00:00 2001 From: schneider <schneider@blinkenlichts.net> Date: Wed, 9 Aug 2023 00:13:47 +0200 Subject: [PATCH] imu: put imu state into an object --- python_payload/apps/demo_imu/__init__.py | 4 +- python_payload/st3m/input.py | 49 ++++++++++++------------ 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/python_payload/apps/demo_imu/__init__.py b/python_payload/apps/demo_imu/__init__.py index c4b6929987..f157d723cf 100644 --- a/python_payload/apps/demo_imu/__init__.py +++ b/python_payload/apps/demo_imu/__init__.py @@ -25,8 +25,8 @@ class IMUDemo(Application): def think(self, ins: InputState, delta_ms: int) -> None: super().think(ins, delta_ms) - self.v_y += ins.acc[0] * delta_ms / 1000.0 * 10 - self.v_x += ins.acc[1] * delta_ms / 1000.0 * 10 + self.v_y += ins.imu.acc[0] * delta_ms / 1000.0 * 10 + self.v_x += ins.imu.acc[1] * delta_ms / 1000.0 * 10 x = self.p_x + self.v_x * delta_ms / 1000.0 y = self.p_y + self.v_y * delta_ms / 1000.0 diff --git a/python_payload/st3m/input.py b/python_payload/st3m/input.py index e29cd6ae18..ea420b9a0a 100644 --- a/python_payload/st3m/input.py +++ b/python_payload/st3m/input.py @@ -8,6 +8,26 @@ from st3m.power import Power power = Power() +class IMUState: + """ + State of the Inertial Measurement Unit + + Acceleration in m/s**2, roation rate in deg/s, pressure in Pascal + """ + + __slots__ = ("acc", "gyro", "pressure") + + def __init__( + self, + acc: Tuple[float, float, float], + gyro: Tuple[float, float, float], + pressure: float, + ) -> None: + self.acc = acc + self.gyro = gyro + self.pressure = pressure + + class InputState: """ Current state of inputs from badge user. Passed via think() to every @@ -21,9 +41,7 @@ class InputState: captouch: captouch.CaptouchState, left_button: int, right_button: int, - acc: Tuple[float, float, float], - gyro: Tuple[float, float, float], - pressure: float, + imu: IMUState, temperature: float, battery_voltage: float, ) -> None: @@ -31,9 +49,7 @@ class InputState: self.captouch = captouch self.left_button = left_button self.right_button = right_button - self.acc = acc - self.gyro = gyro - self.pressure = pressure + self.imu = imu self.temperature = temperature self.battery_voltage = battery_voltage @@ -52,14 +68,14 @@ class InputState: acc = imu.acc_read() gyro = imu.gyro_read() pressure, temperature = imu.pressure_read() + imu_state = IMUState(acc, gyro, pressure) + battery_voltage = power.battery_voltage return InputState( cts, left_button, right_button, - acc, - gyro, - pressure, + imu_state, temperature, battery_voltage, ) @@ -484,21 +500,6 @@ class TriSwitchState: self.right._ignore_pressed() -class IMUState: - __slots__ = ("acc", "gyro", "pressure", "temperature") - - def __init__(self) -> None: - self.acc = (0.0, 0.0, 0.0) - self.gyro = (0.0, 0.0, 0.0) - self.pressure = 0.0 - self.temperature = 0.0 - - def _update(self, ts: int, hr: InputState) -> None: - self.acc = imu.acc_read() - self.gyro = imu.gyro_read() - self.pressure, self.temperature = imu.pressure_read() - - class InputController: """ A stateful input controller. It accepts InputState updates from the Reactor -- GitLab