# Python + Drones

You might have flown a Drone or a toy helicopter, it's super easy, isn't it? Use a controller, move joysticks and done. But as a coder, do you want to integrate this with your python code? Imagine you are making autonomous drones, How exciting, isn't it?
Let's learn how can you integrate python and drones.<br><br>
**Pre-requisites**

1. DJI Tello (A mini pocket-friendly drone perfect for beginners)  
%[https://www.amazon.in/Renewed-DJI-Camera-Quadcopter-Professional/dp/B08VJ9PLFP/]
2. Prior Experience with Python programming (Basic)
3. Basics of motion (Newton's laws of motion & Momentum)

You can browse online for these pre-reqs if you want.
So let's get started...

Firstly you need to install a library `djitellopy` and `opencv-python` that has the support for this type of drones. Use the following syntax
> pip install djitellotpy<br>
> pip install opencv

NOTE: Every drone has its own library, but coding is more or less the same for every drone.

Let's start by importing the library
```
from djitellopy import tello
import cv2
import time
```

Create object of tello and make connection connect
```
me = tello.Tello()
me.connect()
print(me.get_battery())
```
The above code will print the battery % of the drone. `me` is the object of drone

Put stream on using the following code
```
me.streamon()
```

Controlling the movement of drone.
Function : `send_rc_control(left_right_velocity: int, forward_backward_velocity: int, up_down_velocity: int,
                        yaw_velocity: int)`

Code Snippet for controlling motion of drone
```
speed = 30 # this is in cm/s
me.takeoff() #Take off
me.send_rc_control(0,0,0,speed,0) #move 30cm up
me.send_rc_control(0,0,0,-speed,0) #move 30cm down
me.send_rc_control(0,speed,0,0) #move 30cm forward
me.send_rc_control(0,-speed,0,0) #move 30cm backward
me.send_rc_control(speed,0,0,0,0) #move 30cm left
me.send_rc_control(-speed,0,0,0,0) #move 30cm right
me.send_rc_control(0,0,0,0,speed) #rotate 30cm right
me.send_rc_control(0,0,0,0,-speed) #rotate 30cm left
me.land() #land the drone
```

Visualise the drone camera stream in your PC
```
while True:
        img = me.get_frame_read().frame #Capture each frame
        img = cv2.resize(img, (360, 240)) #Optional but recommended
        cv2.imshow("Image", img) #Display video
        cv2.waitKey(1)
```

That's super duper easy, try it out and let me know in the comments...

Any queries, feel free to type in comments or connect me through [mail](mailto:contact@lakshaykumar.tech)

