Skip to content

Takeoff Landing Planner

Overview

The TakeoffLandingPlanner provides ROS 2 action servers for takeoff and landing maneuvers. It monitors the robot's state, generates trajectory overrides to reach the target altitude (takeoff) or ground (landing), and tracks completion via position and time thresholds.

Features

  • Trajectory-based takeoff to a configurable target altitude and velocity
  • Trajectory-based landing with on-ground detection, followed by automatic disarm
  • Configurable takeoff trajectory direction (roll/pitch, absolute or body-relative)
  • Precondition checking: rejects goals when state estimate is timed out or a task is already running
  • Publishes is_airborne for downstream consumers (e.g. the RViz Tasks Panel)

Topics

Subscriptions

Topic Type Description
odometry nav_msgs/Odometry Robot pose and velocity
tracking_point airstack_msgs/Odometry Current trajectory tracking point
trajectory_completion_percentage std_msgs/Float32 Trajectory completion (0–100) from trajectory_controller
is_armed std_msgs/Bool Vehicle arm status
has_control std_msgs/Bool Offboard control acquired
state_estimate_timed_out std_msgs/Bool Whether the state estimate has timed out
extended_state mavros_msgs/ExtendedState MAVROS landed state (used to publish is_airborne)

Publications

Topic Type Description
trajectory_override airstack_msgs/TrajectoryXYZVYaw Takeoff/landing trajectory sent to trajectory_controller
is_airborne std_msgs/Bool True when landed_state == LANDED_STATE_IN_AIR

Service Clients

Service Type Description
set_trajectory_mode airstack_msgs/TrajectoryMode Switch trajectory controller mode
robot_command airstack_msgs/RobotCommand Arm, request offboard control, disarm

Action Servers

Action Type Description
~/takeoff_task task_msgs/TakeoffTask Execute a takeoff maneuver
~/land_task task_msgs/LandTask Execute a landing maneuver

TakeoffTask

Goal

Field Type Description
target_altitude_m float32 Target altitude in meters
velocity_m_s float32 Ascent velocity in m/s

Feedback

Field Type Description
status string Human-readable status message
current_altitude_m float32 Current altitude in meters
target_altitude_m float32 Target altitude in meters

Result

Field Type Description
success bool Whether takeoff succeeded
message string Outcome description

LandTask

Goal

Field Type Description
velocity_m_s float32 Descent velocity in m/s

Feedback

Field Type Description
status string Human-readable status message
current_altitude_m float32 Current altitude in meters

Result

Field Type Description
success bool Whether landing succeeded
message string Outcome description

Parameters

Parameter Type Default Description
takeoff_velocity float 1.0 Default ascent velocity in m/s
landing_velocity float 0.3 Default descent velocity in m/s
takeoff_acceptance_distance float 0.3 Distance threshold to consider target altitude reached (m)
takeoff_acceptance_time float 1.0 Time that must be spent within acceptance distance (s)
landing_stationary_distance float 0.02 Max movement to consider the drone stationary on landing (m)
landing_acceptance_time float 5.0 Time the drone must remain stationary to confirm landing (s)
landing_tracking_point_ahead_time float 5.0 Lookahead time for the landing tracking point
takeoff_path_roll float 0.0 Roll offset for the takeoff trajectory (degrees)
takeoff_path_pitch float 0.0 Pitch offset for the takeoff trajectory (degrees)
takeoff_path_relative_to_orientation bool false Apply roll/pitch relative to the robot's current orientation

Dependencies

  • rclcpp / rclcpp_action
  • airstack_msgs
  • airstack_common
  • nav_msgs
  • mavros_msgs
  • std_msgs
  • task_msgs
  • trajectory_library