From 1e660fcdb610511744fc3d859d3a018b5b3d6c91 Mon Sep 17 00:00:00 2001 From: JackM323 Date: Wed, 29 Jul 2026 22:17:28 +0200 Subject: [PATCH] Add copy methods, fix state imports, pass lock Add copy() to PosArray, DegArray and RadArray to allow easy shallow copies. Change RobotState imports in idle.py and walking.py to use explicit 'from RobotState.RobotState import RobotState' to avoid import issues. In main.py create a threading.Lock and pass it into the controller thread args to prepare for synchronized access in controller_loop. --- DataTypes.py | 6 ++++++ RobotState/idle.py | 2 +- RobotState/walking.py | 2 +- main.py | 3 ++- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/DataTypes.py b/DataTypes.py index 1ae6f35..061cafa 100644 --- a/DataTypes.py +++ b/DataTypes.py @@ -19,6 +19,8 @@ class PosArray: def __getitem__(self, key): return self.data[key] def __iter__(self): return iter(self.data) def __repr__(self): return f"PosArray(\n{self.data}\n)" + def copy(self): + return PosArray(self.data.copy()) @dataclass @@ -37,6 +39,8 @@ class DegArray: def __getitem__(self, key): return self.data[key] def __iter__(self): return iter(self.data) def __repr__(self): return f"PosArray(\n{self.data}\n)" + def copy(self): + return DegArray(self.data.copy()) @dataclass class RadArray: @@ -53,6 +57,8 @@ class RadArray: def __getitem__(self, key): return self.data[key] def __iter__(self): return iter(self.data) def __repr__(self): return f"PosArray(\n{self.data}\n)" + def copy(self): + return RadArray(self.data.copy()) @dataclass class RobotCommand: diff --git a/RobotState/idle.py b/RobotState/idle.py index f3bc752..b0c6ffa 100644 --- a/RobotState/idle.py +++ b/RobotState/idle.py @@ -1,4 +1,4 @@ -import RobotState +from RobotState.RobotState import RobotState class IdleState(RobotState): def update(self, ctx, intent, dt): diff --git a/RobotState/walking.py b/RobotState/walking.py index 1c52411..b1dc8b0 100644 --- a/RobotState/walking.py +++ b/RobotState/walking.py @@ -4,7 +4,7 @@ import numpy as np import config as cfg import kinematics as kin import DataTypes as dt -import RobotState +from RobotState.RobotState import RobotState class WalkingState(RobotState): diff --git a/main.py b/main.py index b3cd014..a9d3316 100644 --- a/main.py +++ b/main.py @@ -15,6 +15,7 @@ import DataTypes as dt def main(): intent = ControlIntent() + lock = threading.Lock() ctx = RobotContext() ctx.center_points = dt.PosArray([ @@ -29,7 +30,7 @@ def main(): controller_thread = threading.Thread( target=controller_loop, - args=(intent,), + args=(intent, lock), daemon=True ) controller_thread.start()