38#include "generated/airframe.h"
41#ifndef DEFAULT_CIRCLE_RADIUS
42#define DEFAULT_CIRCLE_RADIUS 5.f
45#ifndef NAV_CLIMB_VSPEED
46#define NAV_CLIMB_VSPEED 0.5f
49#ifndef NAV_DESCEND_VSPEED
50#define NAV_DESCEND_VSPEED -0.8f
54#ifndef ARRIVED_AT_WAYPOINT
55#define ARRIVED_AT_WAYPOINT 3.0f
59#ifndef FAILSAFE_MODE_DISTANCE
60#define FAILSAFE_MODE_DISTANCE (1.2*MAX_DIST_FROM_HOME)
64#ifndef NAV_CARROT_DIST
65#define NAV_CARROT_DIST 12
74#ifndef NAVIGATION_FREQUENCY
75#if PERIODIC_FREQUENCY == 512
76#define NAVIGATION_FREQUENCY 16
78#define NAVIGATION_FREQUENCY 20
85#define NAV_HORIZONTAL_MODE_WAYPOINT 0
86#define NAV_HORIZONTAL_MODE_ROUTE 1
87#define NAV_HORIZONTAL_MODE_CIRCLE 2
88#define NAV_HORIZONTAL_MODE_ATTITUDE 3
89#define NAV_HORIZONTAL_MODE_NONE 4
90#define NAV_HORIZONTAL_MODE_GUIDED 5
92#define NAV_VERTICAL_MODE_MANUAL 0
93#define NAV_VERTICAL_MODE_CLIMB 1
94#define NAV_VERTICAL_MODE_ALT 2
95#define NAV_VERTICAL_MODE_GUIDED 3
100#define NAV_SETPOINT_MODE_POS 0
101#define NAV_SETPOINT_MODE_SPEED 1
102#define NAV_SETPOINT_MODE_ACCEL 2
103#define NAV_SETPOINT_MODE_ATTITUDE 3
104#define NAV_SETPOINT_MODE_QUAT 4
105#define NAV_SETPOINT_MODE_RATE 5
106#define NAV_SETPOINT_MODE_MANUAL 6
179#define GetPosX() (stateGetPositionEnu_f()->x)
181#define GetPosY() (stateGetPositionEnu_f()->y)
183#define GetPosAlt() (stateGetPositionEnu_f()->z+stateGetHmslOrigin_f())
185#define GetPosHeight() (stateGetPositionEnu_f()->z)
192#define GetAltRef() (stateGetHmslOrigin_f())
225#define NavStartDetectGround() ({ autopilot.detect_ground_once = true; false; })
226#define NavDetectGround() nav_detect_ground()
239#define NavSetFailsafe nav_set_failsafe
241#define NavSetGroundReferenceHere nav_reset_reference
242#define NavSetAltitudeReferenceHere nav_reset_alt
244#define NavSetWaypointHere waypoint_set_here_2d
245#define NavCopyWaypoint waypoint_copy
246#define NavCopyWaypointPositionOnly waypoint_position_copy
250#define NavCheckWaypointTime(wp, time) nav_check_wp_time(&waypoints[wp].enu_f, time)
257#define NavAttitude(_roll) { \
258 nav.horizontal_mode = NAV_HORIZONTAL_MODE_ATTITUDE; \
259 nav.setpoint_mode = NAV_SETPOINT_MODE_ATTITUDE; \
265#define NavVerticalAutoThrottleMode(_pitch) { \
266 nav.pitch = _pitch; \
271#define NavVerticalAltitudeMode(_alt, _pre_climb) { \
272 nav.vertical_mode = NAV_VERTICAL_MODE_ALT; \
273 nav.fp_altitude = _alt; \
277#define NavVerticalClimbMode(_climb) { \
278 nav.vertical_mode = NAV_VERTICAL_MODE_CLIMB; \
279 nav.climb = _climb; \
280 nav.speed.z = _climb; \
284#define NavVerticalThrottleMode(_throttle) { \
285 nav.vertical_mode = NAV_VERTICAL_MODE_MANUAL; \
286 nav.throttle = _throttle; \
290#define NavHeading nav_set_heading_rad
293#define NavSetMaxSpeed(_speed) { \
294 nav.fp_max_speed = _speed; \
380#define nav_IncreaseShift(x) {}
381#define nav_SetNavRadius(x) {}
382#define navigation_SetFlightAltitude(x) { \
383 flight_altitude = x; \
384 nav.nav_altitude = flight_altitude - stateGetHmslOrigin_f(); \
390#define NavVerticalAutoPitchMode(_throttle) {}
395#define NavFollow(_i, _d, _h) {}
uint8_t autopilot_get_mode(void)
get autopilot mode
bool autopilot_set_motors_on(bool motors_on)
turn motors on/off, eventually depending of the current mode set kill_throttle accordingly FIXME is i...
Core autopilot interface common to all firmwares.
Common flight_plan functions shared between fixedwing and rotorcraft.
struct EnuCoor_f * waypoint_get_enu_f(uint8_t wp_id)
Get ENU coordinates (float)
void nav_oval(uint8_t p1, uint8_t p2, float radius)
#define NavGlide(_start_wp, _wp)
#define NavApproaching(wp, time)
#define NavCircleWaypoint(wp, radius)
#define NavGotoWaypoint(_wp)
#define NavApproachingFrom(wp, from, time)
#define NavSegment(_start, _end)
static void nav_goto(struct EnuCoor_f *wp)
static void _nav_oval_init(void)
static void nav_route(struct EnuCoor_f *wp_start, struct EnuCoor_f *wp_end)
static void nav_circle(struct EnuCoor_f *wp_center, float radius)
static bool nav_approaching(struct EnuCoor_f *wp, struct EnuCoor_f *from, float approaching_time)
static void nav_stage_init(void)
Implement basic nav function.
Paparazzi floating point math for geodetic calculations.
vector in East North Up coordinates Units: meters
Paparazzi fixed point math for geodetic calculations.
struct EnuCoor_f speed
speed setpoint (in m/s)
void nav_home(void)
Home mode navigation (circle around HOME)
float flight_altitude
Dynamically adjustable, reset to nav_altitude when it is changing.
void nav_reset_reference(void)
Reset the geographic reference to the current GPS fix.
void nav_register_oval(navigation_oval_init _nav_oval_init, navigation_oval nav_oval)
struct FloatRates rates
rates setpoint (in rad/s)
void nav_set_heading_current(void)
Set heading to the current yaw angle.
float fp_max_speed
maximum speed setpoint from flight plan (in m/s), negative value means unset or invalid,...
uint32_t throttle
throttle command (in pprz_t)
void nav_reset_alt(void)
Reset the altitude reference to the current GPS alt.
float climb
climb setpoint (in m/s)
void nav_set_heading_towards_waypoint(uint8_t wp)
Set heading in the direction of a waypoint.
void compute_dist2_to_home(void)
Computes squared distance to the HOME waypoint potentially sets too_far_from_home.
bool nav_is_in_flight(void)
void nav_set_heading_towards(float x, float y)
Set heading to point towards x,y position in local coordinates.
struct RotorcraftNavigation nav
float dist2_to_home
squared distance to home waypoint
void(* navigation_goto)(struct EnuCoor_f *wp)
bool(* navigation_approaching)(struct EnuCoor_f *wp_to, struct EnuCoor_f *wp_from, float approaching_time)
float failsafe_mode_dist2
maximum squared distance to home wp before going to failsafe mode
void(* navigation_oval)(struct EnuCoor_f *wp1, struct EnuCoor_f *wp2, float radius)
void nav_init(void)
Navigation Initialisation.
void nav_parse_MOVE_WP(uint8_t *buf)
navigation_stage_init nav_stage_init
void nav_register_circle(navigation_circle nav_circle)
void nav_register_goto_wp(navigation_goto nav_goto, navigation_route nav_route, navigation_approaching nav_approaching)
Register functions.
navigation_approaching nav_approaching
struct FloatQuat quat
quaternion setpoint
void nav_parse_BLOCK(uint8_t *buf)
navigation_circle nav_circle
void(* navigation_oval_init)(void)
struct EnuCoor_f accel
accel setpoint (in m/s)
void nav_set_heading_towards_target(void)
Set heading in the direction of the target.
static void nav_oval_init(void)
float nav_altitude
current altitude setpoint (in meters): might differ from fp_altitude depending on altitude shift from...
float radius
radius setpoint (in meters)
float descend_vspeed
descend speed setting, mostly used in flight plans
float get_dist2_to_point(struct EnuCoor_f *p)
Returns squared horizontal distance to given point.
navigation_oval_init nav_oval_init
void nav_register_stage_init(navigation_stage_init nav_stage_init)
Registering functions.
void(* navigation_route)(struct EnuCoor_f *wp_start, struct EnuCoor_f *wp_end)
float pitch
pitch angle (in radians)
void nav_glide_points(struct EnuCoor_f *start_point, struct EnuCoor_f *end_point)
void(* navigation_circle)(struct EnuCoor_f *wp_center, float radius)
float heading
heading setpoint (in radians)
struct EnuCoor_f carrot
carrot position (also used for GCS display)
static void NavKillThrottle(void)
void nav_set_heading_rad(float rad)
heading utility functions
static void NavResurrect(void)
bool nav_detect_ground(void)
void nav_set_heading_deg(float deg)
Set nav_heading in degrees.
navigation_route nav_route
bool nav_check_wp_time(struct EnuCoor_f *wp, uint16_t stay_time)
Check the time spent in a radius of 'ARRIVED_AT_WAYPOINT' around a wp
void nav_periodic_task(void)
Navigation main: call to the code generated from the XML flight plan.
float get_dist2_to_waypoint(uint8_t wp_id)
Returns squared horizontal distance to given waypoint.
float fp_altitude
altitude setpoint from flight plan (in meters)
void(* navigation_stage_init)(void)
struct EnuCoor_f target
final target position (in meters)
bool too_far_from_home
too_far flag
float climb_vspeed
climb speed setting, mostly used in flight plans
float roll
roll angle (in radians)
void nav_set_failsafe(void)
General Navigation structure.
API to get/set the generic vehicle states.
unsigned short uint16_t
Typedef defining 16 bit unsigned short type.
unsigned int uint32_t
Typedef defining 32 bit unsigned int type.
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.