...
This may require a sensor or something as simple as a limit switch attached to an antenna pointed at the ground. When landing is detected, the drone will either directly transition to the next mode or move to spin down/cool off the motors
Code Prototype:
For calculating waypoint targets after the ground height sensor has been checked to see if the drone has landed.
Code Block | ||
---|---|---|
| ||
_PathData LandingTakeoffManager::createLandingWaypoint(const SFOutput_t & input)
{
// Use current Lat/long if origin not known
if (landingLat == -1 and landingLong == -1) {
landingLat = input.latitude;
landingLong = input.longitude;
}
_PathData desiredWaypoint;
desiredWaypoint.latitude = landingLat;
desiredWaypoint.longitude = landingLong;
desiredWaypoint.waypointType = LANDING_WAYPOINT;
int curAltitude = input.altitude;
desiredWaypoint.altitude = getAltitudeTarget(curAltitude, groundHeight);
return desiredWaypoint;
}
double LandingTakeoffManager::getAltitudeTarget(double curAltitude, double targetAltitude)
{
double waypointTarget;
double droneHeight = (curAltitude - targetAltitude);
if (droneHeight < 1.0) {
// Touchdown speed of 0.1 m/s, set as waypoint targets at PM Freq
waypointTarget = curAltitude - (0.1 / PM_FREQ);
} else {
// Scale descent velocity based on 0.2 * height (Eg. 0.4 m/s at 2m)
// Use altitude waypoint targets geing calculated at PM Freq
waypointTarget = droneHeight * (0.2 / PM_FREQ);
}
return waypointTarget;
} |
Future Landing Takeoff Manager (Not for 2022 Competition):
...