Autopilot
At the center of the Guidance and Control system is the Autopilot, implemented in C++. This is located inside the pegasus_autopilot/autopilot package.
The Autopilot is responsible for keeping track of the current operating mode of the vehicle. It exposes to each operation mode the following APIs:
Control- Provides the control commands to the vehicle to track a given position, attitude, velocity, etc.Geofencing- Checks if the vehicle is within the geofence and if not, provides the control commands to bring the vehicle back inside the geofence.Trajectory Manager- Manages desired trajectories for the vehicle to follow.
It also provides each mode with the current state of the vehicle, which includes the current position, velocity, attitude, etc.
The autopilot operation modes, controllers, geofencing and trajectory manager are implemented as ROS 2 plugins. This allows for easy extensibility and customization of the Autopilot, without having
to modify the base autopilot packages. The Autopilot is responsible for loading the plugins at runtime and managing the communication between them.
classDiagram
pegasus <|-- pegasus_interfaces
pegasus <|-- pegasus_console
pegasus <|-- pegasus_autopilot
pegasus <|-- pegasus_api
pegasus_autopilot <|-- autopilot_modes
pegasus_autopilot <|-- autopilot_controllers
pegasus_autopilot <|-- geofencing
pegasus_autopilot <|-- trajectory_manager
trajectory_manager <|-- static_trajectory_manager
static_trajectory_manager <|-- static_trajectories
geofencing <|-- box_geofencing
pegasus_interfaces <|-- mocap_interface
pegasus_interfaces <|-- mavlink_interface
class pegasus{
<<Meta Package>>
VehicleLaunchFiles
VehicleConfigurationFiles
}
class mocap_interface{
<<C++ Package>>
}
class pegasus_interfaces{
<<Meta Package>>
}
class mavlink_interface{
<<C++ Package>>
}
class pegasus_console{
<<C++ Package>>
}
class pegasus_autopilot{
<<C++ Package>>
}
class autopilot_controllers{
<<C++ Package>>
}
class autopilot_modes{
<<C++ Package>>
}
class pegasus_api{
<<Python Package>>
}
class trajectory_manager{
<<C++ Package>>
}