Author: Marcus

As you can see the webpage looks a bit different this Monday. For a long time we have had the feeling that new users coming to our webpage don’t get an overview of what we do and what the Crazyflie is. So we decided to put in a front page that is intended to introduce Bitcraze and the Crazyflie to new visitors. Since we feel that our blog is an important part of what we do we also added the last blog post to the bottom of the front page. If you are looking for the full blog it’s moved here, also there’s a link in the top menu.

We have also gotten the comment that there’s no information on the actual website, it’s all on the wiki. So we have added some new pages with a bit more descriptions of the development environment and the products. We will keep adding more and more information as we go. There’s still lots of work to do for the page and to enhance the website design, but we decided on doing it incrementally :-)

The nice new photos (in the slider and other images) are courtesy of our friend Johan Jeppsson, thanks!

It’s always fun get a change to meet fellow geeks/makers so during this fall we will be holding two presentations, first in Denmark and then in Belgium. They will be held at CIID in Copenhagen in October and at Devoxx in Antwerp in November. If you are close by then make sure to come by and say hello!

Here are the details:

If you don’t have the possibility to attend any of these and still want to hear us speak, have a look at our presentation at Oredev we did last fall or at the video from Devoxx after the conference. If you watch our old presentation, then pay attention at around 42:00 when Arnaud flies a Crazyflie into my forehead… It was just a matter of time before it happened :-)

If you have any suggestions on conferences/events were you would like to see the Crazyflie then leave a comment below.

Devoxx

It’s been a week and so far no-one has decoded the complete message (at least not decoded it and followed the instructions…), Pär has made a great start with “first” but there is more to it ;-).  So as promised here’s more clues. The message is 320 bits long and the bits are organized so they form a square (i.e the rows are directly underneath each other). That together with the clue we gave last week should make it a bit easier to decode. And if you need some motivation to get decoding, there is a reward included with the instructions :-). Edit: The reward was clamed by Joerg, congratulations! For anyone that still wants to try and solve it, don’t look in the comments. You will find the solution there :-)

TheCode

One late night many months ago, we had a great idea! While finalizing the design of the Crazyflie box we decided to include a faint binary pattern in the background on the box. Taking a closer look at the box you will probably see it. After looking at it for a while you might notice a pattern emerging. The pattern reads 1011 1100 which equals 0xBC in binary, well most of it anyway. In some part of the code we decided to insert a message. We placed it in a way so it would be “easy” to notice the break in the main pattern. Now, this was well after midnight and we didn’t foresee all the problems that might occur.

Fast forward a couple of months and we get the first box from production in our hands. Turns out the binary pattern wasn’t as crisp as on the computer screen (doh..) and that it was shifted a bit from where we originally place it. To make things even worse the design had probably been panellized and the pattern wasn’t in the same place on all the boxes. This would never have caused any problems, except for the code that was hidden there…

We forgot about this for a while, but then we finally posted something about it. Then we sat back and waited for it to be found. But nothing happened. So we decided to finally sit down and try to decode it from scratch. Turns out that it takes longer to find and decode than Neo took to decode the code in the Matrix…. So we decided to make it a bit easier :-) Below is a scan of one of the boxes with a little Gimp-magic to improve the visibility. If you start looking at the 0 above the “y” you will probably find something interesting. It’s not easy, so if no-one finds it by next week we will keep giving clues.

TheCode

 

We have been in need of a 3D printer for a while now, in order to print parts designed by community members and also prototype new parts. After talking about it for ages we finally got around to buying an Ultimaker. For now we have mostly been playing around (printing various things found online) but our plan is also to make some models that users can print themselves. Let’s see if we run out of plastic before we get that far :-)

Below are some parts we printed. The Crazyradio cover designed by foosel and the frame designed by VGer.

Bitcraze Ultimaker

 

The past weekend marks the two year anniversary of Bitcraze, the company we founded to manufacture and make the Crazyflie Nano Quadcopter kit available. Even though there’s been a lot of hurdles along the way we finally made it all the way to our goal! It’s been a great year with lot’s of fun things happening like finally testing the pre-seriesvisiting Seeedstudio in Shenzhen, seeing our empty forum filling up with active users and most of all seeing what users are doing with their Crazyflies. Thanks for supporting us!

Our first year with Bitcraze was spent doing lots of development, design, testing and sourcing. This year has been spent on lot’s of planning, administration, support and preparing for a release. We have said this a few times before, but it’s worth saying again: The easy part was getting the Crazyflie to fly, the hard part was manufacturing and releasing it. Having a company, website and production takes a lot of time. We are really happy with our co-operation with Seeedstudio, without them taking care of production/orders/sourcing/etc. we wouldn’t have had any time over for development.

One of the questions we were asking ourselves before Bitcraze was how our development would be affected when we suddenly had users using our hardware and software. Back then we basically did what ever we felt like doing, as long as it took us in the general direction of making things better. The client and firmware would suddenly be incompatible for a couple of weeks. If we needed to modify the hardware we just had 3 Crazyflies to patch. Sometimes we would just get fed up with everything and spend weeks doing other projects or going outside to smell the fresh air and get some sunshine. Having users and manufacturing a product changes things. It’s a great (and oddly bizarre) feeling seeing users assembling and using something that we have designed and worked on for so long. Even though we have spent years working with product development as contractors, we have never really seen or communicated with the end-users before. So in order to make this work we have spent lots of time discussing how to do things. That includes everything from naming conventions and work division, to how to organize the wiki and when to build new releases of our software. We once spent a whole night discussing how to name our products internally (like BC-CFK-04-A). Even though things are better now, there’s still room for lots of improvements.

So what’s the plan for the coming year? To get more development done! By now we have done most things for the first time, so hopefully the next time it won’t be as much work. Now that the summer is over and we have cleared our backlog of administrative tasks, we are hoping to get some momentum again. We will also try to find more fun things to do and to broaden the usage of the Crazyflie platform, like the Kinect and Leap Motion work, so that users can keep exploring and developing new things.

Crazyflie with candle

The image is actually the same image we posted last year when Bitcraze turned one. We are now one year older and wiser, which means we know better then to attach a lit candle to a LiPo battery and try to fly the quadcopter :-)

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

We are now all back from vacation, restarting the work on Bitcraze stuff. We are looking forward to play with the Leap Motion we just received…

The development is still going forward. Among other things the Android client development has greatly improved lately and we are hopefully getting closer to the first official binary release. We are also thinking of releasing a new version of the client and firmware as some functionalities and bug fix has been implemented since the last version.

After the second batch was finished we made the Bitcraze products available to distributors through the Seeedstudio Warehouse. Now we are really excited to see that our products have started showing up in distributor webshops around the globe. In order for our users to easily find local retailers we have compiled a list of distributors. There’s some lag between the time you start distributing our products until we get notified by Seeedstudio, so if you are not in the list of distributors drop us an email and we will add you.distributors

Last year we quickly hacked together a client for Android to show that it was technically possible to use the Crazyflie/Crazyradio on the platform. It worked, but it wasn’t very good. After that not much has happened, until now. Thanks to contributions being made by fredg02, Sebastian Sams and bug tickets from Sascha Heymann, the hackish prototype we did is now turning into something that is actually usable. It’s still under heavy development but there’s already some new features. Here’s a quick run-down of what’s been added:

  • An external controller can be used instead of on-screen thumb sticks
  • You can scan for Crazyflies
  • The same flight control settings that are in the cfclient are now available (i.e advanced mode, X-mode, max roll/pitch/yaw and thrust)

So the Android client works with phones and tables that support USB host or OTG. Anything else? Well, there just happens to be an Android platform that even comes shipped with an external controller…the Ouya! So if you have an Ouya and a Crazyflie you can just side-load and you are ready to go! Since we are used to the PS3 gamepad we had some issues getting used to the Ouya controller. If you have the same issue you can pair your PS3 controller with your Ouya and use it instead!

Once the software becomes more stable an APK will be released, but until then the repository with the code and issue tracker can be found here.

 copter_ouya