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:
@@ -25,8 +25,6 @@ class GimbalNode(Node):
|
||||
|
||||
self.declare_parameter('serial_port', '/dev/ttyTHS1')
|
||||
self.declare_parameter('baud_rate', 115200)
|
||||
self.declare_parameter('auto_tracking_enabled', True)
|
||||
|
||||
port = self.get_parameter('serial_port').value
|
||||
baud = self.get_parameter('baud_rate').value
|
||||
|
||||
@@ -53,6 +51,8 @@ class GimbalNode(Node):
|
||||
String, '/gimbal/mode', self._mode_callback, 10
|
||||
)
|
||||
|
||||
self._current_mode = 'debug'
|
||||
|
||||
self.get_logger().info(
|
||||
'GimbalNode ready - subs: /cmd_gimbal, /vision/target, '
|
||||
'/pid_config, /gimbal/mode'
|
||||
@@ -66,6 +66,8 @@ class GimbalNode(Node):
|
||||
self.get_logger().error(f'Serial write error: {e}')
|
||||
|
||||
def _cmd_gimbal_callback(self, msg: Twist):
|
||||
if self._current_mode != 'manual':
|
||||
return
|
||||
yaw_vel = float(msg.angular.z)
|
||||
pitch_vel = float(msg.angular.y)
|
||||
self.get_logger().debug(
|
||||
@@ -79,6 +81,8 @@ class GimbalNode(Node):
|
||||
self._write_frame(data)
|
||||
|
||||
def _target_callback(self, msg: Point):
|
||||
if self._current_mode != 'auto':
|
||||
return
|
||||
self.get_logger().debug(
|
||||
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}')
|
||||
return
|
||||
|
||||
self._current_mode = mode
|
||||
self.get_logger().info(f'Sending command: 0xA7 cmd=0x{cmd:02X} ({mode})')
|
||||
data = bytearray([0xA7, cmd])
|
||||
data.append(_checksum(data))
|
||||
|
||||
Reference in New Issue
Block a user