Paparazzi UAS v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
Loading...
Searching...
No Matches
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>
35
37
39
40#if PERIODIC_TELEMETRY
42#include "generated/settings.h"
43
44#if defined RADIO_CALIB && defined RADIO_CONTROL_SETTINGS
45#include "modules/settings/rc_settings.h"
46static void send_rc_settings(struct transport_tx *trans, struct link_device *dev)
47{
48 if (!RcSettingsOff()) {
50 }
51}
52#else
54#endif
55
56static void send_mode(struct transport_tx *trans, struct link_device *dev)
57{
66#ifdef RADIO_CONTROL
67 mcu1_status |= (radio_control.status == RC_OK ? (1<<0) : 0);
69 mcu1_status |= (radio_control.status == RC_OK ? (1<<4) : 0);
70#endif
71#ifdef AP_MODE_MANUAL
72 mcu1_status |= (autopilot_get_mode() == AP_MODE_MANUAL ? 0 : (1<<2));
73#endif
74
77}
78
79static void send_estimator(struct transport_tx *trans, struct link_device *dev)
80{
82 &(stateGetPositionUtm_f()->alt), &(stateGetSpeedEnu_f()->z));
83}
84
85static void send_energy(struct transport_tx *trans, struct link_device *dev)
86{
87 uint8_t throttle = 100 * autopilot.throttle / MAX_PPRZ;
88 float power = electrical.vsupply * electrical.current;
89 float avg_power = 0;
90 if(electrical.avg_cnt != 0) {
92 }
93
95 &throttle, &electrical.vsupply, &electrical.current, &power, &avg_power, &electrical.charge, &electrical.energy);
96}
97
98// FIXME not the best place
100#include CTRL_TYPE_H
111
112static void send_airspeed(struct transport_tx *trans __attribute__((unused)),
113 struct link_device *dev __attribute__((unused)))
114{
115 float airspeed = stateGetAirspeed_f();
116#if USE_AIRSPEED
120#else
121 float zero = 0;
122 pprz_msg_send_AIRSPEED(trans, dev, AC_ID, &airspeed, &zero, &zero, &zero);
123#endif
124}
125
126#if !INTERMCU_AP
128static void send_fbw_status(struct transport_tx *trans, struct link_device *dev)
129{
130 uint8_t fbw_mode = 1; // old FBW_AUTO
131#ifdef AP_MODE_MANUAL
132 if (autopilot_get_mode() == AP_MODE_MANUAL) { fbw_mode = 0; } // FBW Manual
133#endif
134#ifdef RADIO_CONTROL
135 uint8_t rc_status = radio_control.status;
137#else
138 uint8_t rc_status = 0;
139 uint8_t rc_rate = 0;
140#endif
142 &rc_status, &rc_rate, &fbw_mode,
144}
145#endif
146
147#endif /* PERIODIC_TELEMETRY */
148
150{
151 // use default telemetry here
152#if DOWNLINK
153 send_mode(&(DefaultChannel).trans_tx, &(DefaultDevice).device);
154#endif
155}
156
174
175
176#include "generated/flight_plan.h"
177#include "generated/airframe.h"
178
179#ifdef LOW_BATTERY_KILL_DELAY
180#warning LOW_BATTERY_KILL_DELAY has been renamed to CATASTROPHIC_BAT_KILL_DELAY, please update your airframe file!
181#endif
182
184#ifndef CATASTROPHIC_BAT_KILL_DELAY
185#define CATASTROPHIC_BAT_KILL_DELAY 5
186#endif
187
189#ifndef KILL_MODE_DISTANCE
190#define KILL_MODE_DISTANCE (1.5*MAX_DIST_FROM_HOME)
191#endif
192
194#ifndef MIN_SPEED_FOR_TAKEOFF
195#define MIN_SPEED_FOR_TAKEOFF 5.
196#endif
197
199void monitor_task(void)
200{
201 static uint8_t t = 0;
203 t++;
204 } else {
205 t = 0;
206 }
207#if !USE_GENERATED_AUTOPILOT
208 // only check for static autopilot
211#endif
212
213 if (!autopilot.flight_time &&
216 autopilot.launch = true; /* Not set in non auto launch */
217#if DOWNLINK
220#endif
221 }
222
223}
224
225
uint8_t autopilot_get_mode(void)
get autopilot mode
Definition autopilot.c:222
struct pprz_autopilot autopilot
Global autopilot structure.
Definition autopilot.c:49
bool launch
request launch
Definition autopilot.h:71
pprz_t throttle
throttle level as will be displayed in GCS
Definition autopilot.h:66
bool kill_throttle
allow autopilot to use throttle
Definition autopilot.h:69
uint8_t mode
current autopilot mode
Definition autopilot.h:63
uint16_t flight_time
flight time in seconds
Definition autopilot.h:65
float dist2_to_home
Definition common_nav.c:38
struct Electrical electrical
Definition electrical.c:92
Interface for electrical status: supply voltage, current, battery status, etc.
uint32_t avg_power
average power sum
Definition electrical.h:53
float energy
consumed energy in Wh
Definition electrical.h:49
float current
current in A
Definition electrical.h:47
uint32_t avg_cnt
average power counter
Definition electrical.h:54
float charge
consumed electric charge in Ah
Definition electrical.h:48
float vsupply
supply voltage in V
Definition electrical.h:45
float v_ctl_auto_airspeed_controlled
float v_ctl_altitude_setpoint
in meters above MSL
Definition energy_ctrl.c:88
float v_ctl_auto_airspeed_setpoint
in meters per second
float v_ctl_auto_groundspeed_setpoint
in meters per second
float v_ctl_climb_setpoint
Definition energy_ctrl.c:98
uint8_t v_ctl_mode
Definition energy_ctrl.c:74
#define KILL_MODE_DISTANCE
Maximum distance from HOME waypoint before going into kill mode.
void autopilot_firmware_init(void)
Init function.
uint8_t rc_settings_mode
static void send_desired(struct transport_tx *trans, struct link_device *dev)
void autopilot_send_mode(void)
Report autopilot mode on default downlink channel.
static void send_energy(struct transport_tx *trans, struct link_device *dev)
static void send_airspeed(struct transport_tx *trans, struct link_device *dev)
void monitor_task(void)
monitor stuff run at 1Hz
static void send_fbw_status(struct transport_tx *trans, struct link_device *dev)
#define CATASTROPHIC_BAT_KILL_DELAY
Maximum time allowed for catastrophic battery level before going into kill mode.
uint8_t lateral_mode
static void send_estimator(struct transport_tx *trans, struct link_device *dev)
#define MIN_SPEED_FOR_TAKEOFF
Default minimal speed for takeoff in m/s.
static void send_mode(struct transport_tx *trans, struct link_device *dev)
Fixedwing specific autopilot interface and initialization.
#define AP_MODE_MANUAL
AP modes.
#define CONTROL_FREQUENCY
Fixed wing horizontal control.
static struct UtmCoor_f * stateGetPositionUtm_f(void)
Get position in UTM coordinates (float).
Definition state.h:821
static float stateGetHorizontalSpeedNorm_f(void)
Get norm of horizontal ground speed (float).
Definition state.h:1076
static struct EnuCoor_f * stateGetSpeedEnu_f(void)
Get ground speed in local ENU coordinates (float).
Definition state.h:1058
static float stateGetAirspeed_f(void)
Get airspeed (float).
Definition state.h:1590
uint16_t foo
Definition main_demo5.c:58
uint8_t fbw_mode
Fly by wire modes.
Definition main_fbw.c:41
float desired_x
Definition nav.c:308
float desired_y
Definition nav.c:308
uint8_t horizontal_mode
Definition nav.c:70
Fixedwing Navigation library.
#define Square(_x)
Definition nav.h:53
PRINT_CONFIG_VAR(ONELOOP_ANDI_FILT_CUTOFF)
#define MAX_PPRZ
Definition paparazzi.h:8
struct RadioControl radio_control
Generic interface for radio control modules.
#define RC_REALLY_LOST
uint8_t frame_rate
#define RC_OK
float slider_1_val
Definition rc_settings.c:33
float slider_2_val
Definition rc_settings.c:33
#define RcSettingsOff()
Definition rc_settings.h:70
float h_ctl_roll_setpoint
float h_ctl_pitch_loop_setpoint
float h_ctl_course_setpoint
API to get/set the generic vehicle states.
static const struct usb_device_descriptor dev
Definition usb_ser_hw.c:74
volatile uint32_t nb_sec
full seconds since startup
Definition sys_time.h:72
int8_t register_periodic_telemetry(struct periodic_telemetry *_pt, uint8_t _id, telemetry_cb _cb)
Register a telemetry callback function.
Definition telemetry.c:51
Periodic telemetry system header (includes downlink utility and generated code).
#define DefaultPeriodic
Set default periodic telemetry.
Definition telemetry.h:66
unsigned short uint16_t
Typedef defining 16 bit unsigned short type.
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.