vtol_takeoff: use global position for takeoff location instead of home position.

- home position and takeoff position don't necessarily need to match

Signed-off-by: RomanBapst <bapstroman@gmail.com>
This commit is contained in:
RomanBapst
2023-09-19 10:44:15 +03:00
committed by Roman Bapst
parent dac337efc4
commit 6d71224cdb
+5 -5
View File
@@ -51,7 +51,7 @@ VtolTakeoff::VtolTakeoff(Navigator *navigator) :
void
VtolTakeoff::on_activation()
{
if (_navigator->home_global_position_valid()) {
if (hrt_elapsed_time(&_navigator->get_global_position()->timestamp) < 1_s) {
set_takeoff_position();
_takeoff_state = vtol_takeoff_state::TAKEOFF_HOVER;
_navigator->reset_cruising_speed();
@@ -71,8 +71,8 @@ VtolTakeoff::on_active()
position_setpoint_triplet_s *pos_sp_triplet = _navigator->get_position_setpoint_triplet();
_mission_item.nav_cmd = NAV_CMD_WAYPOINT;
_mission_item.yaw = wrap_pi(get_bearing_to_next_waypoint(_navigator->get_home_position()->lat,
_navigator->get_home_position()->lon, _loiter_location(0), _loiter_location(1)));
_mission_item.yaw = wrap_pi(get_bearing_to_next_waypoint(_mission_item.lat,
_mission_item.lon, _loiter_location(0), _loiter_location(1)));
_mission_item.force_heading = true;
mission_apply_limitation(_mission_item);
mission_item_to_position_setpoint(_mission_item, &pos_sp_triplet->current);
@@ -172,8 +172,8 @@ VtolTakeoff::set_takeoff_position()
// set current mission item to takeoff
set_takeoff_item(&_mission_item, _transition_alt_amsl);
_mission_item.lat = _navigator->get_home_position()->lat;
_mission_item.lon = _navigator->get_home_position()->lon;
_mission_item.lat = _navigator->get_global_position()->lat;
_mission_item.lon = _navigator->get_global_position()->lon;
_navigator->get_mission_result()->finished = false;
_navigator->set_mission_result_updated();