Paparazzi UAS  v5.18.0_stable
Paparazzi is a free software Unmanned Aircraft System.
nav_survey_polygon_gvf.c File Reference
#include "firmwares/fixedwing/nav.h"
#include "state.h"
#include "autopilot.h"
#include "generated/flight_plan.h"
#include "modules/guidance/gvf/gvf.h"
+ Include dependency graph for nav_survey_polygon_gvf.c:

Go to the source code of this file.

Functions

static void gvf_nav_points (struct FloatVect2 start, struct FloatVect2 end)
 
static bool gvf_intercept_two_lines (struct FloatVect2 *p, struct FloatVect2 x, struct FloatVect2 y, float a1, float a2, float b1, float b2)
 intercept two lines and give back the point of intersection More...
 
static bool gvf_get_two_intersects (struct FloatVect2 *x, struct FloatVect2 *y, struct FloatVect2 a, struct FloatVect2 b)
 intersects a line with the polygon and gives back the two intersection points More...
 
void gvf_nav_survey_polygon_setup (uint8_t first_wp, uint8_t size, float angle, float sweep_width, float shot_dist, float min_rad, float altitude)
 initializes the variables needed for the survey to start More...
 
void gvf_nav_direction_circle (float rad)
 main navigation routine. More...
 
bool gvf_nav_survey_polygon_run (void)
 

Variables

struct gvf_SurveyPolyAdv gvf_survey
 

Function Documentation

◆ gvf_get_two_intersects()

static bool gvf_get_two_intersects ( struct FloatVect2 x,
struct FloatVect2 y,
struct FloatVect2  a,
struct FloatVect2  b 
)
static

intersects a line with the polygon and gives back the two intersection points

Returns
TRUE if two intersection can be found, else FALSE
Parameters
x,yintersection points
a,bdefine the line to intersection

Definition at line 78 of file nav_survey_polygon_gvf.c.

References b, gvf_SurveyPolyAdv::dir_vec, gvf_intercept_two_lines(), gvf_survey, gvf_SurveyPolyAdv::poly_count, gvf_SurveyPolyAdv::poly_first, waypoints, point::x, FloatVect2::x, point::y, and FloatVect2::y.

Referenced by gvf_nav_survey_polygon_run(), and gvf_nav_survey_polygon_setup().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gvf_intercept_two_lines()

static bool gvf_intercept_two_lines ( struct FloatVect2 p,
struct FloatVect2  x,
struct FloatVect2  y,
float  a1,
float  a2,
float  b1,
float  b2 
)
static

intercept two lines and give back the point of intersection

Returns
FALSE if no intersection can be found or intersection does not lie between points a and b else TRUE
Parameters
preturns intersection
x,yfirst line is defined by point x and y (goes through this points)
a1,a2,b1,b2second line by coordinates a1/a2, b1/b2

Definition at line 55 of file nav_survey_polygon_gvf.c.

References logger_uart_parse::a1, logger_uart_parse::a2, p, FloatVect2::x, and FloatVect2::y.

Referenced by gvf_get_two_intersects().

+ Here is the caller graph for this function:

◆ gvf_nav_direction_circle()

void gvf_nav_direction_circle ( float  rad)

main navigation routine.

This is called periodically evaluates the current Position and stage and navigates accordingly.

Returns
True until the survey is finished

Definition at line 236 of file nav_survey_polygon_gvf.c.

References gvf_set_direction().

Referenced by gvf_nav_survey_polygon_run().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gvf_nav_points()

static void gvf_nav_points ( struct FloatVect2  start,
struct FloatVect2  end 
)
static

Definition at line 42 of file nav_survey_polygon_gvf.c.

References gvf_segment_XY1_XY2(), FloatVect2::x, and FloatVect2::y.

Referenced by gvf_nav_survey_polygon_run().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gvf_nav_survey_polygon_run()

◆ gvf_nav_survey_polygon_setup()

void gvf_nav_survey_polygon_setup ( uint8_t  first_wp,
uint8_t  size,
float  angle,
float  sweep_width,
float  shot_dist,
float  min_rad,
float  altitude 
)

initializes the variables needed for the survey to start

Parameters
first_wpthe first Waypoint of the polygon
sizethe number of points that make up the polygon
angleangle in which to do the flyovers
sweep_widthdistance between the sweeps
shot_distdistance between the shots
min_radminimal radius when navigating
altitudethe altitude that must be reached before the flyover starts

Definition at line 135 of file nav_survey_polygon_gvf.c.

References altitude, gvf_SurveyPolyAdv::dir_vec, gvf_SurveyPolyAdv::entry_center, FLOAT_VECT2_NORMALIZE, gENTRY, gERR, gvf_get_two_intersects(), gvf_survey, NavVerticalAltitudeMode, NavVerticalAutoThrottleMode, gvf_SurveyPolyAdv::poly_count, gvf_SurveyPolyAdv::poly_first, gvf_SurveyPolyAdv::psa_altitude, gvf_SurveyPolyAdv::psa_min_rad, gvf_SurveyPolyAdv::psa_shot_dist, gvf_SurveyPolyAdv::psa_sweep_width, gvf_SurveyPolyAdv::rad_vec, gvf_SurveyPolyAdv::return_angle, gvf_SurveyPolyAdv::seg_end, gvf_SurveyPolyAdv::seg_start, gvf_SurveyPolyAdv::segment_angle, gvf_SurveyPolyAdv::stage, sweep, gvf_SurveyPolyAdv::sweep_vec, VECT2_COPY, VECT2_DIFF, VECT2_SMUL, VECT2_SUM, waypoints, point::x, FloatVect2::x, point::y, and FloatVect2::y.

+ Here is the call graph for this function:

Variable Documentation

◆ gvf_survey