Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
firmware
include
controller.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2017, James Jackson and Daniel Koch, BYU MAGICC Lab
3
*
4
* All rights reserved.
5
*
6
* Redistribution and use in source and binary forms, with or without
7
* modification, are permitted provided that the following conditions are met:
8
*
9
* * Redistributions of source code must retain the above copyright notice, this
10
* list of conditions and the following disclaimer.
11
*
12
* * Redistributions in binary form must reproduce the above copyright notice,
13
* this list of conditions and the following disclaimer in the documentation
14
* and/or other materials provided with the distribution.
15
*
16
* * Neither the name of the copyright holder nor the names of its
17
* contributors may be used to endorse or promote products derived from
18
* this software without specific prior written permission.
19
*
20
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
*/
31
32
#ifndef ROSFLIGHT_FIRMWARE_CONTROLLER_H
33
#define ROSFLIGHT_FIRMWARE_CONTROLLER_H
34
35
#include "
interface/param_listener.h
"
36
37
#include "
command_manager.h
"
38
#include "
estimator.h
"
39
40
#include <
turbomath/turbomath.h
>
41
42
#include <cstdbool>
43
#include <cstdint>
44
45
namespace
rosflight_firmware
46
{
47
class
ROSflight;
48
49
class
Controller
:
public
ParamListenerInterface
50
{
51
public
:
52
struct
Output
53
{
54
float
F
;
55
float
x
;
56
float
y
;
57
float
z
;
58
};
59
60
Controller
(
ROSflight
&rf);
61
62
inline
const
Output
&
output
()
const
{
return
output_
; }
63
64
void
init
();
65
void
run
();
66
67
void
calculate_equilbrium_torque_from_rc
();
68
void
param_change_callback
(uint16_t param_id)
override
;
69
70
private
:
71
class
PID
72
{
73
public
:
74
PID
();
75
void
init
(
float
kp,
float
ki,
float
kd,
float
max,
float
min,
float
tau);
76
float
run
(
float
dt,
float
x
,
float
x_c,
bool
update_integrator);
77
float
run
(
float
dt,
float
x,
float
x_c,
bool
update_integrator,
float
xdot);
78
79
private
:
80
float
kp_
;
81
float
ki_
;
82
float
kd_
;
83
84
float
max_
;
85
float
min_
;
86
87
float
integrator_
;
88
float
differentiator_
;
89
float
prev_x_
;
90
float
tau_
;
91
};
92
93
ROSflight
&
RF_
;
94
95
turbomath::Vector
run_pid_loops
(uint32_t dt,
96
const
Estimator::State
&state,
97
const
control_t
&command,
98
bool
update_integrators);
99
100
Output
output_
;
101
102
PID
roll_
;
103
PID
roll_rate_
;
104
PID
pitch_
;
105
PID
pitch_rate_
;
106
PID
yaw_rate_
;
107
108
uint64_t
prev_time_us_
;
109
};
110
111
}
// namespace rosflight_firmware
112
113
#endif // ROSFLIGHT_FIRMWARE_CONTROLLER_H
rosflight_firmware::Controller::run
void run()
Definition:
controller.cpp:69
rosflight_firmware::control_t
Definition:
command_manager.h:61
param_listener.h
rosflight_firmware::Controller::Controller
Controller(ROSflight &rf)
Definition:
controller.cpp:44
rosflight_firmware::Controller
Definition:
controller.h:49
rosflight_firmware::Controller::prev_time_us_
uint64_t prev_time_us_
Definition:
controller.h:108
rosflight_firmware::Controller::PID::min_
float min_
Definition:
controller.h:85
rosflight_firmware::Controller::PID
Definition:
controller.h:71
rosflight_firmware
Definition:
airbourne_board.cpp:34
rosflight_firmware::Controller::PID::kd_
float kd_
Definition:
controller.h:82
rosflight_firmware::Controller::roll_
PID roll_
Definition:
controller.h:102
rosflight_firmware::Controller::init
void init()
Definition:
controller.cpp:46
rosflight_firmware::Controller::PID::tau_
float tau_
Definition:
controller.h:90
rosflight_firmware::Controller::run_pid_loops
turbomath::Vector run_pid_loops(uint32_t dt, const Estimator::State &state, const control_t &command, bool update_integrators)
Definition:
controller.cpp:176
rosflight_firmware::Controller::Output::y
float y
Definition:
controller.h:56
rosflight_firmware::Controller::pitch_
PID pitch_
Definition:
controller.h:104
rosflight_firmware::Controller::RF_
ROSflight & RF_
Definition:
controller.h:93
rosflight_firmware::Controller::PID::integrator_
float integrator_
Definition:
controller.h:87
rosflight_firmware::Controller::Output::x
float x
Definition:
controller.h:55
rosflight_firmware::Controller::param_change_callback
void param_change_callback(uint16_t param_id) override
Definition:
controller.cpp:147
rosflight_firmware::Controller::yaw_rate_
PID yaw_rate_
Definition:
controller.h:106
rosflight_firmware::Controller::roll_rate_
PID roll_rate_
Definition:
controller.h:103
rosflight_firmware::ROSflight
Definition:
include/rosflight.h:53
turbomath.h
rosflight_firmware::Controller::pitch_rate_
PID pitch_rate_
Definition:
controller.h:105
rosflight_firmware::ParamListenerInterface
Definition:
param_listener.h:39
rosflight_firmware::Controller::PID::max_
float max_
Definition:
controller.h:84
rosflight_firmware::Controller::output
const Output & output() const
Definition:
controller.h:62
rosflight_firmware::Controller::Output::z
float z
Definition:
controller.h:57
rosflight_firmware::Controller::PID::ki_
float ki_
Definition:
controller.h:81
turbomath::Vector
Definition:
turbomath.h:62
rosflight_firmware::Controller::output_
Output output_
Definition:
controller.h:100
estimator.h
rosflight_firmware::Controller::Output::F
float F
Definition:
controller.h:54
rosflight_firmware::Controller::PID::prev_x_
float prev_x_
Definition:
controller.h:89
rosflight_firmware::Controller::calculate_equilbrium_torque_from_rc
void calculate_equilbrium_torque_from_rc()
Definition:
controller.cpp:102
rosflight_firmware::Controller::PID::kp_
float kp_
Definition:
controller.h:80
rosflight_firmware::Estimator::State
Definition:
estimator.h:50
rosflight_firmware::Controller::PID::differentiator_
float differentiator_
Definition:
controller.h:88
rosflight_firmware::Controller::Output
Definition:
controller.h:52
command_manager.h
rosflight_firmware
Author(s): Daniel Koch
, James Jackson
autogenerated on Thu Apr 15 2021 05:07:46