CIRCLE Mode (Plane)
Executive Summary
CIRCLE mode is a simple, non-GPS flight mode that forces the aircraft to fly in a circle at a fixed bank angle while maintaining its current altitude. Unlike LOITER mode, it does not attempt to hold a specific geographic position. It is often used as a failsafe behavior or a simple "park" mode when GPS is unreliable.
Theory & Concepts
1. Ground Track vs. Air Track
In fixed-wing flight, wind is a massive factor.
- Air Track: If you just hold a fixed bank angle (Manual), you will fly in a circle relative to the air. If there is a 20 m/s wind, your circle will drift 20 meters every second relative to the ground.
- The Circle Mode (Dumb): Plane CIRCLE mode is a "Fixed Bank" mode. It is useful because it doesn't require a GPS, but it is not a "Position Hold." It is a way to stay in a general area while descending or waiting for a signal.
2. Centripetal Force and Lift
When a plane banks, some of its lift is diverted to pull the plane into a turn (Centripetal Force).
- The Problem: Diversion of lift means there is less vertical lift to fight gravity.
- The Autopilot: ArduPilot's CIRCLE mode automatically increases the Pitch Angle and Throttle to compensate for this lost lift, ensuring the plane stays at its target altitude throughout the orbit.
Hardware Dependency Matrix
This mode is designed to work with minimal sensors.
| Sensor | Requirement | Code Implementation Notes |
|---|---|---|
| GPS | NONE | Not used. The circle will drift with the wind. |
| Gyro/Accel | CRITICAL | Required for bank angle stabilization. |
| Barometer | REQUIRED | Required for altitude hold. |
Control Architecture (Engineer's View)
The logic is extremely simple compared to Loiter.
- Bank Angle:
- The target Roll is set to
ROLL_LIMIT / 3. - Example: If your
ROLL_LIMIT_DEGis 45, the plane banks at 15 degrees. - Direction: Always clockwise by default (positive roll).
- Code Path:
ModeCircle::update()setsnav_roll_cd.
- The target Roll is set to
- Pitch/Throttle:
- Uses the standard Altitude Hold controller (
calc_nav_pitch/calc_throttle). - It attempts to hold the altitude recorded when the mode was engaged.
- Uses the standard Altitude Hold controller (
Comparison: CIRCLE vs LOITER
- CIRCLE: "dumb" bank. Drifts with wind. No GPS required. Fixed radius (determined by airspeed and bank angle).
- LOITER: "smart" navigation. Holds 3D GPS coordinate. Adjusts bank angle to maintain a perfect circle over the ground regardless of wind.
Failsafe Logic
- Long Range Failsafe: CIRCLE is often used as the "Short Failsafe" action because it keeps the plane local without requiring a complex return path logic immediately.
Key Parameters
| Parameter | Default | Description |
|---|---|---|
ROLL_LIMIT_DEG |
45 | The bank angle in CIRCLE mode is derived from this (Limit / 3). |
Source Code Reference
- Mode Logic:
ardupilot/ArduPlane/mode_circle.cpp