Paparazzi UAS  v5.15_devel-230-gc96ce27
Paparazzi is a free software Unmanned Aircraft System.
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
orange_avoider.c File Reference
#include "modules/orange_avoider/orange_avoider.h"
#include "firmwares/rotorcraft/navigation.h"
#include "generated/airframe.h"
#include "state.h"
#include "subsystems/abi.h"
#include <time.h>
#include <stdio.h>
#include "generated/flight_plan.h"
+ Include dependency graph for orange_avoider.c:

Go to the source code of this file.

Macros

#define NAV_C
 
#define ORANGE_AVOIDER_VERBOSE   TRUE
 
#define PRINT(string,...)   fprintf(stderr, "[orange_avoider->%s()] " string,__FUNCTION__ , ##__VA_ARGS__)
 
#define VERBOSE_PRINT(...)
 
#define ORANGE_AVOIDER_VISUAL_DETECTION_ID   ABI_BROADCAST
 

Enumerations

enum  navigation_state_t {
  SAFE, OBSTACLE_FOUND, SEARCH_FOR_SAFE_HEADING, OUT_OF_BOUNDS,
  SAFE, OBSTACLE_FOUND, SEARCH_FOR_SAFE_HEADING, OUT_OF_BOUNDS,
  REENTER_ARENA
}
 

Functions

uint8_t moveWaypointForward (uint8_t waypoint, float distanceMeters)
 
uint8_t moveWaypoint (uint8_t waypoint, struct EnuCoor_i *new_coor)
 
uint8_t increase_nav_heading (float incrementDegrees)
 
uint8_t chooseRandomIncrementAvoidance (void)
 
static void color_detection_cb (uint8_t sender_id, int16_t pixel_x, int16_t pixel_y, int16_t pixel_width, int16_t pixel_height, int32_t quality, int16_t extra)
 
void orange_avoider_init (void)
 
void orange_avoider_periodic (void)
 
static uint8_t calculateForwards (struct EnuCoor_i *new_coor, float distanceMeters)
 

Variables

float oa_color_count_frac = 0.18f
 
enum navigation_state_t navigation_state = SEARCH_FOR_SAFE_HEADING
 
int32_t color_count = 0
 
int16_t obstacle_free_confidence = 0
 
float heading_increment = 5.f
 
float maxDistance = 2.25
 
const int16_t max_trajectory_confidence = 5
 
static abi_event color_detection_ev
 

Detailed Description

Author
Roland Meertens Example on how to use the colours detected to avoid orange pole in the cyberzoo This module is an example module for the course AE4317 Autonomous Flight of Micro Air Vehicles at the TU Delft. This module is used in combination with a color filter (cv_detect_color_object) and the navigation mode of the autopilot. The avoidance strategy is to simply count the total number of orange pixels. When above a certain percentage threshold, (given by color_count_frac) we assume that there is an obstacle and we turn.

The color filter settings are set using the cv_detect_color_object. This module can run multiple filters simultaneously so you have to define which filter to use with the ORANGE_AVOIDER_VISUAL_DETECTION_ID setting.

Definition in file orange_avoider.c.

Macro Definition Documentation

#define NAV_C

Definition at line 28 of file orange_avoider.c.

#define ORANGE_AVOIDER_VERBOSE   TRUE

Definition at line 31 of file orange_avoider.c.

#define ORANGE_AVOIDER_VISUAL_DETECTION_ID   ABI_BROADCAST

Definition at line 65 of file orange_avoider.c.

Referenced by orange_avoider_guided_init(), and orange_avoider_init().

#define PRINT (   string,
  ... 
)    fprintf(stderr, "[orange_avoider->%s()] " string,__FUNCTION__ , ##__VA_ARGS__)

Definition at line 33 of file orange_avoider.c.

#define VERBOSE_PRINT (   ...)

Enumeration Type Documentation

Enumerator
SAFE 
OBSTACLE_FOUND 
SEARCH_FOR_SAFE_HEADING 
OUT_OF_BOUNDS 
SAFE 
OBSTACLE_FOUND 
SEARCH_FOR_SAFE_HEADING 
OUT_OF_BOUNDS 
REENTER_ARENA 

Definition at line 45 of file orange_avoider.c.

Function Documentation

static uint8_t calculateForwards ( struct EnuCoor_i new_coor,
float  distanceMeters 
)
static

Definition at line 189 of file orange_avoider.c.

References heading, POS_BFP_OF_REAL, POS_FLOAT_OF_BFP, FloatEulers::psi, stateGetNedToBodyEulers_f(), stateGetPositionEnu_f(), stateGetPositionEnu_i(), VERBOSE_PRINT, EnuCoor_i::x, and EnuCoor_i::y.

Referenced by moveWaypointForward().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

uint8_t chooseRandomIncrementAvoidance ( void  )

Definition at line 227 of file orange_avoider.c.

References heading_increment, and VERBOSE_PRINT.

Referenced by orange_avoider_init(), and orange_avoider_periodic().

+ Here is the caller graph for this function:

static void color_detection_cb ( uint8_t  sender_id,
int16_t  pixel_x,
int16_t  pixel_y,
int16_t  pixel_width,
int16_t  pixel_height,
int32_t  quality,
int16_t  extra 
)
static

Definition at line 68 of file orange_avoider.c.

References color_count.

Referenced by orange_avoider_init().

+ Here is the caller graph for this function:

uint8_t increase_nav_heading ( float  incrementDegrees)

Definition at line 172 of file orange_avoider.c.

References ANGLE_BFP_OF_REAL, FLOAT_ANGLE_NORMALIZE, nav_heading, new_heading, FloatEulers::psi, stateGetNedToBodyEulers_f(), and VERBOSE_PRINT.

Referenced by orange_avoider_periodic().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

uint8_t moveWaypoint ( uint8_t  waypoint,
struct EnuCoor_i new_coor 
)

Definition at line 205 of file orange_avoider.c.

References POS_FLOAT_OF_BFP, VERBOSE_PRINT, waypoint_move_xy_i(), EnuCoor_i::x, and EnuCoor_i::y.

Referenced by moveWaypointForward().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

uint8_t moveWaypointForward ( uint8_t  waypoint,
float  distanceMeters 
)

Definition at line 216 of file orange_avoider.c.

References calculateForwards(), and moveWaypoint().

Referenced by orange_avoider_periodic().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void orange_avoider_init ( void  )

Definition at line 79 of file orange_avoider.c.

References chooseRandomIncrementAvoidance(), color_detection_cb(), and ORANGE_AVOIDER_VISUAL_DETECTION_ID.

+ Here is the call graph for this function:

Variable Documentation

int32_t color_count = 0

Definition at line 57 of file orange_avoider.c.

Referenced by color_detection_cb(), and orange_avoider_periodic().

abi_event color_detection_ev
static

Definition at line 67 of file orange_avoider.c.

float heading_increment = 5.f

Definition at line 59 of file orange_avoider.c.

Referenced by chooseRandomIncrementAvoidance(), and orange_avoider_periodic().

const int16_t max_trajectory_confidence = 5

Definition at line 62 of file orange_avoider.c.

Referenced by orange_avoider_periodic().

float maxDistance = 2.25

Definition at line 60 of file orange_avoider.c.

Referenced by orange_avoider_periodic().

Definition at line 56 of file orange_avoider.c.

Referenced by orange_avoider_periodic().

float oa_color_count_frac = 0.18f

Definition at line 53 of file orange_avoider.c.

Referenced by orange_avoider_periodic().

int16_t obstacle_free_confidence = 0

Definition at line 58 of file orange_avoider.c.

Referenced by orange_avoider_periodic().