# Rover Controller The RoverController creates a moving landing pad target. ## Usage The rover controller is automatically included when running `controllers.py`: ```bash # Stationary rover (default) python controllers.py # Moving rover python controllers.py --pattern circular --speed 0.3 ``` ### Options | Option | Short | Default | Description | |--------|-------|---------|-------------| | `--pattern` | `-p` | stationary | Movement pattern | | `--speed` | `-s` | 0.5 | Speed in m/s | | `--amplitude` | `-a` | 2.0 | Amplitude in meters | ## Movement Patterns ### Stationary ```bash python controllers.py --pattern stationary ``` Rover stays at origin. Best for initial testing. ### Linear ```bash python controllers.py --pattern linear --speed 0.3 --amplitude 2.0 ``` Oscillates along X-axis. ### Circular ```bash python controllers.py --pattern circular --speed 0.5 --amplitude 2.0 ``` Follows circular path of radius `amplitude`. ### Random ```bash python controllers.py --pattern random --speed 0.3 --amplitude 2.0 ``` Moves to random positions. Changes target every 3 seconds. ### Square ```bash python controllers.py --pattern square --speed 0.5 --amplitude 2.0 ``` Square pattern with corners at `(±amplitude, ±amplitude)`. ## Difficulty Levels | Level | Pattern | Speed | Description | |-------|---------|-------|-------------| | Beginner | stationary | 0.0 | Static target | | Easy | linear | 0.2 | Predictable 1D | | Medium | circular | 0.3 | Smooth 2D | | Hard | random | 0.3 | Unpredictable | | Expert | square | 0.5 | Sharp turns | ## Progressive Testing Start easy and increase difficulty: ```bash # Step 1: Static target python controllers.py --pattern stationary # Step 2: Slow linear motion python controllers.py --pattern linear --speed 0.2 # Step 3: Slow circular motion python controllers.py --pattern circular --speed 0.2 # Step 4: Faster circular python controllers.py --pattern circular --speed 0.4 # Step 5: Random python controllers.py --pattern random --speed 0.3 ``` ## Published Topics | Topic | Type | Description | |-------|------|-------------| | `/rover/cmd_vel` | `Twist` | Velocity commands | | `/rover/position` | `Point` | Current position | | `/rover/telemetry` | `String` | Full state (JSON) | ## GPS-Denied Note In GPS-denied mode, the drone cannot directly access rover position. Instead, it must detect the landing pad visually via `landing_pad` sensor data. The `/rover/telemetry` topic is used internally by the RoverController but the DroneController should primarily rely on vision-based `landing_pad` detection in the drone telemetry.