Paparazzi UAS  v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
dc.c File Reference

Standard Digital Camera Control Interface. More...

#include "dc.h"
#include "firmwares/rotorcraft/navigation.h"
#include "mcu_periph/sys_time.h"
#include "mcu_periph/uart.h"
#include "pprzlink/messages.h"
#include "modules/datalink/downlink.h"
#include "state.h"
#include "modules/gps/gps.h"
+ Include dependency graph for dc.c:

Go to the source code of this file.

Macros

#define DC_AUTOSHOOT_PERIOD   1.0
 default time interval for periodic mode: 1sec More...
 
#define DC_AUTOSHOOT_DISTANCE_INTERVAL   50
 default distance interval for distance mode: 50m More...
 
#define DC_AUTOSHOOT_DISTANCE_INIT   0
 default distance of the first shoot: 0m (start immediately) More...
 
#define DC_AUTOSHOOT_SURVEY_INTERVAL   50
 default distance interval for survey mode: 50m More...
 
#define DC_SHOT_SYNC_SEND   1
 by default send DC_SHOT message when photo was taken More...
 

Functions

void dc_send_shot_position (void)
 Send Down the coordinates of where the photo was taken. More...
 
void dc_init (void)
 initialize settings More...
 
uint8_t dc_info (void)
 Send an info message. More...
 
void dc_send_command_common (uint8_t cmd)
 Command sending function. More...
 
void WEAK dc_set_expo (float expo UNUSED)
 Set camera exposure. More...
 
uint8_t dc_distance (float interval)
 Sets the dc control in distance mode. More...
 
uint8_t dc_circle (float interval, float start)
 Sets the dc control in circle mode. More...
 
uint8_t dc_survey (float interval, float x, float y)
 Sets the dc control in distance mode. More...
 
uint8_t dc_stop (void)
 Stop dc control. More...
 
static float dim_mod (float a, float b, float m)
 
void dc_periodic (void)
 periodic function More...
 

Variables

dc_autoshoot_type dc_autoshoot = DC_AUTOSHOOT_STOP
 
uint16_t dc_gps_count = 0
 number of images taken since the last change of dc_mode More...
 
uint8_t dc_cam_tracing = 1
 
float dc_cam_angle = 0
 camera angle More...
 
float dc_exposure
 camera exposure More...
 
float dc_circle_interval = 0
 angle between dc shots in degree More...
 
float dc_circle_start_angle = 0
 angle a where first image will be taken at a + delta More...
 
float dc_circle_last_block = 0
 
float dc_circle_max_blocks = 0
 
float dc_survey_interval = DC_AUTOSHOOT_SURVEY_INTERVAL
 distance between dc shots in meters More...
 
float dc_gps_next_dist = 0
 
float dc_gps_x = 0
 point of reference for the survey mode More...
 
float dc_gps_y = 0
 
static struct FloatVect2 last_shot_pos = {0.0, 0.0}
 
float dc_distance_interval
 AutoShoot photos on distance to last shot in meters. More...
 
float dc_autoshoot_period
 AutoShoot photos every X seconds. More...
 
uint16_t dc_photo_nr = 0
 export the number of the last photo More...
 

Detailed Description

Standard Digital Camera Control Interface.

-Standard IO -I2C Control

Usage: (from the flight plan, the settings or any airborne code):

  • dc_send_command( )
  • set the appropriate autoshoot mode (off/time/distance/trigger)
  • use the module periodic function to set the autorepeat interval
  • define SENSOR_SYNC_SEND to get the DC_SHOT_MESSAGE on every SHOOT command

Definition in file dc.c.

Macro Definition Documentation

◆ DC_AUTOSHOOT_DISTANCE_INIT

#define DC_AUTOSHOOT_DISTANCE_INIT   0

default distance of the first shoot: 0m (start immediately)

Definition at line 58 of file dc.c.

◆ DC_AUTOSHOOT_DISTANCE_INTERVAL

#define DC_AUTOSHOOT_DISTANCE_INTERVAL   50

default distance interval for distance mode: 50m

Definition at line 53 of file dc.c.

◆ DC_AUTOSHOOT_PERIOD

#define DC_AUTOSHOOT_PERIOD   1.0

default time interval for periodic mode: 1sec

Definition at line 48 of file dc.c.

◆ DC_AUTOSHOOT_SURVEY_INTERVAL

#define DC_AUTOSHOOT_SURVEY_INTERVAL   50

default distance interval for survey mode: 50m

Definition at line 63 of file dc.c.

◆ DC_SHOT_SYNC_SEND

#define DC_SHOT_SYNC_SEND   1

by default send DC_SHOT message when photo was taken

Definition at line 90 of file dc.c.

Function Documentation

◆ dc_circle()

uint8_t dc_circle ( float  interval,
float  start 
)

Sets the dc control in circle mode.

In this mode the dc control assumes a perfect circular course.

The 'start' value is the reference course and 'interval' the minimum angle between shots. If 'start' is DC_IGNORE the current course is used instead.

The first picture is taken at angle start+interval.

Parameters
intervalminimum angle between shots in deg
startreference course in deg (or special DC_IGNORE)
Returns
zero

Definition at line 218 of file dc.c.

References dc_autoshoot, DC_AUTOSHOOT_CIRCLE, dc_circle_interval, dc_circle_last_block, dc_circle_max_blocks, dc_circle_start_angle, dc_gps_count, DC_IGNORE, dc_info(), and stateGetNedToBodyEulers_f().

+ Here is the call graph for this function:

◆ dc_distance()

uint8_t dc_distance ( float  interval)

Sets the dc control in distance mode.

Shoot the next pic if distance to last saved shot position is greater than interval.

The first picture is taken at after interval.

Parameters
intervalminimum distance between shots in m
Returns
zero

Definition at line 205 of file dc.c.

References dc_autoshoot, DC_AUTOSHOOT_DISTANCE, dc_distance_interval, dc_gps_count, dc_info(), last_shot_pos, FloatVect2::x, and FloatVect2::y.

+ Here is the call graph for this function:

◆ dc_info()

uint8_t dc_info ( void  )

Send an info message.

Containing information about position, course, buffer and all other internal variables used by the dc control.

Definition at line 166 of file dc.c.

References course, dc_autoshoot, dc_autoshoot_period, dc_circle_interval, dc_circle_last_block, dc_circle_start_angle, dc_gps_count, dc_gps_next_dist, dc_gps_x, dc_gps_y, dc_photo_nr, dc_survey_interval, DefaultChannel, DefaultDevice, mode, stateGetNedToBodyEulers_f(), and stateGetPositionLla_i().

Referenced by dc_circle(), dc_distance(), dc_stop(), and dc_survey().

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

◆ dc_init()

void dc_init ( void  )

◆ dc_periodic()

◆ dc_send_command_common()

void dc_send_command_common ( uint8_t  cmd)

Command sending function.

Definition at line 192 of file dc.c.

References extra_pprz_tp.

Referenced by dc_send_command().

+ Here is the caller graph for this function:

◆ dc_send_shot_position()

void dc_send_shot_position ( void  )

Send Down the coordinates of where the photo was taken.

Definition at line 106 of file dc.c.

References course, DC_IMAGE_BUFFER, dc_photo_nr, DefaultChannel, DefaultDevice, extra_pprz_tp, gps, GpsState::hmsl, stateGetHorizontalSpeedDir_f(), stateGetHorizontalSpeedNorm_f(), stateGetNedToBodyEulers_f(), stateGetPositionLla_i(), and GpsState::tow.

Referenced by atmega_i2c_cam_ctrl_send(), dc_send_command(), gpio_cam_ctrl_periodic(), and servo_cam_ctrl_periodic().

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

◆ dc_set_expo()

void WEAK dc_set_expo ( float expo  UNUSED)

Set camera exposure.

Definition at line 202 of file dc.c.

◆ dc_stop()

uint8_t dc_stop ( void  )

Stop dc control.

Sets the dc control in inactive mode, stopping all current actions.

Definition at line 262 of file dc.c.

References dc_autoshoot, DC_AUTOSHOOT_STOP, and dc_info().

Referenced by gvf_nav_survey_polygon_run(), nav_spiral_run(), and nav_survey_polygon_run().

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

◆ dc_survey()

uint8_t dc_survey ( float  interval,
float  x,
float  y 
)

Sets the dc control in distance mode.

In this mode, the dc control assumes a perfect line formed course since the distance is calculated relative to the first given point of reference. So not usable for circles or other comparable shapes.

The values of 'x' and 'y' are the coordinates of the reference point used for the distance calculations. If 'y' is DC_IGNORE the value of 'x' is interpreted as index of a waypoint declared in the flight plan. If both 'x' and 'y' are DC_IGNORE the current position will be used as reference point.

Parameters
intervaldistance between shots in meters
xx coordinate of reference point (or special DC_IGNORE)
yy coordinate of reference point (or special DC_IGNORE)
Returns
zero

Definition at line 240 of file dc.c.

References dc_autoshoot, DC_AUTOSHOOT_DISTANCE_INIT, DC_AUTOSHOOT_SURVEY, dc_gps_count, dc_gps_next_dist, dc_gps_x, dc_gps_y, DC_IGNORE, dc_info(), dc_survey_interval, stateGetPositionEnu_f(), WaypointX, WaypointY, FloatVect2::x, EnuCoor_f::x, FloatVect2::y, and EnuCoor_f::y.

Referenced by gvf_nav_survey_polygon_run(), and nav_survey_polygon_run().

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

◆ dim_mod()

static float dim_mod ( float  a,
float  b,
float  m 
)
static

Definition at line 269 of file dc.c.

References b, and simple_quad_sim::m.

Referenced by dc_periodic().

+ Here is the caller graph for this function:

Variable Documentation

◆ dc_autoshoot

◆ dc_autoshoot_period

float dc_autoshoot_period

AutoShoot photos every X seconds.

Definition at line 86 of file dc.c.

Referenced by dc_info(), dc_init(), and dc_periodic().

◆ dc_cam_angle

float dc_cam_angle = 0

camera angle

Definition at line 70 of file dc.c.

Referenced by nav_spiral_run().

◆ dc_cam_tracing

uint8_t dc_cam_tracing = 1

Definition at line 69 of file dc.c.

Referenced by nav_spiral_run().

◆ dc_circle_interval

float dc_circle_interval = 0

angle between dc shots in degree

Definition at line 74 of file dc.c.

Referenced by dc_circle(), dc_info(), and dc_periodic().

◆ dc_circle_last_block

float dc_circle_last_block = 0

Definition at line 76 of file dc.c.

Referenced by dc_circle(), dc_info(), and dc_periodic().

◆ dc_circle_max_blocks

float dc_circle_max_blocks = 0

Definition at line 77 of file dc.c.

Referenced by dc_circle(), and dc_periodic().

◆ dc_circle_start_angle

float dc_circle_start_angle = 0

angle a where first image will be taken at a + delta

Definition at line 75 of file dc.c.

Referenced by dc_circle(), dc_info(), and dc_periodic().

◆ dc_distance_interval

float dc_distance_interval

AutoShoot photos on distance to last shot in meters.

Definition at line 85 of file dc.c.

Referenced by dc_distance(), dc_init(), dc_periodic(), nav_survey_hybrid_run(), nav_survey_poly_run(), and nav_survey_rectangle_rotorcraft_run().

◆ dc_exposure

float dc_exposure

camera exposure

Definition at line 72 of file dc.c.

Referenced by dc_expo_cb(), dc_init(), dc_set_expo(), and pprzlink_cam_ctrl_init().

◆ dc_gps_count

uint16_t dc_gps_count = 0

number of images taken since the last change of dc_mode

Definition at line 68 of file dc.c.

Referenced by dc_circle(), dc_distance(), dc_info(), dc_periodic(), and dc_survey().

◆ dc_gps_next_dist

float dc_gps_next_dist = 0

Definition at line 80 of file dc.c.

Referenced by dc_info(), dc_periodic(), and dc_survey().

◆ dc_gps_x

float dc_gps_x = 0

point of reference for the survey mode

Definition at line 81 of file dc.c.

Referenced by dc_info(), dc_periodic(), and dc_survey().

◆ dc_gps_y

float dc_gps_y = 0

Definition at line 82 of file dc.c.

Referenced by dc_info(), dc_periodic(), and dc_survey().

◆ dc_photo_nr

uint16_t dc_photo_nr = 0

export the number of the last photo

Definition at line 95 of file dc.c.

Referenced by dc_info(), dc_send_command(), and dc_send_shot_position().

◆ dc_survey_interval

float dc_survey_interval = DC_AUTOSHOOT_SURVEY_INTERVAL

distance between dc shots in meters

Definition at line 79 of file dc.c.

Referenced by dc_info(), dc_periodic(), and dc_survey().

◆ last_shot_pos

struct FloatVect2 last_shot_pos = {0.0, 0.0}
static

Definition at line 82 of file dc.c.

Referenced by dc_distance(), and dc_periodic().