diff --git a/Doxyfile b/Doxyfile
index c7054de..23dde2a 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -68,7 +68,7 @@ PROJECT_LOGO =
# entered, it will be relative to the location where doxygen was started. If
# left blank the current directory will be used.
-OUTPUT_DIRECTORY = doxygen
+OUTPUT_DIRECTORY = docs
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096
# sub-directories (in 2 levels) under the output directory of each output format
diff --git a/Images/f710-gallery-1.png b/Images/f710-gallery-1.png
new file mode 100644
index 0000000..00fb9ae
Binary files /dev/null and b/Images/f710-gallery-1.png differ
diff --git a/Images/img-bebop2.jpg b/Images/img-bebop2.jpg
new file mode 100644
index 0000000..04e870a
Binary files /dev/null and b/Images/img-bebop2.jpg differ
diff --git a/Images/tag_36h11.png b/Images/tag_36h11.png
new file mode 100644
index 0000000..e06f712
Binary files /dev/null and b/Images/tag_36h11.png differ
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..9ea5cf4
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 RedwanNewaz
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
index 06a853f..e098031 100644
--- a/README.md
+++ b/README.md
@@ -1,24 +1,137 @@
-# Bebop2 Controller
+@mainpage Parrot Bebop2 Drone with Joystick Controller README File
+
+
+## Introduction
+
+The Parrot Bebop 2 is a small, lightweight manufactured by Parrot, a French company specializing in consumer electronics. It is compact and lightweight, making it easy to transport and use on the go which makes it a popular choice
+It's camera has a most impressive electronic image stabilization and with a top speed of 40 mph, this drone can really move. The Bebop 2 has a battery life of up to 25 minutes.
+
+This README file explains how to control the drone using a joystick and ROS drivers, add visual servoing capabilities, and scan for April Tags to find the drone's relative position.
+
+-----------------------------------------
+
+
+
+
## Quick Run
-Connect your joystick to the computer.
-Joystick buttons perform following operations:
+**Hardware Setup**:
+Connect your joystick to the computer.
+
+
+Before starting the program, the drone should be turned on and the computer connected to the drone WiFi.
+
+> **Warning**
+> It is strictly recommended to use protective equipments while testing the drone.
+If the drone needs to be shut down completely then we should flip the drone.
+
+
+*Joystick buttons perform following operations*:
+
```angular2html
- IDLE = 0, // setpoint can be freely moved with joystick. Sphere color blue
- TAKEOFF = 1, // drone will takeoff from the ground
- LAND = 2, //drone will land
- ENGAGE = 3, // set current location as a set point (for hover). Sphere color yellow
- CONTROL = 4 // start PID controller for the current (ENGAGE) setpoint. Sphere color cyan
+ IDLE = 0, // Setpoint can be freely moved with joystick. Sphere color blue
+
+ TAKEOFF = 1, // Drone will takeoff from the ground
+
+ LAND = 2, // Drone will land
+
+ ENGAGE = 3, // Set current location as a set point (for hover). Sphere color yellow
+
+ CONTROL = 4 // Start PID controller for the current (ENGAGE) setpoint. Sphere color cyan
```
Once control mode is enabled, setpoint can also be controlled using joystick axes.
-Note that, only position controller is implemented.
+Note that, only position controller is implemented from the analog sticks.
Orientation controller needs yaw angle which could be directly obtained from bebop odom.
+------------------------------------------
+
+
+## Software Setup:
+
+
+-- **Installation of bebop_autonomy** from fork manually is required to send relative move commands to the drone. Check out [install bebop_autonomy from fork and build visp](http://wiki.ros.org/visp_ros/Tutorials/How%20to%20do%20visual%20servoing%20with%20Parrot%20Bebop%202%20drone%20and%20visp_ros).
+Bebop_autonomy is a ROS driver for Parrot Bebop 2.0 drones (quadrocopters), based on Parrot’s official ARDroneSDK3. You can check out [this source code](https://github.com/AutonomyLab/bebop_autonomy) for the driver is for more understanding.
+
+---------------------------------------------
+
+
+
+
+## Operating the drone
+
+
+The Parrot Bebop 2 Drone can be controlled from a PID Joystick Controller. The drone can be manuvered with the joytsick analog sticks.
+
+The functions of the Four Action Buttons of the joystick is as follows:
+
+// To be written down.
+
+1. A ---> TAKE OFF (Green button)
+2. B ---> LAND (Red Button)
+3. X ---> IDLE (Blue Button)
+4. Y ---> ENGAGE (Yellow Button)
+5. L ---> CONTROL (Top Left Button)
+
+---------------------------------------------
+
+
+
+## April Tags
+
+
+AprilTag is a visual fiducial system, useful for a wide variety of tasks including augmented reality, robotics, and camera calibration.
+Targets can be created from an ordinary printer, and the AprilTag detection software computes the precise 3D position, orientation, and identity of the tags relative to the camera.
+
+Using the built-in camera of the Parrot Bebop 2 Drone, it scans the tag and determines its relative postion from the tag.
+
+
+An April Tag from 36h11 family that will serve as target for the visual servoing (see [this page](https://visp-doc.inria.fr/doxygen/visp-daily/tutorial-franka-pbvs.html#franka_prereq_target) to print one).
+
+
+
+---------------------------------------------
+
+## Visualisation using Graphical Interface (RVIZ)
+
+The Parrot Bebop 2 drone can be monitored and visualised using a graphical interface like rviz.
+
+**For RVIZ installtion** :-
+```
+ sudo apt-get install ros-[ros-version]-rviz
+```
+
+For example:-
+```
+ sudo apt-get install ros-noetic-rviz
+```
+
+To run rviz
+```
+rosrun rviz rviz
+
+```
+
+Check out http://wiki.ros.org/rviz/UserGuide for more information.
+
+-----------------------------------------------
+
## Parameter Tuning
Refer to ``config/param.yaml`` file to read about tuning parameters.
Apriltags are used for landmarks and then
the drone position is estimated from those landmarks.
A complementary filter is implemented to compute state by combining multiple landmarks.
+
+------------------------------------------------
+
+## Steps to use the bebop2_controller Launch Files
+
+1. **To use Dummy Filter** : ``` roslaunch bebop_controller bebop_frames_dummy.launch ```
+2. **To use Complementary Filter** : ``` roslaunch bebop_controller bebop_complementary_filter.launch ```
+3. **To run the apriltag_ros_continuous_node** : ``` roslaunch bebop2_controller apriltag.launch ```
+
+Step 1. Press the A button on the Joystick Controller to take-off.
+Step 2. Press the left-bottom (LB) button to engage Controller.
+Step 3. Use the joystick axis to control the set-point
diff --git a/airlib/control/LQR/LQR.h b/airlib/control/LQR/LQR.h
index d53070d..f6aa621 100644
--- a/airlib/control/LQR/LQR.h
+++ b/airlib/control/LQR/LQR.h
@@ -12,9 +12,16 @@
#define DEBUG(x) std::cout << x << std::endl
namespace bebop2 {
-
+ /**
+ * @brief The LQR is an optimal control regulator that better tracks a reference trajectory.
+ *
+ * It predicts future states of the drone at every time step in order to minimize a global criterion/cost function. By estimating future states
+ * based on past outputs, we are able to better regulate offset in tracking.
+ * The LQR algorithm is essentially an automated way of finding an appropriate state-feedback controller.
+ */
class LQR {
public:
+ /// @brief A default constructor for LQR.
LQR();
private:
diff --git a/doxygen/html/functions_eval.html b/docs/html/ApriltagLandmarks_8cpp.html
similarity index 71%
rename from doxygen/html/functions_eval.html
rename to docs/html/ApriltagLandmarks_8cpp.html
index 1eed078..bca7908 100644
--- a/doxygen/html/functions_eval.html
+++ b/docs/html/ApriltagLandmarks_8cpp.html
@@ -3,9 +3,9 @@
#include "airlib/localization/Sensors/ApriltagLandmarks.h"