Paparazzi UAS v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
guidance_opticflow_hover.c
Go to the documentation of this file.
1/*
2 * Copyright (C) 2014 Hann Woei Ho
3 * 2015 Freek van Tienen <freek.v.tienen@gmail.com>
4 *
5 * This file is part of Paparazzi.
6 *
7 * Paparazzi is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2, or (at your option)
10 * any later version.
11 *
12 * Paparazzi is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with Paparazzi; see the file COPYING. If not, see
19 * <http://www.gnu.org/licenses/>.
20 */
21
30// Own Header
32
33#include "modules/core/abi.h"
34
35// Stabilization
38#include "autopilot.h"
40
42#ifndef VISION_VELOCITY_ESTIMATE_ID
43#define VISION_VELOCITY_ESTIMATE_ID ABI_BROADCAST
44#endif
46
47#define CMD_OF_SAT 1500 // 40 deg = 2859.1851
48
49#ifndef VISION_PHI_PGAIN
50#define VISION_PHI_PGAIN 400
51#endif
53
54#ifndef VISION_PHI_IGAIN
55#define VISION_PHI_IGAIN 20
56#endif
58
59#ifndef VISION_THETA_PGAIN
60#define VISION_THETA_PGAIN 400
61#endif
63
64#ifndef VISION_THETA_IGAIN
65#define VISION_THETA_IGAIN 20
66#endif
68
69#ifndef VISION_DESIRED_VX
70#define VISION_DESIRED_VX 0
71#endif
73
74#ifndef VISION_DESIRED_VY
75#define VISION_DESIRED_VY 0
76#endif
78
79/* Check the control gains */
80#if (VISION_PHI_PGAIN < 0) || \
81 (VISION_PHI_IGAIN < 0) || \
82 (VISION_THETA_PGAIN < 0) || \
83 (VISION_THETA_IGAIN < 0)
84#error "ALL control gains have to be positive!!!"
85#endif
86
88
89/* Initialize the default gains and settings */
92 .phi_igain = VISION_PHI_IGAIN,
93 .theta_pgain = VISION_THETA_PGAIN,
94 .theta_igain = VISION_THETA_IGAIN,
95 .desired_vx = VISION_DESIRED_VX,
96 .desired_vy = VISION_DESIRED_VY
97};
98
99
101 uint32_t stamp, float vel_x, float vel_y, float vel_z, float noise_x, float noise_y, float noise_z);
106{
107 // Subscribe to the VELOCITY_ESTIMATE ABI message
109}
110
116{
117 /* Reset the integrated errors */
120
121 /* Set rool/pitch to 0 degrees and psi to current heading */
125
127}
128
133void guidance_module_run(bool in_flight)
134{
136 struct ThrustSetpoint th = guidance_v_run(in_flight);
137 /* Run the default attitude stabilization */
139}
140
145 uint32_t stamp UNUSED, float vel_x, float vel_y, float vel_z UNUSED,
146 float noise_x, float noise_y, float noise_z UNUSED)
147{
148 if (noise_x >= 0.f)
149 {
150 /* Calculate the error */
152
153 /* Calculate the integrated errors (TODO: bound??) */
155
156 /* Calculate the commands */
159
160 /* Bound the roll and pitch commands */
162 }
163
164 if (noise_y >= 0.f)
165 {
166 /* Calculate the error */
168
169 /* Calculate the integrated errors (TODO: bound??) */
171
172 /* Calculate the commands */
175
176 /* Bound the roll and pitch commands */
178 }
179}
Main include for ABI (AirBorneInterface).
Event structure to store callbacks in a linked list.
Definition abi_common.h:67
Core autopilot interface common to all firmwares.
#define UNUSED(x)
int32_t phi
in rad with INT32_ANGLE_FRAC
int32_t psi
in rad with INT32_ANGLE_FRAC
int32_t theta
in rad with INT32_ANGLE_FRAC
static struct Int32Eulers * stateGetNedToBodyEulers_i(void)
Get vehicle body attitude euler angles (int).
Definition state.h:1288
float err_vy
float err_vx
float err_vx_int
The integrated velocity error in x direction (m/s)
struct Int32Eulers cmd
The commands that are send to the hover loop.
float err_vy_int
The integrated velocity error in y direction (m/s)
int32_t theta_pgain
The pitch P gain on the err_vy.
int32_t theta_igain
The pitch I gain on the err_vy_int.
float desired_vy
The desired velocity in the y direction (cm/s)
float desired_vx
The desired velocity in the x direction (cm/s)
int32_t phi_pgain
The roll P gain on the err_vx.
int32_t phi_igain
The roll I gain on the err_vx_int.
struct opticflow_stab_t opticflow_stab
#define VISION_VELOCITY_ESTIMATE_ID
Default sender to accect VELOCITY_ESTIMATE messages from.
#define VISION_THETA_PGAIN
#define VISION_DESIRED_VY
void guidance_opticflow_hover_init(void)
Initialization of horizontal guidance module.
void guidance_module_enter(void)
guidance mode enter resets the errors and starts the controller.
static abi_event velocity_est_ev
void guidance_module_run(bool in_flight)
Main guidance loop.
static void stabilization_opticflow_vel_cb(uint8_t sender_id, uint32_t stamp, float vel_x, float vel_y, float vel_z, float noise_x, float noise_y, float noise_z)
Update the controls on a new VELOCITY_ESTIMATE ABI message.
#define VISION_DESIRED_VX
#define VISION_PHI_PGAIN
#define CMD_OF_SAT
#define VISION_PHI_IGAIN
#define VISION_THETA_IGAIN
Optical-flow based control for Linux based systems.
uint16_t foo
Definition main_demo5.c:58
PRINT_CONFIG_VAR(ONELOOP_ANDI_FILT_CUTOFF)
void guidance_v_mode_changed(uint8_t new_mode)
Definition guidance_v.c:132
struct ThrustSetpoint guidance_v_run(bool in_flight)
Guidance vertical run functions.
Definition guidance_v.c:221
Vertical guidance for rotorcrafts.
#define GUIDANCE_V_MODE_HOVER
Definition guidance_v.h:39
General attitude stabilization interface for rotorcrafts.
void stabilization_attitude_run(bool in_flight, struct StabilizationSetpoint *sp, struct ThrustSetpoint *thrust, int32_t *cmd)
Attitude control run function.
struct Stabilization stabilization
struct StabilizationSetpoint stab_sp_from_eulers_i(struct Int32Eulers *eulers)
int32_t cmd[COMMANDS_NB]
output command vector, range from [-MAX_PPRZ:MAX_PPRZ] (store for messages)
Stabilization setpoint.
union StabilizationSetpoint::@278 sp
Thrust setpoint // TODO to a setpoint header Structure to store the desired thrust vector with differ...
union ThrustSetpoint::@284 sp
unsigned int uint32_t
Typedef defining 32 bit unsigned int type.
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.