APM:Libraries
AC_PID_test.cpp
Go to the documentation of this file.
1 /*
2  * Example of PID library.
3  * 2012 Code by Jason Short, Randy Mackay. DIYDrones.com
4  */
5 
6 #include <AP_HAL/AP_HAL.h>
7 #include <AC_PID/AC_PID.h>
8 #include <AC_PID/AC_HELI_PID.h>
10 
11 void setup();
12 void loop();
13 
15 
16 // default PID values
17 #define TEST_P 1.0f
18 #define TEST_I 0.01f
19 #define TEST_D 0.2f
20 #define TEST_IMAX 10
21 #define TEST_FILTER 5.0f
22 #define TEST_DT 0.01f
23 #define TEST_INITIAL_FF 0.0f
24 
25 // setup function
26 void setup()
27 {
28  hal.console->printf("ArduPilot Mega AC_PID library test\n");
29 
30  hal.scheduler->delay(1000);
31 }
32 
33 // main loop
34 void loop()
35 {
36  // setup (unfortunately must be done here as we cannot create a global AC_PID object)
39  uint16_t radio_in;
40  uint16_t radio_trim;
41  int16_t error;
42  float control_P, control_I, control_D;
43 
44  // display PID gains
45  hal.console->printf("P %f I %f D %f imax %f\n", (double)pid.kP(), (double)pid.kI(), (double)pid.kD(), (double)pid.imax());
46 
47  // capture radio trim
48  radio_trim = RC_Channels::get_radio_in(0);
49 
50  while (true) {
51  RC_Channels::read_input(); // poll the radio for new values
52  radio_in = RC_Channels::get_radio_in(0);
53  error = radio_in - radio_trim;
54  pid.set_input_filter_all(error);
55  control_P = pid.get_p();
56  control_I = pid.get_i();
57  control_D = pid.get_d();
58 
59  // display pid results
60  hal.console->printf("radio: %d\t err: %d\t pid:%4.2f (p:%4.2f i:%4.2f d:%4.2f)\n",
61  (int)radio_in, (int)error,
62  (double)(control_P+control_I+control_D),
63  (double)control_P, (double)control_I, (double)control_D);
64  hal.scheduler->delay(50);
65  }
66 }
67 
68 AP_HAL_MAIN();
#define TEST_FILTER
Definition: AC_PID_test.cpp:21
Generic PID algorithm, with EEPROM-backed storage of constants.
AP_Float & kP()
Definition: AC_PID.h:60
AP_HAL::UARTDriver * console
Definition: HAL.h:110
const AP_HAL::HAL & hal
-*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
Definition: AC_PID_test.cpp:14
float get_d()
Definition: AC_PID.cpp:155
#define TEST_INITIAL_FF
Definition: AC_PID_test.cpp:23
virtual void delay(uint16_t ms)=0
Heli PID control class.
Definition: AC_HELI_PID.h:16
virtual void printf(const char *,...) FMT_PRINTF(2
Definition: BetterStream.cpp:5
Helicopter Specific Rate PID algorithm, with EEPROM-backed storage of constants.
RC_Channel manager, with EEPROM-backed storage of constants.
#define TEST_DT
Definition: AC_PID_test.cpp:22
void loop()
Definition: AC_PID_test.cpp:34
float imax() const
Definition: AC_PID.h:64
const HAL & get_HAL()
#define TEST_I
Definition: AC_PID_test.cpp:18
static bool read_input(void)
void set_input_filter_all(float input)
Definition: AC_PID.cpp:87
AP_Float & kD()
Definition: AC_PID.h:62
static uint16_t get_radio_in(const uint8_t chan)
#define error(fmt, args ...)
#define TEST_IMAX
Definition: AC_PID_test.cpp:20
#define TEST_D
Definition: AC_PID_test.cpp:19
float get_i()
Definition: AC_PID.cpp:140
#define TEST_P
Definition: AC_PID_test.cpp:17
Copter PID control class.
Definition: AC_PID.h:17
void setup()
Definition: AC_PID_test.cpp:26
AP_Float & kI()
Definition: AC_PID.h:61
float get_p()
Definition: AC_PID.cpp:134
AP_HAL::Scheduler * scheduler
Definition: HAL.h:114
AP_HAL_MAIN()