The drone parachute

Let's talk about parachutes.

Multicopters can become deadly weapons if the motors stop spinning as they should. There are so many reasons for a failure to happen (bad motors, bad battery, radio problems,etc...)  that it is absolutely necessary for the pilot to anticipate it, especially if you intend to flight over people's head!  We made the choice to never fly directly above people, but if you're willing take that risk,  you might be interested into getting a parachute on your drone . That's why we designed last year a DIY parachute for our quadcopter  🙂

The principle is very simple : the parachute is carefully folded  in a tube on top of which lies a lid that a servomotor keeps closed. At the bottom of the tube, a big spring pushes strongly the parachute towards its top end. So if the servo lets the lid go, the spring will push the parachute in the air.

It may be hard to believe, but the parachute will fit in the tube !
It may be hard to believe, but the parachute will fit in the tube !
The spring is separated from the parachute by a CNC milled ring.
The spring is separated from the parachute by a CNC milled ring.

I recommend you use a strong spring, so the parachute is entirely pushed out when the servo releases the lid. The spring we used is 10cm long, has 8 turns and is 3.5cm wide. It can be fully compressed under pressure, which is what we wanted here, in order to get the smaller parachute we could.

A hook holds the string to the bottom plate
A hook holds the string to the bottom plate

One of the major problems with parachutes is that the air needs to get "under" the parachute envelope in order to make it act as it should. If it doesn't , the parachute will become useless. We followed the method described in the following video :

 

This is how the parachute looks before we insert the actual parachute. The spring will eventually be pressured until its minimum lenth
This is how the parachute looks before we insert the actual parachute. The spring will eventually be pressured until its minimum lenth
We used a glass fiber bottom plate as it needs to resist to a lot of pressure
We used a glass fiber bottom plate as it needs to resist to a lot of pressure
Bottom plate. It can attached to your frame by screws or zip-ties (we love them :) )
Bottom plate. It can attached to your frame by screws or zip-ties (we love them 🙂 )

Parachute surface calculation

 

Obviously, your parachute's surface needs to match the weight of your copter, and the desired landing speed you would like to reach. I think a commonly accepted falling speeds sits around 5m/s (18km/h).

We found in the past a pretty useful formula that gives the diameter of tissue to use depending on the weight you want to slow down and its expected falling speed:

 Diameter = \frac{70*\sqrt{m}}{V}

, with m in grams and V in km/h.

 

For our 1kg drone, it gives us a diameter of 122cm. As you can see, the parachute can quickly become huge compared to the size of your multicopter, and you should maybe start thinking about where to place it on your drone from the very beginning of its conception.

For our quadcopter, we used a slightly smaller parachute (taken from a distress rocket) than the 120cm recommended size given by the formula, which led to higher falling speeds than the expected 5m/s, but it stayed slow enough to keep the drone intact after many, many test flights ! 🙂

Parachute ready for insertion
Parachute ready for insertion
See, it fits ! :)
See, it fits ! 🙂
Ready to go!
Ready to go!
The servo arm is under a lot of pressure here.
The servo arm is under a lot of pressure here. We used the TGY-53317M servo for this parachute.

 

Here's the final video 🙂


Comment if you have any question ! 🙂

The tricopter

The tricopter
The tricopter

Hi everyone!

We have been pretty busy since we got our Ardupilot and setting it up was so easy and fun that we decided that it could be fun to get another multicopter with a  "ready to fly" flight controller, so we would just have to take care of building the frame ! We decided to build a multicopter and use it with a cheap multiwii board from hobbyking 🙂

As great as the Ardupilot is, we didn't want to pay 180$ again for a flight controller, and we thought that this time we didn't need a full fledge controller, with GPS and telemetry; just something to have fun with. So we started to look for a cheap multiwii board, and we found "the one" on hobbyking: the Multiwii 328P flight controller.

Our Multiwii flight controller

The price of this thing (28$...) is actually pretty insane, and I would recommend this board to anyone who would like to work with IMUs, to track motion and position, not just to power a multicopter! Just plug it into your computer, launch the Arduino IDE, select Arduino Duelmilanove 328 in the board list and you're ready to go! We definitely should have bought something like this when we started to work on our quadcopter, it woud have been so much cheaper than buying the sensors separately and would have avoided so much troubles with soldering/ fitting everyhting on a tiny PCB !

We decided to build a tricopter because we always thought that their flight behavior seemed really nice and we wanted something a bit smaller and a bit more nervous than our quadcopter. Our quadcopter was a pretty standard one, with arms 25 centimers wide, a good size to get stability and space to carry a GoPro and a FPV setup. We decided to make the tricopter is a bit smaller, with motors 20 centimeters away from the center of the tricopter triangle and to use the same Turnigy SK3 1130kv motors as on our quad. They work great and we had 3 motors left, so no need to buy new ones ! And with these motors, the tricopter would have enough power to carry a GoPro 🙂

While we took the "hardcore" approach with our full carbon quadcopter, designing it with CATIA, cutting it with a CNC mill, the tricopter construction was quite the opposite. It took us just a couple of hours to build it from scratch with no real plans. The hardest part was the rear servo mecanism, as it always is with tricopters.

Tricopter
The rear motor of the tricopter
Tricopter
The rear part is made of an aluminum part and a Meccano part screwed together and attached to the servo on one side, and to bearings on the other side.
Tricopter
The rear digital servo is a Turnigy TGY-2216MG.

Everything is made of carbon fiber, so it's pretty lightweight and power efficient. We get more than 11 minutes of flight with a 2200 mAh 3S LiPo battery.And it flies very, very well. Tricopters are very fun to pilot, there behavior is really close to an Heli behavior, it kinds of floats in the air and vertical descents can be very fast and stable. The yaw control is obviously much stronger than on a quadcopter so it can be maneuvered easily in very small areas. It carries a GoPro and its case without any problems, so we think it's the perfect toy to play with if you want to film withou stabilization nor FPV!

Tricopter
The zip-tied multiwii, a receiver, a 3S battery, and you're good to go 🙂
Tricopter
The bottom part fo the tricopter, with space for FPV equipment.

If you are considering building a drone, you should really consider building a tricopter. It may be harder to figure out how to handle the yaw servo, but it's so fun to play with! Go for it 🙂

A little video where we used the tricopter (80% of the footage)

Stay tuned for more fun with drones and other things 🙂

The quadcopter : the flight controller shield

For our new quadcopter frame(article coming soon 😉 ), we decided to create a completely new Arduino shield, using new sensors and trying to avoid having lots of wires floating around.

We bought the 9 DOF stick sensor from sparkfun and the BMP085 barometer (used for altitude hold). When on the  old shield we had the 3 sensors (ADXL345, L3G4200D, HMC588L) on different boards and linked to the shield by  wires, we now have a single breakout board, directly soldered on the shield, which is a much better looking solution. It also avoids long steps of soldering, plugging mistakes etc... The EM406 breakout board is also directly soldered on the shield. We added two 7x2 connectors, in order to plug the RC receiver, SRF02 sonar sensor and possibly 2 servos in order to control a 2 axis gimball 🙂 The schematic looks like this:

The shield schematic

Another novelty of this shield is the connections with LEDs flexible strip. In addition to the aesthetic side, it will also be useful to distinguish the front from the back of the quadcopter, signal the end of calibration, blink during altitude hold mode etc.. These LEDs strip are not directly plugged to the Arduino, since they require 12V input and could be a bit too much power consuming to be fed from the Arduino. So they are controlled by a NPN BC517 transistor of which the base is connected to a digital output  like so:

How to control the LED strip with the Arduino

The last difference with our previous quadcopter is the change from a L3G4200D gyro in SPI mode to a ITG3200 in I²C mode. We did this partly to free all the SPI connections of the Arduino (10-13) because we needed available ports for the LEDs and for the future gimball, and because our L3G4200D was  pretty often giving completely false readings without any reason. We couldn't find the cause of this problem but we found a few people having the same problem  when we googled it... That pushed us to buy this stick sensor.

The final PCB looks like this:

The shield PCB

The holes and the contour were drilled with Benoit's CNC router and after soldering all the parts, the final results looks like this:

The Arduino shield with theEM406 breakout board, the 9 DOF stick IMU, and the BMP085 barometer

We have tried this shield with our old prototype frame and everything works fine, the flight is really stable.We use the LEDs to show the end of calibration and of course to show the front of the aircraft which is a big help when flying.

So as I said in the beginning of this article we are currently building a brand new frame entirely made of carbon fiber, with new motors, new ESCs and new propellers. We hope that we can finish the construction within the month to come (if we receive our order made at Hobbyking 2 weeks ago 🙂 ) and we will of course post pictures on the website! Stay tuned 😉

The quadcopter : control the orientation

We will use use these axes as reference

Quadcopter principle

The quadcopter orientation can be defined by three angles : Pitch, Roll, and Yaw. These angles determine orientation and therefore the direction the quadcopter will take. Basically, changing the pitch will make the quadcopter go forward/backward, the roll  bend to the left/right, and finally the yaw will make it rotate around its vertical axis.

So, to fully control a quadcopter- i.e make it go where you want over your neighbors' garden to spy on them- you just need to control these 3 angles. Do you? Almost ;). You need a 4th parameter, the throttle of the rotors. Obviously, if the propellers are not spinning, it would be hard to take off, wouldn't it? 😉 But let's forget about that and assume that the throttle is sufficient enough so the drone takes off.

Control individually pitch, roll and yaw angles

In order to change the pitch and roll angles , the main idea is to change each motors speed so the quadcopter starts bending in the desired direction. Let's formalize things a bit and define the motors "power"  in  C++ language style :

int motor1Power, motor3Power; // Motors on the X axis

//=>; changing their speeds will affect the pitch

int motor2Power, motor4Power; // Motors on the Y axis

//=>; changing their speeds will affect the roll

As I said in the previous paragraph, the motors power depends on the throttle you can give them with a remote control for example. A simple implementation of this in an Arduino-like sketch would look like this


void loop(){

motor1Power = throttle;

motor2Power = throttle;

motor3Power = throttle;

motor4Power = throttle;

}

What is done here is just simply redirecting the throttle input (coming from a remote control for example) to the motors, which will just concretely change the altitude/ vertical speed of the drone.

Now, let's think a bit about how to make the quadcopter move forward/ backward . This motion corresponds to the pitch angle. In order to change the pitch, we only need to change the speed of the two motors on the X axis. Indeed, affecting the speed of the motors 2 and 4 (on the Y axis) would just start a rotation around the X axis (therefore changing the roll angle).

But how to change the first and third motors speeds?

If you try adding the same value offset to the motors speed, it won't change anything because what you need in order to incline the aircraft is a difference in the motors speed. Imagine you attach two weights of one kg to the two opposite motors, what happens to the pitch? Nothing, you would need to attach different weights to incline the quadcopter. It's very intuitive and works exactly the same with the motors speed!

The best way to get different motors speed is to add the offset value one one motor output, and to subtract it on the other, so the "overall throttle " of the axis remains constant and therefore changing the pitch won't affect the quadcopter's "vertical speed"

 Throttle_{13} = \frac {(throttle + offset)+(throttle-offset)} 2 =throttle

By the same method, you can change the roll angle by changing motors speeds on the Y axis (in our example motors 2 and 4) and therefore control separately pitch and roll! Let's look at the updated pseudo-code introducing two new inputs pitchOffset and rollOffset

void loop(){

motor1Power = throttle + pitchOffset;

motor2Power = throttle + rollOffset;

motor3Power = throttle - pitchOffset;

motor4Power = throttle - rollOffset;

}

And that's it! This is how the pitch and roll are controlled.

 The yaw..

Why is the yaw different? Because it's not a matter of inclination here, so changing two motors speed won't make it. But i forgot  to tell you a little detail about quadcopters 😉 Two propellers turn clockwise, the two others turn counterclockwise. And how does it help you? The answer is the torque . When an object rotates around an axis, it creates a torque, creating a rotation movement of the body holding the propeller, and that's why traditional helicopters have an anti torque rotor on their tail, keeping the rotorcraft from spinning until the pilot pukes (it is more likely he dies in an awful crash). With opposite rotations, the quadcopter doesn't need and anti-torque tail, one axis compensating the torque of the other.

Changing the torque and therefore the yaw seems now really simple,doesn't it? Just add a yawOffset to the speed of two motors on the same axis, while you subtract it from the speeds on the other axis (so the overall throttle doesn't change). The final code looks like this:

void loop(){

motor1Power = throttle + pitchOffset + yawOffset;

motor2Power = throttle + rollOffset  - yawOffsett;

motor3Power = throttle - pitchOffset + yawOffsett;

motor4Power = throttle - rollOffset  - yawOffsett;

}

(Y)awesome.

And that's it for the basics of how to control a quadcopter, hope it was clear and detailed enough. If you want to take it to the next level and auto stabilize your quadcopter, it's right here 😉

The quadcopter part 2 : specifications and first manufacturing

So, as you can see there, we had a beginning of stabilization at the end for our first prototype. Still, we were not able to correct the yaw axis, making the drone really hard if not impossible to control. We decided last weekend to build from scratch a new version of the drone. We established the following requierements for this V2 :

- The drone must be built from carbon tubes and balsa wood (that solution seems to be the easiest way to have something very light and robust). To ensure a perfect aligment of the 4 motor axes, we'll double the carbon tubes  for each arm.

- We'll use the following sensors :

  • A gyroscope L3G4200D and an accelerometer ADXL345 to capture the rotation angles of the drone
  • A magnetometer to capture the absolute rotation around the yaw axis (actually, we found a thesis paper showing how a magnetometer, a gyroscope and an accelerometer can work together to give a very precise angle for each axis, so it will do more than only give us the cap)
  • A GPS to capture the absolute position in the 3D space
  • A telemeter (basically a sonar) to capture preciselly the altitude of the drone between 0m and 5m.

Here is a little description of the elements we ordered (unfortunately, we didn't receive the shipment this weekend)

 

3 axis magnetometer "HMC5843"
SiRF StarIII™ based GPS module
SRF02 telemeter

 

 

 

 

 

 

 

 

You can find pictures of the accelerometer and the gyroscope in the previous article. if you want to know more, here are the links to the datasheets

As you can see, all the devices are controlled by numerical interfaces : I²C , SPI or serial bus. This is very convenient to use thanks to the existing Arduino's libraries.

We tried after this to build a 3d model of what the drone will look like

 

Very basic modelisation, but still usefull to check if everything's OK.

Actually, this modelisation will be also used to machine the different parts. Indeed, we made a CNC a few years ago (may be will come an other series of articles to describe this awesome project). To generate the toolpaths, I use Mastercam , and the software used to control the mill machine itself is Mach3.

The toolpath used for machining 4 motor mounts

For now, I made a little video of the machining of a motor mount.

 

[youtube]http://www.youtube.com/watch?v=L6pmeJbbn9Q[/youtube]

 

Gluing the landing gear.

 

 

 

To assemble the parts, we massively use epoxy glue (made of 2 components : a resin and a hardener) so there is no possibility for the vibrations to disassemble it.

 

 

 

 

Here is the result. So far, so good : the 4 motors are perfectly aligned, and we should avoid any excessive yaw-drift problems.

The quadcopter part 1 : genesis of the project

When I was a student in my engineering school, we decided to build a drone. The project was abandonned after about one year, more or less because members of the robotic team didn't succeed to stabilize the drone. So with my bored engineer friend , we decided to give a second chance to this project. We took what the students made, which basically looks like this:

The very first version of the quadrotor.

After a few tries, it turned out that the power of the 4 motors wasn't enough for the drone to fly. So, we decided to make another frame, using light materials: carbon tubes and balsa (it's a very light wood used by modelists for their aircrafts). The verdict was straightforward : old frame's weight : 350g, new one : 70g. Only half of the power was enough to make it fly.

The quadcopter V1, and its effective and beautifull landing site

We had here a nice frame to start our experiments. The first version came with an accelerometer and a gyroscope that we decided to keep. We also decided to use an Arduino because it's really easy to use, and there is out there a massive list of existing libraries. Implementing a PID controller, and gathering the commands of a 4 channels radio-emmiter, we were able to make it slighly steady. So this is how it worked. The 2 sensors (accel and gyro) are constantly read by the Arduino, which compute the angle of the 3 orientations of the drone. Why using a combination of a accelerometer and a gyroscope ? Because the accelerometer is nice for a static use of the drone (i.e. it flies at a constant speed), but as soon as it start to move, the accelerometer can't be used. The gyroscope gives us an angular velocity, which means that we have to integrate the value to retrieve the angle. The wrong part is that, due to the integration, the obtained angle will slowly drift. We compensate with a negative term in our equations, which is found experimentaly.

 

Basically :

angle = k*angle_{accelero} + (k-1)*angle_{gyro}

Where, if the ADXL gives us a value between 0 and 1g:

 angle_{accelero}(deg) = \frac{180}{\pi}*\arcsin{ADXL_{value}}

And if the gyroscope gives us a value in ° per second, and d the drift value.

 angle_{gyro} (deg) = \int_{0}^{s} L3G4200D_{value}\, \mathrm dt-d

Then, we use a PID to control each of the drone axis :

 order=k_p*angle+k_i* \int_{0}^{s} {angle}\, \mathrm dt +k_d*\frac{\mathrm{angle}}{\mathrm t}

Now come the hardest part of that chemistry : find out k_p,k_i and k_d; which can bring the drone to destruction (actually, it did).

The tiny ADXL345 accelerometer and the L3G4200D gyroscope

But still, there is a lot of work there before this drone can fly on its own. We are currently working on a frame v2, which will be the object of a soon-coming article.