Category: Video

For the last couple of years (!) we have been discussing on and off about automatically flying the Crazyflie from a PC using OpenCV and a camera. We did a try a while ago using a PS3 Eye camera that wasn’t very successful. One of the issues we were having was detecting the distance from the Crazyflie to the camera. Another issue was a lag of about 1 second which made it impossible to control the Crazyflie using the video as input. So last week this discussion came up again and we finally decided to buy a Xbox360 Kinect. The image resolution is higher than the PS3 Eye and of course it has the ability to detect the distance from the camera to the objects it’s seeing.

Crazyflie and Kinect

The goal was to create a proof-of-concept application that shows that it’s possible as well as providing a stub for anyone that’s interested in doing more development. The application uses the normal image as well as the depth image from the Kinect to estimate where the Crazyflie is. This can easily be done by attaching a small colored ball to the Crazyflie and using a white background for flying. The images are processed and the current X/Y/Z co-ordinates given to a control loop. The control loop consists of thee PID regulators that will correct the roll/pitch/thrust that is sent to the Crazyflie to reach a X/Y/Z set-point in the image. The X/Y set-point can be selected by clicking the image or you can hold down the mouse button and drag it around. A cool feature that we would like in the future is to draw a geometric shape that the Crazyflie could follow. But there’s still a lot of work to be done with the control loop before we can achieve that.

After seeing the video you might be asking yourself where the James Bond theme music or the inverted pendulum is. Well, we are’t quite there yet and we will probably not even get near it. But still, this shows that the concept works. And for anyone that’s interested, it’s possible to do some basic trajectory planning algorithms at home with a Crazyflie and a Kinect.

For a more technical details have a look at the Kinect page in the hacks section of the wiki.

The first time we saw the video for the Leap Motion we instantly thought “Wow, we have to fly the Crazyflie with this!”. So finally last week a fresh Leap Motion landed on our desk and we went to work. We were really happy to see that there was an SDK for Linux. Leap Motion listened to the community that thought that an early release of the code was better than nothing at all. The API is very nice to work with and you can easily get metrics for you hand (like elevation and roll/pitch). So we created a Leap Motion driver in the joystick layer that replaces the normal input device, and it’s flying! We are going to be honest, at first it wasn’t that fun. It was more the concept that was very exciting. But as we flew more and more it started getting really great! There’s just something magical about it :-)

You fly the Crazyflie using a single hand. Thrust is calculated using the elevation of you hand from the sensor, so holding your hand higher means larger thrust. Pitch/roll is controlled by tilting you hand the same way you want the Crazyflie platform to tilt. So tilting your hand forward tilts the Crazyflie forward. Lastly the yaw is controlled by rotating your hand in the X/Y plane (around the Z-axis). For thrust/pitch/roll the control values are absolute, but for yaw it’s the rate that you control (just like the normal controls in the Crazyflie client).

As a safety mechanism the Crazyflie will only respond if the Leap Motion detects 4 or more fingers. So holding your fist above the sensor does nothing, but the instant you open up your hand you can start to control the Crazyflie.

The code for flying with the Leap Motion is still on a development branch but if you are eager to try it then have a look at the instructions in the hacks section of the wiki for documentation on how to get flying! The plan is to merge the Leap Motion code into the main track once we are finished with the development.

Crazyflie and Leapmotion

The community interest for FPV flight made us buy a light weight analog FPV kits a while a go. We bought the 5.8GHz micro combo set from fpvhobby to do a first test. It took a little while to solder things together but it wasn’t that bad. We soldered the camera and the transmitter power to the VCOM voltage on the Crazyflie which is available on the expansion port. Then we taped the camera and transmitter to the Crazyflie and did a test flight.  The FPV kit is only about 3 grams which doesn’t affect the flight performances that much.

It was almost too easy, but as soon as we took off we noticed some vertical lines on the TV so maybe it wasn’t that easy. There seems to be some electrical interference, probably from the motors. Also the battery voltage drop generated by fast accelerations cuts the video feed after a couple of minutes of flight. We still think that there are some improvements to be done so hopefully it will work better in the future.

As for the production, so far it is still going forward as planned.

Finally an Alpha version of the virtual machine has been posted on the forum, you are welcome to test and report any problem/suggestion you may have :-).

So finally it’s Monday again :-) As you might have noticed the Crazyflie got released for pre-release last week! All our code has now been pushed onto Bitbucket and our repositories can be found here. Since we did some restructuring of the code before pushing there might be some bugs that we are currently hunting. The Crazyflie is mainly a development platform where you can either add new features/hacks or improve the current features. We added a feature wishlist to the Wiki for features that we never had the time to implement and also to add new features that you suggest. So if you feel like getting you hands dirty there’s still lots of stuff to do! In order to make development easier we have:

  • Wireless Radio Bootloader: This will enable you to easily update the firmware in the Crazyflie. The bootloader cannot easily be erased without using  a JTAG so don’t worry about bricking your Crazyflie when testing new firmware
  • Crazyradio USB bootloader: The Crazyradio contains a USB bootloader for easy update of the firmware
  • Well documented: We are currently doing our best to update the documentation on the Wiki and our goal is to create a well documented platform
  • Parameter setting/getting: This is detailed a bit more here but in short it’s a framework where you can easily add parameters/variables that can be set or fetched from the client. The tab in the client where you can change PID controller parameters on the fly is implemented using the parameter framework.
  • Variable logging: This is also detailed a bit more here but in short it’s a framework where you can easily log variable values to the client. You select variables that you want to log and the rate you want to get them and the Crazyflie will automatically send you updates for these variables. The attitude indicator and roll/pitch/yaw values on the FlightTab are implemented using the logging framework.

In the upcoming week we are planning on posting a video showing some of these features.

Wait, what? Is it Monday again already?! Well no, don’t worry you didn’t miss the weekend. The reason for breaking our “Monday post” tradition is that we couldn’t wait to announce that the pre-order has started for the Crazyflie!!

 

Crazyflie Nano Quadcopter

 

The last couple of weeks has been really busy finalizing as much as possible and finally the time has come. In the end we couldn’t decide on whether we should add the extra sensors or not so we decided on making two versions, one with the basic sensors and one with the extra sensors. Keep in mind that there’s no firmware for the extra sensors yet but if you are interested in more advanced regulation algorithms and performance then you should get the kit with the extra sensors.

We put together two bundles for the different “sensor packs”. One is called Crazyflie Nano Quadcopter Kit 6-DOF and the other 10-DOF. They both include the Crazyradio USB dongle and a 2.4GHz antenna for it. The price for the kits are $149 for the 6-DOF and $173 for the 10-DOF. For full product descriptions head over to Seeedstudio and have a look. There’s also spare parts available to pre-order which could be a wise choice depending on what you are planning on using the Crazyflie for :-)

Here’s the link to the Crazyflie pre-order at Seeedstudio.

Here’s the time schedule for the pre-orders:

  • Pre-order: Jan 31st – Feb 18th
  • Shipping: April 25th

To be totally honest we are not sure how to handle the transition from pre-order to “normal” orders. This depends a bit on how many we sell and how fast we can get a “normal” stock up again. So if you are interested in getting a kit make sure to get one during the pre-order!

Like we’ve said earlier we wanted to release the source for the firmware/software as well as the schematics so you know what you are buying and can already now think of hacks and projects for when your Crazyflie arrives. The choice fell on Bitbucket where all our repos and bugtrackers are located. The only thing we are not releasing yet is the complete KiCad hardware design, but once the pre-orders ship it will be in the repos as well. We are currently pushing the code into the repos on Bitbucket but haven’t had time to complete all of them so we will keep publishing them during the weekend.

So if you want a Crazyflie for flying, doing development or just to help support our project then head over to Seeedstudio and pre-order one.

Last but not least: What would an occasion like this be without a new video :-)

Back in November when we got the pre-series we shot an assembly video showing how to assemble a Crazyflie kit. We shot it in Tobias shed in his back garden where it was about 10*C, that’s why Marcus is wearing a winter jacket. It was also pretty late and it’s the 7th Crazyflie in a row that we have tested and assembled, so we where pretty tired. We are not trying to find excuses but it might not have been our best work. For example the words “the best way” is frequently used, and due to our Swedish heritage, “one good way” might have been more appropriate, but that day we where just feeling confident :-).

If you have ~8 minutes to spare have a look at the video, so you know what to expect in terms of assembly, when you pretty soon will be able to pre-order the kit.

We’re still busy with administrative stuff and preparing everything for release so sorry for the lack of tech posts. Hopefully there will be more time for those later :-)

But we did spend one night this week trying out something that we have talked about forever: Using OpenCV to auto-pilot the Crazyflie. For controlling the Crazyflie from a Python scripts it’s just a couple of lines and then you are ready to go. Add some object tracking to that and you can make an autonomous Crazyflie…or you could make a crashing one like the video below… The video is shot using a Playstation Eye lying on the floor. The camera has good potential for tracking since it’s low resolution, cheap and can do up to 120 fps. The plan is to use the size of the detection to control the thrust and the center of it to control the roll and pitch.

Unfortunately the latency was too large for doing a control loop for roll/pitch/thrust so it crashes. But hopefully in the future we, or someone in the community, will have some more time to spend on this. We think that it definitely has potential!

Part of this test was also to have another project where we use the Crazyflie Python API to make sure that it can easily be dropped into other projects.

 

The last week we have been busy preparing for the presentation we had at the Øredev conference where we talked about the Crazyflie history and design. We had a great time and got to meet some fellow nerds and talk about technology stuff!

All the presentations and keynotes where filmed and can be found on the  Øredev site. So if you have 50 minutes to spare check out our presentation. Or just skip ahead until ~41:00 to see Arnaud stick a Crazyflie in Marcus’ hair…

As for project there’s not much news. We are still waiting eagerly for the pre-series units that will arrive in a couple of weeks.

We discovered a new key-chain video camera which is called the 808#16. It had gotten a pretty good review so we decided to give the video camera add-on hack yet another try. A while ago we tried it with a 808#14 but it didn’t work that well when we where running it directly from the Crazyflie battery. It shut down as soon as we used to much throttle and using a separate battery made it to heavy. We didn’t have to high hopes for the 808#16 either and when we discovered that the bare camera weight, no battery nor case, was about 9g we knew it would be at the maximum of what the Crazyflie could carry.  With high hopes we connected the camera directly to the Crazyflie battery terminal and gave it a try.

It worked! The camera didn’t shut down but as you can see the stability is pretty bad during take-off. Once in the air it is controllable but only barely. We haven’t tested the full flight time but it probably wont be more then 2-3 minutes. We are thinking of doing a test where we add 4 more motors “mirrored” directly underneath the existing ones to increase the payload capability. Would be nice to have that option and it should be fairly simple to do.

We are pretty impressed with the video of the 808#16 which still is very cheap. We bought the 808#16 camera with the D-lens which is a wide angle lens and that’s why the video has a bit of a fish-eye.

After the LED hack we are back with an inductive charging hack!

The idea of charging Crazyflie inductively is almost as old as the copter itself. Last week we received a Palm Touchstone charging kit that we ordered. Like many phone hacks using this inductive charger we dismounted the receiving coil and electronic and attach it to the Crazyflie:

As the Crazyflie has a power-management circuit, any supplied voltage above ~4.5V will make it charge, and as we have made some soldering pads available for things like this it was a simple task. The coil is very thin and light (about 3g) so the flight performance are not affected a lot by the change. The charger is working very well and provides enough current for charging. We charge with a little less then 500mA and we think the Touchstone can supply up to 1A. One possible problem though is that the copter has to be placed exactly in the middle of the charging station to be able to charge. The phone has magnets to align it to the charge station and on top of that the charge station is not straight but tilted. The magnets are way to strong to let the Crazyflie take off so we are trying to find a landing area design that would permit the copter to land in the right spot and still be able to take off again without the magnets, any ideas?