Paparazzi UAS  v6.0_unstable-92-g17422e4-dirty
Paparazzi is a free software Unmanned Aircraft System.
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
autopilot_firmware.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012-2017 Gautier Hattenberger <gautier.hattenberger@enac.fr>
3  *
4  * This file is part of paparazzi.
5  *
6  * paparazzi is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2, or (at your option)
9  * any later version.
10  *
11  * paparazzi is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with paparazzi; see the file COPYING. If not, see
18  * <http://www.gnu.org/licenses/>.
19  */
20 
30 
31 #include "state.h"
33 #include <stdint.h>
34 
35 // ap copy of fbw readings
37 
40 
41 #if PERIODIC_TELEMETRY
43 #include "generated/settings.h"
44 
45 #if defined RADIO_CALIB && defined RADIO_CONTROL_SETTINGS
47 static void send_rc_settings(struct transport_tx *trans, struct link_device *dev)
48 {
49  if (!RcSettingsOff()) {
50  pprz_msg_send_SETTINGS(trans, dev, AC_ID, &slider_1_val, &slider_2_val);
51  }
52 }
53 #else
55 #endif
56 
57 static void send_mode(struct transport_tx *trans, struct link_device *dev)
58 {
59  pprz_msg_send_PPRZ_MODE(trans, dev, AC_ID,
61 }
62 
63 static void send_estimator(struct transport_tx *trans, struct link_device *dev)
64 {
65  pprz_msg_send_ESTIMATOR(trans, dev, AC_ID,
66  &(stateGetPositionUtm_f()->alt), &(stateGetSpeedEnu_f()->z));
67 }
68 
69 static void send_energy(struct transport_tx *trans, struct link_device *dev)
70 {
71  uint8_t throttle = 100 * autopilot.throttle / MAX_PPRZ;
73  pprz_msg_send_ENERGY(trans, dev, AC_ID,
75 }
76 
77 // FIXME not the best place
79 #include CTRL_TYPE_H
80 static void send_desired(struct transport_tx *trans, struct link_device *dev)
81 {
82 #ifndef USE_AIRSPEED
83  float v_ctl_auto_airspeed_setpoint = NOMINAL_AIRSPEED;
84 #endif
85  pprz_msg_send_DESIRED(trans, dev, AC_ID,
88  &v_ctl_auto_airspeed_setpoint);
89 }
90 
91 static void send_airspeed(struct transport_tx *trans __attribute__((unused)),
92  struct link_device *dev __attribute__((unused)))
93 {
94  float airspeed = stateGetAirspeed_f();
95 #if USE_AIRSPEED
96  pprz_msg_send_AIRSPEED(trans, dev, AC_ID,
97  &airspeed, &v_ctl_auto_airspeed_setpoint,
99 #else
100  float zero = 0;
101  pprz_msg_send_AIRSPEED(trans, dev, AC_ID, &airspeed, &zero, &zero, &zero);
102 #endif
103 }
104 #endif /* PERIODIC_TELEMETRY */
105 
107 {
108  // use default telemetry here
109 #if DOWNLINK
110  send_mode(&(DefaultChannel).trans_tx, &(DefaultDevice).device);
111 #endif
112 }
113 
115 {
116  ap_electrical.vsupply = 0.f;
117  ap_electrical.current = 0.f;
118  ap_electrical.charge = 0.f;
119  ap_electrical.energy = 0.f;
120 
121  ap_electrical.bat_critical = false;
122  ap_electrical.bat_low = false;
123 
124 #if PERIODIC_TELEMETRY
125  /* register some periodic message */
126  register_periodic_telemetry(DefaultPeriodic, PPRZ_MSG_ID_PPRZ_MODE, send_mode);
131 #if defined RADIO_CALIB && defined RADIO_CONTROL_SETTINGS
132  register_periodic_telemetry(DefaultPeriodic, PPRZ_MSG_ID_RC_SETTINGS, send_rc_settings);
133 #endif
134 #endif
135 }
136 
137 
138 #include "generated/flight_plan.h"
139 #include "generated/airframe.h"
140 
141 #ifdef LOW_BATTERY_KILL_DELAY
142 #warning LOW_BATTERY_KILL_DELAY has been renamed to CATASTROPHIC_BAT_KILL_DELAY, please update your airframe file!
143 #endif
144 
146 #ifndef CATASTROPHIC_BAT_KILL_DELAY
147 #define CATASTROPHIC_BAT_KILL_DELAY 5
148 #endif
149 
151 #ifndef KILL_MODE_DISTANCE
152 #define KILL_MODE_DISTANCE (1.5*MAX_DIST_FROM_HOME)
153 #endif
154 
156 #ifndef MIN_SPEED_FOR_TAKEOFF
157 #define MIN_SPEED_FOR_TAKEOFF 5.
158 #endif
159 
161 void monitor_task(void)
162 {
163  if (autopilot.flight_time) {
165  }
166 
167  static uint8_t t = 0;
168  if (ap_electrical.vsupply < CATASTROPHIC_BAT_LEVEL) {
169  t++;
170  } else {
171  t = 0;
172  }
173 #if !USE_GENERATED_AUTOPILOT
174  // only check for static autopilot
177 #endif
178 
179  if (!autopilot.flight_time &&
182  autopilot.launch = true; /* Not set in non auto launch */
183 #if DOWNLINK
184  uint16_t time_sec = sys_time.nb_sec;
185  DOWNLINK_SEND_TAKEOFF(DefaultChannel, DefaultDevice, &time_sec);
186 #endif
187  }
188 
189 }
190 
191 
#define KILL_MODE_DISTANCE
Maximum distance from HOME waypoint before going into kill mode.
static const struct usb_device_descriptor dev
Definition: usb_ser_hw.c:74
bool launch
request launch
Definition: autopilot.h:71
uint8_t mcu1_status
Second MCU status (FBW part)
static void send_airspeed(struct transport_tx *trans, struct link_device *dev)
static float stateGetHorizontalSpeedNorm_f(void)
Get norm of horizontal ground speed (float).
Definition: state.h:935
void autopilot_firmware_init(void)
Init function.
#define MIN_SPEED_FOR_TAKEOFF
Default minimal speed for takeoff in m/s.
uint8_t lateral_mode
float v_ctl_altitude_setpoint
in meters above MSL
Definition: energy_ctrl.c:88
uint8_t rc_settings_mode
Variable setting though the radio control.
Periodic telemetry system header (includes downlink utility and generated code).
#define RcSettingsOff()
Definition: rc_settings.h:70
float h_ctl_course_setpoint
float v_ctl_auto_groundspeed_setpoint
in meters per second
Definition: energy_ctrl.c:125
float v_ctl_climb_setpoint
Definition: energy_ctrl.c:98
uint16_t flight_time
flight time in seconds
Definition: autopilot.h:65
static float stateGetAirspeed_f(void)
Get airspeed (float).
Definition: state.h:1407
float vsupply
supply voltage in V
Definition: electrical.h:45
float dist2_to_home
squared distance to home waypoint
Definition: navigation.c:86
struct pprz_autopilot autopilot
Global autopilot structure.
Definition: autopilot.c:50
float v_ctl_auto_airspeed_setpoint
in meters per second
Definition: energy_ctrl.c:121
Fixed wing horizontal control.
bool bat_critical
battery critical status
Definition: electrical.h:50
static void send_desired(struct transport_tx *trans, struct link_device *dev)
Fixedwing specific autopilot interface and initialization.
float charge
consumed electric charge in Ah
Definition: electrical.h:47
float h_ctl_pitch_loop_setpoint
#define DefaultPeriodic
Set default periodic telemetry.
Definition: telemetry.h:66
float slider_1_val
Definition: rc_settings.c:34
static void send_estimator(struct transport_tx *trans, struct link_device *dev)
uint8_t v_ctl_mode
Definition: energy_ctrl.c:74
bool bat_low
battery low status
Definition: electrical.h:49
void autopilot_send_mode(void)
Report autopilot mode on default downlink channel.
static struct UtmCoor_f * stateGetPositionUtm_f(void)
Get position in UTM coordinates (float).
Definition: state.h:692
API to get/set the generic vehicle states.
float slider_2_val
Definition: rc_settings.c:34
volatile uint32_t nb_sec
full seconds since startup
Definition: sys_time.h:68
float h_ctl_roll_setpoint
static struct EnuCoor_f * stateGetSpeedEnu_f(void)
Get ground speed in local ENU coordinates (float).
Definition: state.h:917
static void send_energy(struct transport_tx *trans, struct link_device *dev)
float energy
consumed energy in Wh
Definition: electrical.h:48
void monitor_task(void)
monitor stuff run at 1Hz
static void send_mode(struct transport_tx *trans, struct link_device *dev)
#define MAX_PPRZ
Definition: paparazzi.h:8
bool kill_throttle
allow autopilot to use throttle
Definition: autopilot.h:69
float current
current in A
Definition: electrical.h:46
struct Electrical ap_electrical
uint8_t mode
current autopilot mode
Definition: autopilot.h:63
unsigned short uint16_t
Typedef defining 16 bit unsigned short type.
Definition: vl53l1_types.h:88
float v_ctl_auto_airspeed_controlled
Definition: energy_ctrl.c:123
int8_t register_periodic_telemetry(struct periodic_telemetry *_pt, uint8_t _id, telemetry_cb _cb)
Register a telemetry callback function.
Definition: telemetry.c:46
#define CATASTROPHIC_BAT_KILL_DELAY
Maximum time allowed for catastrophic battery level before going into kill mode.
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.
Definition: vl53l1_types.h:98
pprz_t throttle
throttle level as will be displayed in GCS
Definition: autopilot.h:66