GPS Support

Warning

This is an extremely experimental feature of the driver that requires a Parrot flight recorder peripheral. This feature is only available if you compile the gps-waypoint branch of the driver from source. Use at your own risk.

Note

The gps-waypoint branch tracks the latest development branch of the driver (currently indigo-devel).

Compiling gps-waypoint branch from source

$ cd ~/catkin_ws/src
$ git clone https://github.com/AutonomyLab/ardrone_autonomy.git -b gps-waypoint
$ cd ~/catkin_ws
$ rosdep install --from-paths src -i
$ catkin_make

Reading GPS Data

First run the driver with GPS support by using Selective Navdata (advanced) :

$ rosrun ardrone_autonomy ardrone_driver _enable_navdata_gps:=True

GPS information is published to ardrone/navdata_gps. The message is of custom type ardrone_autonomy/navdata_gps:

Header  header
uint16 tag
uint16 size
float64 latitude
float64 longitude
float64 elevation
float64 hdop
uint32   data_available
bool zero_validated
bool wpt_validated
float64 lat0
float64 long0
float64 lat_fused
float64 long_fused
uint32 gps_state
float32 X_traj
float32 X_ref
float32 Y_traj
float32 Y_ref
float32 theta_p
float32 phi_p
float32 theta_i
float32 phi_i
float32 theta_d
float32 phi_d
float64 vdop
float64 pdop
float32 speed
uint32  lastFrameTimestamp
float32 degree
float32 degree_magnetic
float32 ehpe
float32 ehve
float32 c_n0  # Signal to noise ratio (average of the four best satellites)
uint32  nbsat # Number of acquired satellites
navdata_gps_channel[12] channels
bool is_gps_plugged
uint32 ephemerisStatus
float32 vx_traj
float32 vy_traj
uint32 firmwareStatus

GPS waypoint navigation

Note

Parrot’s official SDK does not expose this functionality. This feature was added to the driver by reverse engineering the protocol used by FreeFlight App. All GPS related patches to the SDK are available here.

AR-Drone 2.0 with Flight Recorder can perform on-board GPS waypoint navigation. Currently, the driver supports sending one target waypoint to the drone through ardrone/setgpstarget service. To set/overwrite the target, call this service with a request of type geographic_msgs/WayPoint. position field determines latitude, longitude and altitude of the the target (more info). props field should include a vector of ROS key-value pairs. Supported keys are:

  • velocity: value sets the desired linear velocity in m/s
  • orientation: value sets the desired orientation at target in radians

After setting the target position, you need to enable autonomous flight mode by calling ardrone/setautoflight with enable = True (autonomous flight mode is turned off by default). The service is of type ardrone_autonomy/RecordEnable. Similary you can disable the autonomous flight mode by calling this service with enable = False.

Note

TODO: Add examples (e.g. CLI or code samples)

Contributors to GPS patches