fix: gate gimbal callbacks by current mode

Add _current_mode state to prevent manual commands during auto
tracking and vice versa. Remove unused auto_tracking_enabled param.
This commit is contained in:
dev01
2026-06-03 22:08:14 +08:00
parent e8c6957772
commit 0340d40b84
@@ -25,8 +25,6 @@ class GimbalNode(Node):
self.declare_parameter('serial_port', '/dev/ttyTHS1') self.declare_parameter('serial_port', '/dev/ttyTHS1')
self.declare_parameter('baud_rate', 115200) self.declare_parameter('baud_rate', 115200)
self.declare_parameter('auto_tracking_enabled', True)
port = self.get_parameter('serial_port').value port = self.get_parameter('serial_port').value
baud = self.get_parameter('baud_rate').value baud = self.get_parameter('baud_rate').value
@@ -53,6 +51,8 @@ class GimbalNode(Node):
String, '/gimbal/mode', self._mode_callback, 10 String, '/gimbal/mode', self._mode_callback, 10
) )
self._current_mode = 'debug'
self.get_logger().info( self.get_logger().info(
'GimbalNode ready - subs: /cmd_gimbal, /vision/target, ' 'GimbalNode ready - subs: /cmd_gimbal, /vision/target, '
'/pid_config, /gimbal/mode' '/pid_config, /gimbal/mode'
@@ -66,6 +66,8 @@ class GimbalNode(Node):
self.get_logger().error(f'Serial write error: {e}') self.get_logger().error(f'Serial write error: {e}')
def _cmd_gimbal_callback(self, msg: Twist): def _cmd_gimbal_callback(self, msg: Twist):
if self._current_mode != 'manual':
return
yaw_vel = float(msg.angular.z) yaw_vel = float(msg.angular.z)
pitch_vel = float(msg.angular.y) pitch_vel = float(msg.angular.y)
self.get_logger().debug( self.get_logger().debug(
@@ -79,6 +81,8 @@ class GimbalNode(Node):
self._write_frame(data) self._write_frame(data)
def _target_callback(self, msg: Point): def _target_callback(self, msg: Point):
if self._current_mode != 'auto':
return
self.get_logger().debug( self.get_logger().debug(
f'Auto tracking: error_x={msg.x:.4f}, error_y={msg.y:.4f}' f'Auto tracking: error_x={msg.x:.4f}, error_y={msg.y:.4f}'
) )
@@ -138,6 +142,7 @@ class GimbalNode(Node):
self.get_logger().warn(f'Unknown mode command: {mode}') self.get_logger().warn(f'Unknown mode command: {mode}')
return return
self._current_mode = mode
self.get_logger().info(f'Sending command: 0xA7 cmd=0x{cmd:02X} ({mode})') self.get_logger().info(f'Sending command: 0xA7 cmd=0x{cmd:02X} ({mode})')
data = bytearray([0xA7, cmd]) data = bytearray([0xA7, cmd])
data.append(_checksum(data)) data.append(_checksum(data))