Work in progress...

Dependencies:   ESC FreeIMU mbed-rtos mbed

Experiment - work in progress...

Committer:
MatteoT
Date:
Sun Oct 27 01:05:35 2013 +0000
Revision:
3:5e7476bca25f
Parent:
2:7439607ccd51
Child:
4:46f3c3dd5977
Now able to read QuadState in JSON from UDP broadcast

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MatteoT 3:5e7476bca25f 1 #ifndef QUAD_STATE__H
MatteoT 3:5e7476bca25f 2 #define QUAD_STATE__H
MatteoT 3:5e7476bca25f 3
MatteoT 2:7439607ccd51 4 #include <stdint.h>
MatteoT 2:7439607ccd51 5
MatteoT 3:5e7476bca25f 6 #ifndef QUAD_STATE_NO_JSON
MatteoT 3:5e7476bca25f 7 #include <picojson.h>
MatteoT 3:5e7476bca25f 8 #endif
MatteoT 3:5e7476bca25f 9
MatteoT 3:5e7476bca25f 10
MatteoT 2:7439607ccd51 11 //this struct must be the same for all the programs communicating with the Quad.
MatteoT 2:7439607ccd51 12 struct QuadState;
MatteoT 2:7439607ccd51 13 struct QuadState {
MatteoT 3:5e7476bca25f 14 double requested_throttle_1; //negative if not requested
MatteoT 3:5e7476bca25f 15 double requested_throttle_2;
MatteoT 3:5e7476bca25f 16 double requested_throttle_3;
MatteoT 3:5e7476bca25f 17 double requested_throttle_4;
MatteoT 2:7439607ccd51 18
MatteoT 3:5e7476bca25f 19 double actual_throttle_1;
MatteoT 3:5e7476bca25f 20 double actual_throttle_2;
MatteoT 3:5e7476bca25f 21 double actual_throttle_3;
MatteoT 3:5e7476bca25f 22 double actual_throttle_4;
MatteoT 2:7439607ccd51 23
MatteoT 3:5e7476bca25f 24 double target_main_dt;
MatteoT 3:5e7476bca25f 25 double actual_main_dt;
MatteoT 3:5e7476bca25f 26 double average_main_dt;
MatteoT 3:5e7476bca25f 27 double average_main_dt_k;
MatteoT 2:7439607ccd51 28
MatteoT 3:5e7476bca25f 29 double target_tx_dt;
MatteoT 3:5e7476bca25f 30 double actual_tx_dt;
MatteoT 3:5e7476bca25f 31 double average_tx_dt;
MatteoT 3:5e7476bca25f 32 double average_tx_dt_k;
MatteoT 2:7439607ccd51 33
MatteoT 3:5e7476bca25f 34 double target_rx_dt;
MatteoT 3:5e7476bca25f 35 double actual_rx_dt;
MatteoT 3:5e7476bca25f 36 double average_rx_dt;
MatteoT 3:5e7476bca25f 37 double average_rx_dt_k;
MatteoT 2:7439607ccd51 38
MatteoT 3:5e7476bca25f 39 double target_imu_dt;
MatteoT 3:5e7476bca25f 40 double actual_imu_dt;
MatteoT 3:5e7476bca25f 41 double average_imu_dt;
MatteoT 3:5e7476bca25f 42 double average_imu_dt_k;
MatteoT 3:5e7476bca25f 43
MatteoT 3:5e7476bca25f 44 double estimated_altitude;
MatteoT 3:5e7476bca25f 45 double estimated_rotation_q1;
MatteoT 3:5e7476bca25f 46 double estimated_rotation_q2;
MatteoT 3:5e7476bca25f 47 double estimated_rotation_q3;
MatteoT 3:5e7476bca25f 48 double estimated_rotation_q4;
MatteoT 2:7439607ccd51 49
MatteoT 3:5e7476bca25f 50 double estimated_position_x;
MatteoT 3:5e7476bca25f 51 double estimated_position_y;
MatteoT 3:5e7476bca25f 52 double estimated_position_z;
MatteoT 3:5e7476bca25f 53 double estimated_rotation_y;
MatteoT 3:5e7476bca25f 54 double estimated_rotation_p;
MatteoT 3:5e7476bca25f 55 double estimated_rotation_r;
MatteoT 2:7439607ccd51 56
MatteoT 3:5e7476bca25f 57 double target_position_x; //see _isRequired members
MatteoT 3:5e7476bca25f 58 double target_position_y;
MatteoT 3:5e7476bca25f 59 double target_position_z;
MatteoT 3:5e7476bca25f 60 double target_rotation_y;
MatteoT 3:5e7476bca25f 61 double target_rotation_p;
MatteoT 3:5e7476bca25f 62 double target_rotation_r;
MatteoT 2:7439607ccd51 63
MatteoT 3:5e7476bca25f 64 double target_position_x_isRequired; //1=true; 0=false; error otherwise
MatteoT 3:5e7476bca25f 65 double target_position_y_isRequired;
MatteoT 3:5e7476bca25f 66 double target_position_z_isRequired;
MatteoT 3:5e7476bca25f 67 double target_rotation_y_isRequired;
MatteoT 3:5e7476bca25f 68 double target_rotation_p_isRequired;
MatteoT 3:5e7476bca25f 69 double target_rotation_r_isRequired;
MatteoT 3:5e7476bca25f 70
MatteoT 3:5e7476bca25f 71 double ZERO_MEANS_ZERO_ALL_MOTORS_NOW__DANGER; //1=OK; 0=EmergencyStop; error otherwise
MatteoT 2:7439607ccd51 72
MatteoT 2:7439607ccd51 73
MatteoT 2:7439607ccd51 74 void reset (){
MatteoT 2:7439607ccd51 75
MatteoT 2:7439607ccd51 76 requested_throttle_1 = -1;
MatteoT 2:7439607ccd51 77 requested_throttle_2 = -1;
MatteoT 2:7439607ccd51 78 requested_throttle_3 = -1;
MatteoT 2:7439607ccd51 79 requested_throttle_4 = -1;
MatteoT 2:7439607ccd51 80
MatteoT 2:7439607ccd51 81 actual_throttle_1 = 0;
MatteoT 2:7439607ccd51 82 actual_throttle_2 = 0;
MatteoT 2:7439607ccd51 83 actual_throttle_3 = 0;
MatteoT 2:7439607ccd51 84 actual_throttle_4 = 0;
MatteoT 3:5e7476bca25f 85
MatteoT 3:5e7476bca25f 86 target_main_dt = TARGET_MAIN_DT;
MatteoT 3:5e7476bca25f 87 actual_main_dt = TARGET_MAIN_DT;
MatteoT 3:5e7476bca25f 88 average_main_dt = TARGET_MAIN_DT;
MatteoT 3:5e7476bca25f 89 average_main_dt_k = AVERAGE_DT_K_GAIN;
MatteoT 3:5e7476bca25f 90
MatteoT 3:5e7476bca25f 91 target_tx_dt = TARGET_TX_DT;
MatteoT 3:5e7476bca25f 92 actual_tx_dt = TARGET_TX_DT;
MatteoT 3:5e7476bca25f 93 average_tx_dt = TARGET_TX_DT;
MatteoT 3:5e7476bca25f 94 average_tx_dt_k = AVERAGE_DT_K_GAIN;
MatteoT 3:5e7476bca25f 95
MatteoT 3:5e7476bca25f 96 target_rx_dt = TARGET_RX_DT;
MatteoT 3:5e7476bca25f 97 actual_rx_dt = TARGET_RX_DT;
MatteoT 3:5e7476bca25f 98 average_rx_dt = TARGET_RX_DT;
MatteoT 3:5e7476bca25f 99 average_rx_dt_k = AVERAGE_DT_K_GAIN;
MatteoT 3:5e7476bca25f 100
MatteoT 3:5e7476bca25f 101 target_imu_dt = TARGET_IMU_DT;
MatteoT 3:5e7476bca25f 102 actual_imu_dt = TARGET_IMU_DT;
MatteoT 3:5e7476bca25f 103 average_imu_dt = TARGET_IMU_DT;
MatteoT 3:5e7476bca25f 104 average_imu_dt_k = AVERAGE_DT_K_GAIN;
MatteoT 2:7439607ccd51 105
MatteoT 2:7439607ccd51 106 estimated_altitude = 0;
MatteoT 2:7439607ccd51 107 estimated_rotation_q1 = 0;
MatteoT 2:7439607ccd51 108 estimated_rotation_q2 = 0;
MatteoT 2:7439607ccd51 109 estimated_rotation_q3 = 0;
MatteoT 2:7439607ccd51 110 estimated_rotation_q4 = 0;
MatteoT 2:7439607ccd51 111
MatteoT 2:7439607ccd51 112 estimated_position_x = 0;
MatteoT 2:7439607ccd51 113 estimated_position_y = 0;
MatteoT 2:7439607ccd51 114 estimated_position_z = 0;
MatteoT 2:7439607ccd51 115 estimated_rotation_y = 0;
MatteoT 2:7439607ccd51 116 estimated_rotation_p = 0;
MatteoT 2:7439607ccd51 117 estimated_rotation_r = 0;
MatteoT 2:7439607ccd51 118
MatteoT 2:7439607ccd51 119 target_position_x = 0;
MatteoT 2:7439607ccd51 120 target_position_y = 0;
MatteoT 2:7439607ccd51 121 target_position_z = 0;
MatteoT 2:7439607ccd51 122 target_rotation_y = 0;
MatteoT 2:7439607ccd51 123 target_rotation_p = 0;
MatteoT 2:7439607ccd51 124 target_rotation_r = 0;
MatteoT 2:7439607ccd51 125
MatteoT 3:5e7476bca25f 126 target_position_x_isRequired = 0;
MatteoT 3:5e7476bca25f 127 target_position_y_isRequired = 0;
MatteoT 3:5e7476bca25f 128 target_position_z_isRequired = 0;
MatteoT 3:5e7476bca25f 129 target_rotation_y_isRequired = 0;
MatteoT 3:5e7476bca25f 130 target_rotation_p_isRequired = 0;
MatteoT 3:5e7476bca25f 131 target_rotation_r_isRequired = 0;
MatteoT 3:5e7476bca25f 132
MatteoT 3:5e7476bca25f 133 ZERO_MEANS_ZERO_ALL_MOTORS_NOW__DANGER = 1;
MatteoT 3:5e7476bca25f 134 }
MatteoT 3:5e7476bca25f 135
MatteoT 3:5e7476bca25f 136 #ifndef QUAD_STATE_NO_JSON
MatteoT 3:5e7476bca25f 137 /**
MatteoT 3:5e7476bca25f 138 * @return number of setted members.
MatteoT 3:5e7476bca25f 139 */
MatteoT 3:5e7476bca25f 140 int setFromJSON(const char* JSON_frame){
MatteoT 3:5e7476bca25f 141 int setted = 0;
MatteoT 3:5e7476bca25f 142 picojson::value json;
MatteoT 3:5e7476bca25f 143 picojson::parse(json, JSON_frame, JSON_frame + strlen(JSON_frame));
MatteoT 3:5e7476bca25f 144
MatteoT 3:5e7476bca25f 145 unsigned int i=0;
MatteoT 3:5e7476bca25f 146
MatteoT 3:5e7476bca25f 147 #define JSON_SET(var) { \
MatteoT 3:5e7476bca25f 148 picojson::value j = json.get(i++); \
MatteoT 3:5e7476bca25f 149 if(j.is<double>()){ \
MatteoT 3:5e7476bca25f 150 var = j.get<double>(); \
MatteoT 3:5e7476bca25f 151 ++setted; \
MatteoT 3:5e7476bca25f 152 } \
MatteoT 3:5e7476bca25f 153 }
MatteoT 2:7439607ccd51 154
MatteoT 3:5e7476bca25f 155 JSON_SET(requested_throttle_1)
MatteoT 3:5e7476bca25f 156 JSON_SET(requested_throttle_2)
MatteoT 3:5e7476bca25f 157 JSON_SET(requested_throttle_3)
MatteoT 3:5e7476bca25f 158 JSON_SET(requested_throttle_4)
MatteoT 3:5e7476bca25f 159
MatteoT 3:5e7476bca25f 160 JSON_SET(actual_throttle_1)
MatteoT 3:5e7476bca25f 161 JSON_SET(actual_throttle_2)
MatteoT 3:5e7476bca25f 162 JSON_SET(actual_throttle_3)
MatteoT 3:5e7476bca25f 163 JSON_SET(actual_throttle_4)
MatteoT 3:5e7476bca25f 164
MatteoT 3:5e7476bca25f 165 JSON_SET(target_main_dt)
MatteoT 3:5e7476bca25f 166 JSON_SET(actual_main_dt)
MatteoT 3:5e7476bca25f 167 JSON_SET(average_main_dt)
MatteoT 3:5e7476bca25f 168 JSON_SET(average_main_dt_k)
MatteoT 3:5e7476bca25f 169
MatteoT 3:5e7476bca25f 170 JSON_SET(target_tx_dt)
MatteoT 3:5e7476bca25f 171 JSON_SET(actual_tx_dt)
MatteoT 3:5e7476bca25f 172 JSON_SET(average_tx_dt)
MatteoT 3:5e7476bca25f 173 JSON_SET(average_tx_dt_k)
MatteoT 3:5e7476bca25f 174
MatteoT 3:5e7476bca25f 175 JSON_SET(target_rx_dt)
MatteoT 3:5e7476bca25f 176 JSON_SET(actual_rx_dt)
MatteoT 3:5e7476bca25f 177 JSON_SET(average_rx_dt)
MatteoT 3:5e7476bca25f 178 JSON_SET(average_rx_dt_k)
MatteoT 3:5e7476bca25f 179
MatteoT 3:5e7476bca25f 180 JSON_SET(target_imu_dt)
MatteoT 3:5e7476bca25f 181 JSON_SET(actual_imu_dt)
MatteoT 3:5e7476bca25f 182 JSON_SET(average_imu_dt)
MatteoT 3:5e7476bca25f 183 JSON_SET(average_imu_dt_k)
MatteoT 3:5e7476bca25f 184
MatteoT 3:5e7476bca25f 185 JSON_SET(estimated_altitude)
MatteoT 3:5e7476bca25f 186 JSON_SET(estimated_rotation_q1)
MatteoT 3:5e7476bca25f 187 JSON_SET(estimated_rotation_q2)
MatteoT 3:5e7476bca25f 188 JSON_SET(estimated_rotation_q3)
MatteoT 3:5e7476bca25f 189 JSON_SET(estimated_rotation_q4)
MatteoT 3:5e7476bca25f 190
MatteoT 3:5e7476bca25f 191 JSON_SET(estimated_position_x)
MatteoT 3:5e7476bca25f 192 JSON_SET(estimated_position_y)
MatteoT 3:5e7476bca25f 193 JSON_SET(estimated_position_z)
MatteoT 3:5e7476bca25f 194 JSON_SET(estimated_rotation_y)
MatteoT 3:5e7476bca25f 195 JSON_SET(estimated_rotation_p)
MatteoT 3:5e7476bca25f 196 JSON_SET(estimated_rotation_r)
MatteoT 3:5e7476bca25f 197
MatteoT 3:5e7476bca25f 198 JSON_SET(target_position_x)
MatteoT 3:5e7476bca25f 199 JSON_SET(target_position_y)
MatteoT 3:5e7476bca25f 200 JSON_SET(target_position_z)
MatteoT 3:5e7476bca25f 201 JSON_SET(target_rotation_y)
MatteoT 3:5e7476bca25f 202 JSON_SET(target_rotation_p)
MatteoT 3:5e7476bca25f 203 JSON_SET(target_rotation_r)
MatteoT 3:5e7476bca25f 204
MatteoT 3:5e7476bca25f 205 JSON_SET(target_position_x_isRequired)
MatteoT 3:5e7476bca25f 206 JSON_SET(target_position_y_isRequired)
MatteoT 3:5e7476bca25f 207 JSON_SET(target_position_z_isRequired)
MatteoT 3:5e7476bca25f 208 JSON_SET(target_rotation_y_isRequired)
MatteoT 3:5e7476bca25f 209 JSON_SET(target_rotation_p_isRequired)
MatteoT 3:5e7476bca25f 210 JSON_SET(target_rotation_r_isRequired)
MatteoT 3:5e7476bca25f 211
MatteoT 3:5e7476bca25f 212 JSON_SET(ZERO_MEANS_ZERO_ALL_MOTORS_NOW__DANGER)
MatteoT 3:5e7476bca25f 213
MatteoT 3:5e7476bca25f 214 #undef JSON_SET
MatteoT 3:5e7476bca25f 215
MatteoT 3:5e7476bca25f 216 return setted;
MatteoT 2:7439607ccd51 217 }
MatteoT 3:5e7476bca25f 218
MatteoT 3:5e7476bca25f 219 std::string getJSON() const{
MatteoT 3:5e7476bca25f 220
MatteoT 3:5e7476bca25f 221 picojson::array array_vector;
MatteoT 3:5e7476bca25f 222
MatteoT 3:5e7476bca25f 223 #define JSON_GET(var) array_vector.push_back(picojson::value(var));
MatteoT 3:5e7476bca25f 224
MatteoT 3:5e7476bca25f 225
MatteoT 3:5e7476bca25f 226 JSON_GET(requested_throttle_1)
MatteoT 3:5e7476bca25f 227 JSON_GET(requested_throttle_2)
MatteoT 3:5e7476bca25f 228 JSON_GET(requested_throttle_3)
MatteoT 3:5e7476bca25f 229 JSON_GET(requested_throttle_4)
MatteoT 3:5e7476bca25f 230
MatteoT 3:5e7476bca25f 231 JSON_GET(actual_throttle_1)
MatteoT 3:5e7476bca25f 232 JSON_GET(actual_throttle_2)
MatteoT 3:5e7476bca25f 233 JSON_GET(actual_throttle_3)
MatteoT 3:5e7476bca25f 234 JSON_GET(actual_throttle_4)
MatteoT 3:5e7476bca25f 235
MatteoT 3:5e7476bca25f 236 JSON_GET(target_main_dt)
MatteoT 3:5e7476bca25f 237 JSON_GET(actual_main_dt)
MatteoT 3:5e7476bca25f 238 JSON_GET(average_main_dt)
MatteoT 3:5e7476bca25f 239 JSON_GET(average_main_dt_k)
MatteoT 3:5e7476bca25f 240
MatteoT 3:5e7476bca25f 241 JSON_GET(target_tx_dt)
MatteoT 3:5e7476bca25f 242 JSON_GET(actual_tx_dt)
MatteoT 3:5e7476bca25f 243 JSON_GET(average_tx_dt)
MatteoT 3:5e7476bca25f 244 JSON_GET(average_tx_dt_k)
MatteoT 3:5e7476bca25f 245
MatteoT 3:5e7476bca25f 246 JSON_GET(target_rx_dt)
MatteoT 3:5e7476bca25f 247 JSON_GET(actual_rx_dt)
MatteoT 3:5e7476bca25f 248 JSON_GET(average_rx_dt)
MatteoT 3:5e7476bca25f 249 JSON_GET(average_rx_dt_k)
MatteoT 3:5e7476bca25f 250
MatteoT 3:5e7476bca25f 251 JSON_GET(target_imu_dt)
MatteoT 3:5e7476bca25f 252 JSON_GET(actual_imu_dt)
MatteoT 3:5e7476bca25f 253 JSON_GET(average_imu_dt)
MatteoT 3:5e7476bca25f 254 JSON_GET(average_imu_dt_k)
MatteoT 3:5e7476bca25f 255
MatteoT 3:5e7476bca25f 256 JSON_GET(estimated_altitude)
MatteoT 3:5e7476bca25f 257 JSON_GET(estimated_rotation_q1)
MatteoT 3:5e7476bca25f 258 JSON_GET(estimated_rotation_q2)
MatteoT 3:5e7476bca25f 259 JSON_GET(estimated_rotation_q3)
MatteoT 3:5e7476bca25f 260 JSON_GET(estimated_rotation_q4)
MatteoT 3:5e7476bca25f 261
MatteoT 3:5e7476bca25f 262 JSON_GET(estimated_position_x)
MatteoT 3:5e7476bca25f 263 JSON_GET(estimated_position_y)
MatteoT 3:5e7476bca25f 264 JSON_GET(estimated_position_z)
MatteoT 3:5e7476bca25f 265 JSON_GET(estimated_rotation_y)
MatteoT 3:5e7476bca25f 266 JSON_GET(estimated_rotation_p)
MatteoT 3:5e7476bca25f 267 JSON_GET(estimated_rotation_r)
MatteoT 3:5e7476bca25f 268
MatteoT 3:5e7476bca25f 269 JSON_GET(target_position_x)
MatteoT 3:5e7476bca25f 270 JSON_GET(target_position_y)
MatteoT 3:5e7476bca25f 271 JSON_GET(target_position_z)
MatteoT 3:5e7476bca25f 272 JSON_GET(target_rotation_y)
MatteoT 3:5e7476bca25f 273 JSON_GET(target_rotation_p)
MatteoT 3:5e7476bca25f 274 JSON_GET(target_rotation_r)
MatteoT 3:5e7476bca25f 275
MatteoT 3:5e7476bca25f 276 JSON_GET(target_position_x_isRequired)
MatteoT 3:5e7476bca25f 277 JSON_GET(target_position_y_isRequired)
MatteoT 3:5e7476bca25f 278 JSON_GET(target_position_z_isRequired)
MatteoT 3:5e7476bca25f 279 JSON_GET(target_rotation_y_isRequired)
MatteoT 3:5e7476bca25f 280 JSON_GET(target_rotation_p_isRequired)
MatteoT 3:5e7476bca25f 281 JSON_GET(target_rotation_r_isRequired)
MatteoT 3:5e7476bca25f 282
MatteoT 3:5e7476bca25f 283 JSON_GET(ZERO_MEANS_ZERO_ALL_MOTORS_NOW__DANGER)
MatteoT 3:5e7476bca25f 284
MatteoT 3:5e7476bca25f 285 #undef JSON_GET
MatteoT 3:5e7476bca25f 286
MatteoT 3:5e7476bca25f 287 return picojson::value(array_vector).serialize();
MatteoT 3:5e7476bca25f 288 }
MatteoT 3:5e7476bca25f 289 #endif
MatteoT 3:5e7476bca25f 290
MatteoT 2:7439607ccd51 291 };
MatteoT 2:7439607ccd51 292
MatteoT 3:5e7476bca25f 293
MatteoT 3:5e7476bca25f 294 ///Calc dt in seconds.
MatteoT 3:5e7476bca25f 295 #define QUAD_STATE_READ_ACTUAL_DT(state, what, timer) { \
MatteoT 3:5e7476bca25f 296 state.actual_ ## what ## _dt = (double) 0.000001 * timer.read_us(); \
MatteoT 3:5e7476bca25f 297 }
MatteoT 3:5e7476bca25f 298
MatteoT 3:5e7476bca25f 299 ///Sleep until the setted DT is reached.
MatteoT 3:5e7476bca25f 300 #define QUAD_STATE_WAIT_DT_TARGET(actual, target) { \
MatteoT 3:5e7476bca25f 301 if(target-actual > 0.01*target && target-actual > 0.0001){ \
MatteoT 3:5e7476bca25f 302 Thread::wait((uint32_t) (1000.0*target-1000.0*actual)); \
MatteoT 3:5e7476bca25f 303 } else \
MatteoT 3:5e7476bca25f 304 Thread::yield(); \
MatteoT 3:5e7476bca25f 305 }
MatteoT 3:5e7476bca25f 306
MatteoT 3:5e7476bca25f 307 ///Calc actual dt and update average
MatteoT 3:5e7476bca25f 308 #define QUAD_STATE_UPDATE_DT(state, what, timer) { \
MatteoT 3:5e7476bca25f 309 state.actual_ ## what ## _dt = (double) 0.000001 * timer.read_us(); \
MatteoT 3:5e7476bca25f 310 timer.reset(); \
MatteoT 3:5e7476bca25f 311 state.average_ ## what ## _dt *= 0.9999999999999999 - state.average_ ## what ## _dt_k; \
MatteoT 3:5e7476bca25f 312 state.average_ ## what ## _dt += state.actual_ ## what ## _dt * state.average_ ## what ## _dt_k; \
MatteoT 3:5e7476bca25f 313 }
MatteoT 3:5e7476bca25f 314
MatteoT 3:5e7476bca25f 315
MatteoT 3:5e7476bca25f 316 /*
MatteoT 3:5e7476bca25f 317 //Calc dt in seconds
MatteoT 3:5e7476bca25f 318 #define DT_READ() mainQuadState.actual_throttle_dt = (float) (1.0/1000000.0) * dt_t.read_us()
MatteoT 3:5e7476bca25f 319 DT_READ();
MatteoT 3:5e7476bca25f 320 if(MAIN_CYCLE_TARGET_DT - mainQuadState.actual_throttle_dt > MAIN_CYCLE_TARGET_DT/10){
MatteoT 3:5e7476bca25f 321 //if the dt is very small
MatteoT 3:5e7476bca25f 322 //sleep until the setted DT is reached.
MatteoT 3:5e7476bca25f 323 Thread::wait(MAIN_CYCLE_TARGET_DT - mainQuadState.actual_throttle_dt);
MatteoT 3:5e7476bca25f 324 DT_READ();
MatteoT 3:5e7476bca25f 325 }
MatteoT 3:5e7476bca25f 326 dt_timer.reset();
MatteoT 3:5e7476bca25f 327
MatteoT 3:5e7476bca25f 328 //Calc average dt
MatteoT 3:5e7476bca25f 329 mainQuadState.average_throttle_dt -= mainQuadState.average_throttle_dt * mainQuadState.average_throttle_dt_k;
MatteoT 3:5e7476bca25f 330 mainQuadState.average_throttle_dt += mainQuadState.actual_throttle_dt * mainQuadState.average_throttle_dt_k;
MatteoT 3:5e7476bca25f 331 */
MatteoT 3:5e7476bca25f 332
MatteoT 3:5e7476bca25f 333
MatteoT 3:5e7476bca25f 334
MatteoT 3:5e7476bca25f 335
MatteoT 3:5e7476bca25f 336 #endif //QUAD_STATE__H