Paparazzi UAS
v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
|
This routine will cover the enitre area of any Polygon defined in the flightplan which is a convex polygon. More...
#include "modules/nav/nav_survey_hybrid.h"
#include "firmwares/rotorcraft/navigation.h"
#include "modules/nav/nav_rotorcraft_base.h"
#include "math/pprz_algebra_float.h"
#include "state.h"
#include "autopilot.h"
#include "generated/flight_plan.h"
Go to the source code of this file.
Data Structures | |
struct | Line |
struct | SurveyHybridPrivate |
Macros | |
#define | SURVEY_HYBRID_APPROACHING_TIME 3.f |
#define | SURVEY_HYBRID_MAX_POLYGON_SIZE 20 |
#define | SURVEY_HYBRID_HALF_SWEEP_ENABLED true |
#define | SURVEY_HYBRID_MAX_SWEEP 0 |
#define | SURVEY_HYBRID_MAX_SWEEP_BACK 0 |
#define | SURVEY_HYBRID_ENTRY_DISTANCE (survey_private.sweep_distance / 2.f) |
#define | SURVEY_HYBRID_ENTRY_CIRCLE TRUE |
#define | MaxFloat 1000000000 |
#define | MinFloat -1000000000 |
#define | LINE_START_FUNCTION {} |
#define | LINE_STOP_FUNCTION {} |
Enumerations | |
enum | SurveyStatus { Init , Entry , Sweep , Turn , Init , Entry , Sweep , SweepCircle , Init , Entry , Sweep , Turn } |
Functions | |
static void | nav_survey_hybrid_setup (float orientation, float sweep, float radius, float height) |
finish preparation of survey based on private structure More... | |
static void | TranslateAndRotateFromWorld (struct EnuCoor_f *p, float Zrot, struct EnuCoor_f *trans) |
static void | RotateAndTranslateToWorld (struct EnuCoor_f *p, float Zrot, struct EnuCoor_f *trans) |
Rotates point round z by -Zrot then translates so (0,0) becomes (transX,transY) More... | |
static void | FindInterceptOfTwoLines (float *x, float *y, struct Line L1, struct Line L2) |
static float | EvaluateLineForX (float y, struct Line L) |
static float | CrossProductZ (struct EnuCoor_f *p1_start, struct EnuCoor_f *p1_end, struct EnuCoor_f *p2_start, struct EnuCoor_f *p2_end) |
void | nav_survey_hybrid_init (void) |
Init function. More... | |
void | nav_survey_hybrid_setup_orientation (uint8_t start_wp, float orientation, uint8_t size, float sweep, float radius, float height) |
Setup polygon survey. More... | |
void | nav_survey_hybrid_setup_towards (uint8_t start_wp, uint8_t second_wp, uint8_t size, float sweep, float radius, float height) |
Setup "dynamic" polygon survey with sweep orientation towards a waypoint. More... | |
bool | nav_survey_hybrid_run (void) |
Run polygon hybrid survey. More... | |
Variables | |
struct SurveyHybrid | survey_hybrid |
static struct SurveyHybridPrivate | survey_private |
This routine will cover the enitre area of any Polygon defined in the flightplan which is a convex polygon.
Definition in file nav_survey_hybrid.c.
struct Line |
Definition at line 77 of file nav_survey_hybrid.c.
Data Fields | ||
---|---|---|
float | b | |
float | m | |
float | x |
struct SurveyHybridPrivate |
Definition at line 80 of file nav_survey_hybrid.c.
Data Fields | ||
---|---|---|
struct EnuCoor_f | circle | circle center |
bool | circle_turns | turns with circles (or lines between points otherwise) |
struct EnuCoor_f | corners[SURVEY_HYBRID_MAX_POLYGON_SIZE] | corners location |
float | edge_max_y[SURVEY_HYBRID_MAX_POLYGON_SIZE] | tmp point in rotated frame |
float | edge_min_y[SURVEY_HYBRID_MAX_POLYGON_SIZE] | tmp point in rotated frame |
struct Line | edges[SURVEY_HYBRID_MAX_POLYGON_SIZE] | polygon edges |
struct EnuCoor_f | entry | entry point |
struct EnuCoor_f | from_wp | tmp point in rotated frame |
float | max_y | tmp value |
float | orientation | requested orientation in radians |
float | radius | turn radius |
struct EnuCoor_f | segment_from | start of current segment |
struct EnuCoor_f | segment_to | end of current segment |
uint8_t | size | size of the polygon |
struct EnuCoor_f | smallest_corner | tmp point in rotated frame |
enum SurveyStatus | status | current state |
float | sweep | oriented sweep distance |
float | sweep_distance | requested sweep distance |
struct EnuCoor_f | to_wp | tmp point in rotated frame |
bool | valid | setup is valid |
#define LINE_START_FUNCTION {} |
Definition at line 118 of file nav_survey_hybrid.c.
#define LINE_STOP_FUNCTION {} |
Definition at line 121 of file nav_survey_hybrid.c.
#define MaxFloat 1000000000 |
Definition at line 114 of file nav_survey_hybrid.c.
#define MinFloat -1000000000 |
Definition at line 115 of file nav_survey_hybrid.c.
#define SURVEY_HYBRID_APPROACHING_TIME 3.f |
Definition at line 44 of file nav_survey_hybrid.c.
#define SURVEY_HYBRID_ENTRY_CIRCLE TRUE |
Definition at line 74 of file nav_survey_hybrid.c.
#define SURVEY_HYBRID_ENTRY_DISTANCE (survey_private.sweep_distance / 2.f) |
Definition at line 69 of file nav_survey_hybrid.c.
#define SURVEY_HYBRID_HALF_SWEEP_ENABLED true |
Definition at line 54 of file nav_survey_hybrid.c.
#define SURVEY_HYBRID_MAX_POLYGON_SIZE 20 |
Definition at line 49 of file nav_survey_hybrid.c.
#define SURVEY_HYBRID_MAX_SWEEP 0 |
Definition at line 59 of file nav_survey_hybrid.c.
#define SURVEY_HYBRID_MAX_SWEEP_BACK 0 |
Definition at line 64 of file nav_survey_hybrid.c.
enum SurveyStatus |
Enumerator | |
---|---|
Init | |
Entry | |
Sweep | |
Turn | |
Init | |
Entry | |
Sweep | |
SweepCircle | |
Init | |
Entry | |
Sweep | |
Turn |
Definition at line 78 of file nav_survey_hybrid.c.
|
static |
Definition at line 651 of file nav_survey_hybrid.c.
References EnuCoor_f::x, and EnuCoor_f::y.
Referenced by nav_survey_hybrid_run().
|
static |
Definition at line 646 of file nav_survey_hybrid.c.
References Line::b, Line::m, and EnuCoor_f::y.
Referenced by nav_survey_hybrid_run(), and nav_survey_hybrid_setup().
Definition at line 639 of file nav_survey_hybrid.c.
References Line::b, Line::m, EnuCoor_f::x, and EnuCoor_f::y.
Referenced by nav_survey_hybrid_setup().
void nav_survey_hybrid_init | ( | void | ) |
Init function.
Definition at line 184 of file nav_survey_hybrid.c.
References SurveyHybrid::half_sweep_enabled, mission_register(), survey_hybrid, SURVEY_HYBRID_HALF_SWEEP_ENABLED, SURVEY_HYBRID_MAX_SWEEP, SURVEY_HYBRID_MAX_SWEEP_BACK, survey_private, SurveyHybrid::sweep_back_nb, SurveyHybrid::sweep_back_nb_max, SurveyHybrid::sweep_nb, and SurveyHybrid::sweep_nb_max.
bool nav_survey_hybrid_run | ( | void | ) |
Run polygon hybrid survey.
Definition at line 399 of file nav_survey_hybrid.c.
References SurveyHybridPrivate::circle, SurveyHybridPrivate::circle_turns, CloseRadAngles, CrossProductZ(), dc_distance_interval, dc_send_command(), DC_SHOOT, dir, SurveyHybridPrivate::edge_max_y, SurveyHybridPrivate::edge_min_y, SurveyHybridPrivate::edges, Entry, SurveyHybridPrivate::entry, EvaluateLineForX(), SurveyHybridPrivate::from_wp, SurveyHybrid::half_sweep_enabled, Init, LINE_START_FUNCTION, LINE_STOP_FUNCTION, SurveyHybridPrivate::max_y, nav, RotorcraftNavigation::nav_approaching, RotorcraftNavigation::nav_circle, RotorcraftNavigation::nav_goto, nav_init_stage(), RotorcraftNavigation::nav_route, NavCircleCount, SurveyHybridPrivate::orientation, SurveyHybridPrivate::radius, RotateAndTranslateToWorld(), SurveyHybridPrivate::segment_from, SurveyHybridPrivate::segment_to, SurveyHybridPrivate::size, SurveyHybridPrivate::smallest_corner, stateGetPositionEnu_f(), SurveyHybridPrivate::status, survey_hybrid, SURVEY_HYBRID_APPROACHING_TIME, SURVEY_HYBRID_ENTRY_CIRCLE, survey_private, Sweep, SurveyHybridPrivate::sweep, SurveyHybrid::sweep_back_nb, SurveyHybrid::sweep_back_nb_max, SurveyHybrid::sweep_nb, SurveyHybrid::sweep_nb_max, SurveyHybridPrivate::to_wp, Turn, SurveyHybridPrivate::valid, VECT3_COPY, EnuCoor_f::x, EnuCoor_f::y, and EnuCoor_f::z.
|
static |
finish preparation of survey based on private structure
Definition at line 202 of file nav_survey_hybrid.c.
References Line::b, SurveyHybridPrivate::circle_turns, SurveyHybridPrivate::corners, SurveyHybridPrivate::edge_max_y, SurveyHybridPrivate::edge_min_y, SurveyHybridPrivate::edges, Entry, SurveyHybridPrivate::entry, EvaluateLineForX(), FindInterceptOfTwoLines(), FLOAT_VECT2_ZERO, SurveyHybridPrivate::from_wp, Init, LINE_STOP_FUNCTION, Line::m, SurveyHybridPrivate::max_y, MaxFloat, NavVerticalAltitudeMode, SurveyHybridPrivate::orientation, SurveyHybridPrivate::radius, SurveyHybridPrivate::size, SurveyHybridPrivate::smallest_corner, SurveyHybridPrivate::status, survey_hybrid, SURVEY_HYBRID_ENTRY_DISTANCE, survey_private, SurveyHybridPrivate::sweep, sweep, SurveyHybrid::sweep_back_nb, SurveyHybridPrivate::sweep_distance, SurveyHybrid::sweep_nb, SurveyHybridPrivate::to_wp, TranslateAndRotateFromWorld(), SurveyHybridPrivate::valid, VECT2_COPY, EnuCoor_f::x, EnuCoor_f::y, and EnuCoor_f::z.
Referenced by nav_survey_hybrid_setup_orientation().
void nav_survey_hybrid_setup_orientation | ( | uint8_t | start_wp, |
float | orientation, | ||
uint8_t | size, | ||
float | sweep, | ||
float | radius, | ||
float | height | ||
) |
Setup polygon survey.
start_wp | first waypoint/corner of the polygon |
orientation | angle of scan lines in degrees (CCW, east) |
size | number of waypoints/corners used to define the polygon |
sweep | distance between scan lines |
radius | turn radius (<0: automatic, radius = sweep/2; 0: no turns, use straight lines only; >0: fixed radius) |
height | starting height in meters |
Definition at line 365 of file nav_survey_hybrid.c.
References SurveyHybridPrivate::corners, nav_survey_hybrid_setup(), SurveyHybridPrivate::size, SURVEY_HYBRID_MAX_POLYGON_SIZE, survey_private, sweep, SurveyHybridPrivate::valid, and waypoint_get_enu_f().
Referenced by nav_survey_hybrid_setup_towards().
void nav_survey_hybrid_setup_towards | ( | uint8_t | start_wp, |
uint8_t | second_wp, | ||
uint8_t | size, | ||
float | sweep, | ||
float | radius, | ||
float | height | ||
) |
Setup "dynamic" polygon survey with sweep orientation towards a waypoint.
Computes the sweep orientation angle from the line first-second WP.
start_wp | first waypoint/corner of the polygon |
second_wp | second waypoint towards which the sweep orientation is computed |
size | number of waypoints/corners used to define the polygon |
sweep | distance between scan lines, if zero uses Poly_Distance |
radius | turn radius (<0: automatic, radius = sweep/2; 0: no turns, use straight lines only; >0: fixed radius) |
height | starting height in meters |
Definition at line 383 of file nav_survey_hybrid.c.
References nav_survey_hybrid_setup_orientation(), survey_private, sweep, SurveyHybridPrivate::valid, waypoint_get_enu_f(), EnuCoor_f::x, and EnuCoor_f::y.
|
static |
Rotates point round z by -Zrot then translates so (0,0) becomes (transX,transY)
Definition at line 628 of file nav_survey_hybrid.c.
References p, EnuCoor_f::x, and EnuCoor_f::y.
Referenced by nav_survey_hybrid_run().
|
static |
Definition at line 615 of file nav_survey_hybrid.c.
References p, EnuCoor_f::x, and EnuCoor_f::y.
Referenced by nav_survey_hybrid_setup().
struct SurveyHybrid survey_hybrid |
Definition at line 1 of file nav_survey_hybrid.c.
Referenced by nav_survey_hybrid_init(), nav_survey_hybrid_run(), and nav_survey_hybrid_setup().
|
static |
Definition at line 1 of file nav_survey_hybrid.c.
Referenced by nav_survey_hybrid_init(), nav_survey_hybrid_run(), nav_survey_hybrid_setup(), nav_survey_hybrid_setup_orientation(), and nav_survey_hybrid_setup_towards().