Note: This tutorial assumes that you have completed the previous tutorials: creating a ROS package.
(!) Please ask about problems and questions regarding this tutorial on Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.

Landing an autonomous UAV on a moving platform using only a front facing camera

Description: This tutorial walks you through a series of packages that can help you land a Parrot Bebop UAV on a moving platform using only its front facing camera.

Keywords: UAV, Parrot Bebop, landing, moving platform

Tutorial Level: BEGINNER


All the following have been tested on ROS Kinetic.

The packages needed for this tutorial are the following:

  1. bebop_gazebo: The simulation package of the Parrot Bebop.

  2. ar_helipad: The package responsible for detecting the moving platform. It is based on the ar_track_alvar package.

  3. tf_velocity_estimator: The package that estimates the velocity of the tf of interest.

  4. aerial_local_planner: The local planning package.

  5. aerial_global_planner: The global planning package.

Before moving on how to use the packages, we should state that the planning packages assume that there are no obstacles between the robot and the moving platform's trajectory.

For the lazy

If installing the above packages seems like too much work for you and you just need to see the system work, please see these two videos: video1, video2.

How to use the packages

You need to run one executable for each of the packages mentioned above. The order of execution is the following: (Note: each command should be executed in a separate terminal)

roslaunch bebop_gazebo bebop_moving_helipad.launch
roslaunch ar_helipad bebop_helipad_individual.launch
rosrun tf_velocity_estimator
rosrun aerial_local_planner
rosrun aerial_global_planner

WARNING! The first command runs the Gazebo simulation for the Parrot Bebop. Gazebo often fails to start the controllers successfully. If you get the Failed to start controllers: controller/position, controller/velocity, controller/attitude message, please kill the process and try again, before running the rest of the commands.

When you successfully run all of the commands, you will see a Parrot Bebop trying to land on a moving platform that is moving towards it. If this is not enough for you and you want to experiment with the packages, please continue reading.

Experimenting with the parameters

In the bebop_moving_helipad.launch file in the bebop_gazebo package, you can set a series of parameters to experiment with different setups. These parameters are:

  1. Helipad starting position on the X axis.
  2. Helipad starting position on the Y axis.
  3. Helipad position on the Z axis.
  4. Helipad Vx (velocity on the X axis).
  5. Helipad Vy (velocity on the Y axis).
  6. Seconds before the helipad starts moving (increase this if you don't have the time to run all the necessary commands before the helipad starts moving).

As a reference, the parameters used for video1 in the 'For the lazy' section are:

  • x = 8.0
  • y = 0.0
  • z = 0.3
  • vx = -1.0
  • vy = 0.0
  • t = 10

and for video2 are:

  • x = -4.0
  • y = -5.0
  • z = 0.3
  • vx = 1.5
  • vy = 1.0
  • t = 10

Extra Info

For a detailed report on the packages, you can read my MSc Dissertation here.


If you find any problems with this tutorial page, please open an issue here.

If you find any bugs or have any problems with the packages mentioned in this tutorial, please open an issue on the corresponding package's github repository.

Have fun!

Wiki: Tutorials/Landing an autonomous UAV on a moving platform using only a front facing camera (last edited 2018-02-06 17:18:34 by GeorgeStavrinos)