This is a repository of a ROS package that controls the parrot AR.DRONE. - The ardrone_control package is a metapackage that holds different modules for controlling and simulating the Ar.Drone. - The ardrone_controller is a closed loop position feedback controller node. - The ardrone_sensor_fusion implements a sensor_fusion_algorithm. - The ardrone_trajectory_generator commands the desired position of the drone. - The ardrone_simulator is a bare-bones simulator that simulates the identified Ar.Drone system without any GUI. - The ardrone_lib is a package that has parameters and common modules used by other packages. - The ardrone_msgs defines the messages used in this metapackage.
This package depends on:
- ROS Indigo Distribution (It should work with Hydro too, Catkin required)
- Ardrone Autonomy Package
- Joy Package
- Numpy, Scipy
- UTM Converter
- GeoMag Module
The ardrone_control package implements a position feedback control for the Ar.Drone.
Either PID, Trajectory_PID or Linear Controllers are Implemented.
The ardrone_sensor_fusion package implements sensor fusion algorithm to
estimate optimally the Ar.Drone state.
An Extended Kalman filter is implemented for position estimation:
- Odometry is used to estimate the position
- GPS measurements are used to correct such estimations
A Complementary filter is used to estimate orientation:
- Gyroscope measurements are used to estimate orientation
- Accelerometer and Magnetometer measurements are used to correct it.
The ardrone_trajectory_generator package commands the reference set point of the ar drone.
It allows the system to work in open loop (commanding velocity) or closed loop (commanding position).
Way Points or a Trajectory function can be used to command the drone.
The ardrone_simulator package simulates a Parrot Ar.Drone.
It implements the identified transfer functions of the system,
including an uncertainty model.
The sensors are simulated considering bias drift, noise (Gaussian) and axis cross-coupling.
The implemented sensors are:
- Altimeter
- Gyroscope
- Magnetometer
- Accelerometer
- GPS
- Velocity Estimation (From Ar.Drone on-board)
- Orientation Estimation (From Ar.Drone on-board)
The ardrone_lib package contains common python modules used accross different packages.
It also contains parameters used in different packages.
##Reading from Package
- The sensor_fusion node publishes its output in the topic /ardrone/estimation using a QuadrotorState msg defined in the ardrone_msgs package.
- The controller node publishes its output in the topic /cmd_vel using a Twist msg.
- The trajectory_generator publishes the reference in the topic /ardrone/reference using the same QuadrotorState msg.
- The simulator uses the same API as the ardrone_autonomy package for seamless integration. The simulated quadrotor publishes in the /ardrone/navdata, /ardrone/mag, /ardrone/fix, /ardrone/imu and /sonar_height topics. It also publishes the simulated truth in the /ardrone/ground_truth topic.
When executed this module the joy_node will be running:
- Press 'X' for Drone to take-off
- Press 'Triangle' for Drone to land
- Move Right Analog towards Left (Right) to increase (decrease) Y-coordinate
- Move Right Analog towards Up (Down) to increase (decrease) X-coordinate
- Move Left Analog towards Right (Left) to yaw clockwise (anti-clockwise)
- Move Left Analog towards Up (Down) to increase (decrease) Z-coordinate goal
- Press start (select) arrow to turn controller on (off)
- Press L1 (L2) to turn to hover (flying) mode
To add your own module any module of the *.launch file can be commented
- Implement SO3 complementary (Magdwick, Mahoney) filters
- Implement Extended Kalman filter
- Add perturbations to the simulator
- Add uncertainty to the simulator
- Add a Chirp Service for Identification
- Modularize Sensor Fusion Node
- Modularize Trajectory Generator Node
- Modularize Controller Node