From 55ca69c0d63485a6d229d6851e8ef80e969a9853 Mon Sep 17 00:00:00 2001 From: kevinjin420 Date: Fri, 24 Apr 2026 23:25:30 -0400 Subject: [PATCH] alignment toggle --- srv/ToggleAlignment.srv | 3 ++ .../basestation_gui/backend/ws/auton_ws.py | 16 ++++++++- .../frontend/src/components/AutonTyping.vue | 35 +++++++++++++++++++ 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 srv/ToggleAlignment.srv diff --git a/srv/ToggleAlignment.srv b/srv/ToggleAlignment.srv new file mode 100644 index 000000000..a46718c81 --- /dev/null +++ b/srv/ToggleAlignment.srv @@ -0,0 +1,3 @@ +bool enable +--- +bool success diff --git a/teleoperation/basestation_gui/backend/ws/auton_ws.py b/teleoperation/basestation_gui/backend/ws/auton_ws.py index 763675065..a10abfb37 100644 --- a/teleoperation/basestation_gui/backend/ws/auton_ws.py +++ b/teleoperation/basestation_gui/backend/ws/auton_ws.py @@ -1,9 +1,11 @@ import asyncio from backend.ws.base_ws import WebSocketHandler -from backend.managers.ros import get_logger +from backend.managers.ros import get_logger, get_service_client +from backend.utils.ros_service import call_service_async from rclpy.action import ActionClient from mrover.action import TypingCode from mrover.msg import KeyboardYaw +from mrover.srv import ToggleAlignment class AutonHandler(WebSocketHandler): @@ -24,6 +26,8 @@ async def handle_message(self, data): await self.cancel_goal() else: await self.send_typing_code(code) + elif msg_type == 'toggle_alignment': + await self.toggle_alignment(data.get('enable', False)) else: get_logger().warning(f"Unhandled AUTON message: {msg_type}") @@ -60,6 +64,16 @@ def feedback_callback(self, feedback_msg): 'current_index': feedback.current_index, }) + async def toggle_alignment(self, enable: bool): + client = get_service_client(ToggleAlignment, '/toggle_alignment') + request = ToggleAlignment.Request() + request.enable = enable + result, error = await call_service_async(client, request) + if error: + self.schedule_send({'type': 'alignment_error', 'error': error}) + else: + self.schedule_send({'type': 'alignment_toggled', 'enable': enable, 'success': result.success}) + async def cancel_goal(self): if self.current_goal_handle: await asyncio.to_thread(self.current_goal_handle.cancel_goal_async) diff --git a/teleoperation/basestation_gui/frontend/src/components/AutonTyping.vue b/teleoperation/basestation_gui/frontend/src/components/AutonTyping.vue index 59715662f..3c59cbc41 100644 --- a/teleoperation/basestation_gui/frontend/src/components/AutonTyping.vue +++ b/teleoperation/basestation_gui/frontend/src/components/AutonTyping.vue @@ -29,6 +29,15 @@ YAW {{ yawAngle.toFixed(3) }}rad + @@ -49,6 +58,7 @@