44
44
#include " AutogyroTakeoff.h"
45
45
#include < systemlib/mavlink_log.h>
46
46
#include < mathlib/mathlib.h>
47
+ #include < lib/geo/geo.h>
47
48
48
49
#include < uORB/Publication.hpp>
49
50
@@ -72,8 +73,10 @@ void AutogyroTakeoff::init(const hrt_abstime &now, float yaw, double current_lat
72
73
_time_in_state = now;
73
74
_last_sent_release_status = now;
74
75
_climbout = true ; // this is true until climbout is finished
75
- _start_wp (0 ) = current_lat;
76
- _start_wp (1 ) = current_lon;
76
+ _takeoff_wp (0 ) = current_lat;
77
+ _takeoff_wp (1 ) = current_lon;
78
+ _initial_wp (0 ) = current_lat;
79
+ _initial_wp (1 ) = current_lon;
77
80
}
78
81
79
82
void AutogyroTakeoff::update (const hrt_abstime &now, float airspeed, float rotor_rpm, float alt_agl,
@@ -182,6 +185,8 @@ void AutogyroTakeoff::update(const hrt_abstime &now, float airspeed, float rotor
182
185
}
183
186
184
187
if (ready_for_release) {
188
+ _init_yaw = get_bearing_to_next_waypoint (_initial_wp (0 ), _initial_wp (1 ), current_lat, current_lon);
189
+
185
190
_state = AutogyroTakeoffState::TAKEOFF_RELEASE;
186
191
_time_in_state = now;
187
192
// TODO: pripravit funkci do release
@@ -207,14 +212,11 @@ void AutogyroTakeoff::update(const hrt_abstime &now, float airspeed, float rotor
207
212
OUT: Command for release
208
213
*/
209
214
case AutogyroTakeoffState::TAKEOFF_RELEASE: {
210
- // Wait for ACK from platform
211
- // PX4_INFO("RELEASE, agl: %f", (double) alt_agl);
212
- play_release_tone ();
213
-
214
215
// Waiting to get full throttle
215
216
if (hrt_elapsed_time (&_time_in_state) < (_param_rwto_ramp_time.get () * 1_s)) {
216
217
// Send release CMD
217
218
takeoff_information.result = 1 ;
219
+ play_release_tone ();
218
220
}
219
221
220
222
autogyro_takeoff_status.rpm = true ;
@@ -225,9 +227,10 @@ void AutogyroTakeoff::update(const hrt_abstime &now, float airspeed, float rotor
225
227
play_next_tone ();
226
228
_time_in_state = now;
227
229
230
+ // set current position as center of loiter
228
231
if (_param_rwto_hdg.get () == 0 ) {
229
- _start_wp (0 ) = current_lat;
230
- _start_wp (1 ) = current_lon;
232
+ _takeoff_wp (0 ) = current_lat;
233
+ _takeoff_wp (1 ) = current_lon;
231
234
}
232
235
}
233
236
}
@@ -416,8 +419,8 @@ float AutogyroTakeoff::getThrottle(const hrt_abstime &now, float tecsThrottle)
416
419
case AutogyroTakeoffState::PRE_TAKEOFF_PREROTATE:
417
420
case AutogyroTakeoffState::PRE_TAKEOFF_DONE: {
418
421
if (_param_ag_prerotator_type.get () == AutogyroTakeoffType::WOPREROT_RUNWAY) {
419
- float throttlea = ((now - _time_in_state) / (_param_rwto_ramp_time.get () * 1_s)) * _param_rwto_max_thr.get ();
420
- return math::min (throttlea , _param_rwto_max_thr.get ());
422
+ float throttle = ((now - _time_in_state) / (_param_rwto_ramp_time.get () * 1_s)) * _param_rwto_max_thr.get ();
423
+ return math::min (throttle , _param_rwto_max_thr.get ());
421
424
422
425
} else {
423
426
return 0 ;
0 commit comments