29#include "generated/flight_plan.h"
118 if (
fabsf(radius) < 0.001f) {
163#ifndef LINE_START_FUNCTION
164#define LINE_START_FUNCTION {}
166#ifndef LINE_STOP_FUNCTION
167#define LINE_STOP_FUNCTION {}
194 wp1->y - 2.f * radius *
dir.x,
199 wp2->y - 2.f * radius *
dir.x,
259#if PERIODIC_TELEMETRY
310#if PERIODIC_TELEMETRY
static float float_vect2_norm(struct FloatVect2 *v)
static void float_vect2_normalize(struct FloatVect2 *v)
normalize 2D vector in place
#define VECT2_SMUL(_vo, _vi, _s)
#define VECT2_DIFF(_c, _a, _b)
#define VECT2_COPY(_a, _b)
#define VECT2_SUM(_c, _a, _b)
#define VECT2_ASSIGN(_a, _x, _y)
static struct EnuCoor_f * stateGetPositionEnu_f(void)
Get position in local ENU coordinates (float).
static struct EnuCoor_f * stateGetSpeedEnu_f(void)
Get ground speed in local ENU coordinates (float).
#define NavQdrCloseTo(x)
True if x (in degrees) is close to the current QDR (less than 10 degrees)
float leg_progress
progress over leg
struct EnuCoor_f center
center WP position
uint8_t count
number of laps
float leg_length
leg length
struct EnuCoor_f to
end WP position
float dist2_to_wp
squared distance to next waypoint
struct NavCircle_t circle
struct EnuCoor_f from
start WP position
enum oval_status status
oval status
float radians
incremental angular distance
float radius
radius in meters
static void send_nav_status(struct transport_tx *trans, struct link_device *dev)
#define LINE_STOP_FUNCTION
struct NavBase_t nav_rotorcraft_base
Basic Nav struct.
static void nav_goto(struct EnuCoor_f *wp)
static void send_circle(struct transport_tx *trans, struct link_device *dev)
#define LINE_START_FUNCTION
Navigation along a figure O.
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)
void nav_rotorcraft_init(void)
Init and register nav functions.
static void send_segment(struct transport_tx *trans, struct link_device *dev)
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.
static void nav_oval(struct EnuCoor_f *wp1, struct EnuCoor_f *wp2, float radius)
struct FloatVect2 pos_diff
vector in East North Up coordinates Units: meters
void nav_register_oval(navigation_oval_init _nav_oval_init, navigation_oval nav_oval)
struct RotorcraftNavigation nav
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)
Registering functions.
float get_dist2_to_point(struct EnuCoor_f *p)
Returns squared horizontal distance to given point.
void nav_register_stage_init(navigation_stage_init nav_stage_init)
Register functions.
Rotorcraft navigation functions.
#define NAV_HORIZONTAL_MODE_WAYPOINT
Nav modes these modes correspond to the flight plan instructions used to set the high level navigatio...
#define NAV_HORIZONTAL_MODE_CIRCLE
float dist2_to_home
squared distance to home waypoint
#define NAV_HORIZONTAL_MODE_ROUTE
navigation_approaching nav_approaching
#define DEFAULT_CIRCLE_RADIUS
default nav_circle_radius in meters
navigation_circle nav_circle
#define CARROT
default approaching_time for a wp
#define NAV_CARROT_DIST
Carrot distance during navigation.
navigation_route nav_route
#define NAV_SETPOINT_MODE_POS
Nav setpoint modes these modes correspond to submodes defined by navigation routines to tell which se...
struct EnuCoor_f target
final target position (in meters)
#define ARRIVED_AT_WAYPOINT
minimum horizontal distance to waypoint to mark as arrived
static const struct usb_device_descriptor dev
int8_t register_periodic_telemetry(struct periodic_telemetry *_pt, uint8_t _id, telemetry_cb _cb)
Register a telemetry callback function.
Periodic telemetry system header (includes downlink utility and generated code).
#define DefaultPeriodic
Set default periodic telemetry.