Paparazzi UAS v7.1_unstable
Paparazzi is a free software Unmanned Aircraft System.
Loading...
Searching...
No Matches
rotwing_state.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2023 Dennis van Wijngaarden <D.C.vanWijngaarden@tudelft.nl>
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
26#ifndef ROTWING_STATE_H
27#define ROTWING_STATE_H
28
29#include "std.h"
30
31/* Magnitude skew angle jump away from quad */
32#ifndef ROTWING_SKEW_ANGLE_STEP
33#define ROTWING_SKEW_ANGLE_STEP 55.0
34#endif
35
36/* Preferred pitch angle for the quad mode (deg) */
37#ifndef ROTWING_QUAD_PREF_PITCH
38#define ROTWING_QUAD_PREF_PITCH -5.0
39#endif
40
48
51 struct {
52 bool skew_angle_valid : 1; // Skew angle didn't timeout
53 bool hover_motors_enabled : 1; // Hover motors command is enabled
54 bool hover_motors_idle : 1; // Hover motors are idling (throttle < IDLE_THROTTLE)
55 bool hover_motors_running : 1; // Hover motors are running (RPM >= MIN_RPM)
56 bool pusher_motor_running : 1; // Pusher motor is running (RPM >= MIN_RPM)
57 bool skew_forced : 1; // Skew angle is forced
58 };
59};
60
62 /* Control */
63 enum rotwing_states_t state; // Current state
64 enum rotwing_states_t nav_state; // Desired navigation state (requested only by NAV and can be overruled by RC)
65 bool hover_motors_enabled; // Hover motors enabled (> idle throttle)
66
67 /* Skew */
68 float sp_skew_angle_deg; // Setpoint skew angle in degrees
69 float ref_model_skew_angle_deg; // Reference model skew angle in degrees
70 float meas_skew_angle_deg; // Measured skew angle in degrees
71 float meas_skew_angle_time; // Time of the last skew angle measurement
72 bool force_skew; // Force skew angle to a certain value by the GCS
73 struct {
74 bool active; // Sweep the forced skew angle setpoint (e.g. for demonstrations)
75 float min_deg; // Lowest skew angle of the sweep in degrees
76 float max_deg; // Highest skew angle of the sweep in degrees
77 float freq; // Sweep frequency in Hz
79 int16_t skew_cmd; // Skewing command in pprz values
80
81 /* Airspeeds */
82 float fw_min_airspeed; // Minimum airspeed (stall+margin)
83 float cruise_airspeed; // Airspeed for cruising
84 float min_airspeed; // Minimum airspeed for bounding
85 float max_airspeed; // Maximum airspeed for bounding
86
87 /* RPM measurements*/
88 int32_t meas_rpm[5]; // Measured RPM of the hover and pusher motors
89 float meas_rpm_time[5]; // Time of the last RPM measurement
90
91 /* Sim failures */
92 bool fail_skew_angle; // Skew angle sensor failure
93 bool fail_hover_motor; // Hover motor failure
94 bool fail_pusher_motor; // Pusher motor failure
95};
96extern struct rotwing_state_t rotwing_state;
97
98void rotwing_state_init(void);
99void rotwing_state_periodic(void);
104
108
109#endif // ROTWING_STATE_H
struct State state
Definition state.c:36
bool rotwing_state_pusher_motor_running(void)
bool rotwing_state_hover_motors_running(void)
enum rotwing_states_t state
int32_t meas_rpm[5]
float meas_skew_angle_time
void rotwing_state_init(void)
bool rotwing_state_hover_motors_idling(void)
Check if hover motors are idling (COMMAND_THRUST < ROTWING_QUAD_IDLE_MIN_THRUST) for ROTWING_QUAD_IDL...
bool rotwing_state_skew_angle_valid(void)
float meas_rpm_time[5]
float ref_model_skew_angle_deg
struct rotwing_state_t::@315 skew_sweep
bool rotwing_state_choose_state_by_dist(uint8_t wp_id)
float meas_skew_angle_deg
bool rotwing_state_choose_circle_direction(uint8_t wp_id)
rotwing_states_t
@ ROTWING_STATE_FREE
@ ROTWING_STATE_REQUEST_HOVER
@ ROTWING_STATE_FORCE_FW
@ ROTWING_STATE_FORCE_HOVER
@ ROTWING_STATE_REQUEST_FW
struct rotwing_state_t rotwing_state
void rotwing_state_periodic(void)
enum rotwing_states_t nav_state
void rotwing_state_set(enum rotwing_states_t state)
unsigned short uint16_t
Typedef defining 16 bit unsigned short type.
int int32_t
Typedef defining 32 bit int type.
short int16_t
Typedef defining 16 bit short type.
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.