Drone Motion Primitive Dataset

Citation Author(s):
American University of Beirut
Al Aawar
American University of Beirut
Mohammad Kassem
American University of Beirut
Imad H.
American University of Beirut
American University of Beirut
Submitted by:
Justin Elhalabi
Last updated:
Wed, 09/16/2020 - 10:04
Data Format:
0 ratings - Please login to submit your rating.


Drone technology is one of the largest tackled fields in today’s world, as it can range from pure enjoyment of drone racing to medical use and fighting crime. Several teams are interested in developing improved human machine interfaces for operating drones. This dataset is a collection of different motion primitives commanded using a PS3 joystick to control an Ardrone on Gazebo. This has been conducted using ROS Melodic on Ubuntu 18.04. The PS3 six-axis joystick was used to collect this data, and it was connected to the Gazebo drone by using the ArDrone Helpers libraries.

This dataset contains 4 different motion primitives which are: Line, Helix, Sine, and Arc. The testing was conducted on each primitive alone and using a stop indicator, which is specified for each primitive, at the end of each primitive. The stop indicators are as follows:

·     X for Sine

·     Circle for Helix

·     Square for Line

·     Triangle for Arc

Then a collection of every two primitives consecutively was also conducted (i.e. line to helix, arc to line, helix to sine …) using the same stop indictors at the end of every corresponding primitive. Each test has around 300 to 500 samples. It is also important to note that our data is sample and hold, meaning that if the joystick’s analog stick is in a certain position for a few seconds, then it will not send any new samples for the velocities.

The data was extracted into a .YAML file, as continuous commands from the joystick which were used to move the drone in Gazebo. They are then parsed (using python 2.7) to extract the velocities of the drone along the x y z axes as well as the pressed buttons (x or circle or square or triangle) into a .CSV file.

This parsed data is further processed (using python3) into another .CSV file containing all the velocities as arrays, a histogram to get the average number of samples for every sequence, and a .RTF file which contains some analysis for each primitive or collection of primitives (number of samples taken, min and max sequence size, mean, median, and deviation).

N.B: for the sine primitive, the data has been extracted into two categories: one where the sine was along the x-y axes and another where it was along the x-z or y-z axes.


The github link for the two codes used is: https://github.com/justinelhalabi/PS3-Joystick-Command-Parsing-into-CSV 


To access the non-parsed dataset, which is a .YAML file, you can use any text editor program (i.e. Notepad, TextEdit…). In each of those files, you can see the sequence of inputs by the joystick which is updating every few milliseconds.


To access the parsed dataset, which is a .CSV file, you can use any spreadsheet program (i.e. Microsoft Excel, Google docs, Numbers…). In each of those files, there are 8 columns. First 3 columns are for x-y-z velocities, respectively. The 4th column represents the time (in seconds). The 5th, 6th, 7th, and 8th columns are for whether the button is pressed or not (1 for pressed, 0 for not pressed), and they are X, circle, square, and triangle respectively.