33 #include "autopilot.h"
34 #include "generated/flight_plan.h"
60 divider = (((b2 - a2) * (y.
x - x.
x)) + ((x.
y - y.
y) * (b1 - a1)));
61 if (divider == 0) {
return FALSE; }
62 fac = ((y.
x * (x.
y - a2)) + (x.
x * (a2 - y.
y)) + (a1 * (y.
y - x.
y))) / divider;
63 if (fac > 1.0) {
return FALSE; }
64 if (fac < 0.0) {
return FALSE; }
66 p->
x = a1 + fac * (b1 - a1);
67 p->
y = a2 + fac * (b2 - a2);
136 float min_rad,
float altitude)
140 float divider, angle_rad = angle / 180.0 * M_PI;
142 if (angle < 0.0) { angle += 360.0; }
143 if (angle >= 360.0) { angle -= 360.0; }
157 if (angle <= 45.0 || angle >= 315.0) {
163 }
else if (angle <= 135.0) {
169 }
else if (angle <= 225.0) {
struct FloatVect2 entry_center
static bool_t 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
#define VECT2_SUM(_c, _a, _b)
Advanced polygon survey for fixedwings from Uni Stuttgart.
static void nav_points(struct FloatVect2 start, struct FloatVect2 end)
void nav_circle_XY(float x, float y, float radius)
Navigates around (x, y).
#define FLOAT_VECT2_NORMALIZE(_v)
struct FloatVect2 rad_vec
static bool_t 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
#define VECT2_COPY(_a, _b)
#define VECT2_DIFF(_c, _a, _b)
bool_t nav_survey_polygon_run(void)
main navigation routine.
struct FloatVect2 seg_center1
struct FloatVect2 dir_vec
struct FloatVect2 seg_start
uint8_t dc_survey(float interval, float x, float y)
Sets the dc control in distance mode.
struct FloatVect2 sweep_vec
#define NavCourseCloseTo(x)
Standard Digital Camera Control Interface.
struct FloatVect2 ret_end
#define NavVerticalAltitudeMode(_alt, _pre_climb)
Set the vertical mode to altitude control with the specified altitude setpoint and climb pre-command...
#define NavVerticalAutoThrottleMode(_pitch)
Set the climb control to auto-throttle with the specified pitch pre-command.
bool_t 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
#define VECT2_SMUL(_vo, _vi, _s)
void nav_init_stage(void)
needs to be implemented by fixedwing and rotorcraft seperately
void nav_route_xy(float last_wp_x, float last_wp_y, float wp_x, float wp_y)
Computes the carrot position along the desired segment.
struct FloatVect2 ret_start
static struct UtmCoor_f * stateGetPositionUtm_f(void)
Get position in UTM coordinates (float).
API to get/set the generic vehicle states.
struct FloatVect2 seg_end
uint8_t dc_stop(void)
Stop dc control.
struct point waypoints[NB_WAYPOINT]
size == nb_waypoint, waypoint 0 is a dummy waypoint
bool_t nav_approaching_xy(float x, float y, float from_x, float from_y, float approaching_time)
Decide if the UAV is approaching the current waypoint.
#define CARROT
default approaching_time for a wp
struct FloatVect2 seg_center2
Fixedwing Navigation library.
struct SurveyPolyAdv survey