Blog

We are really happy to announce that we are starting the pre-order for the Crazyflie 2.0 today! After spending nearly 10 months doing development, we have reached a point where we are very happy with the design and the performance. Now all we have to do is to kick off the production and that’s where the pre-order comes in.

During the next three weeks we will be taking pre-orders for the Crazyflie 2.0 and related products. After the three weeks has passed we will start the production and the current estimate for shipping the products is the second week of December. As a reward to users that want to help us out by pre-ordering our products, we are lowering the prices with about 15% until the 16th of October when the pre-order ends.

So, just to clarify:

  • Pre-order end: 16th of October
  • Estimated shipping: Second week of December

If you want to know more about the Crazyflie 2.0 and what it’s about, then have a look at the Crazyflie 2.0 product page. It explains a bit about the communication (Bluetooth LE and Crazyradio), the expansion boards and gives you an idea what you could use the platform for. The Crazyflie 2.0 developed with developers in mind, so it features thins like wireless firmware upgrade, real-time parameter setting/getting and data logging using graphs. To make it easier for developers to get going we provide a pre-installed virtual machine that contains most of our tool-chains for building firmware and software, as well as KiCad for the hardware design.

For the Crazyflie 2.0 pre-order we aren’t just making the Crazyflie 2.0 available, we are launching a full set of products to support it. Here’s the list of the main products and the expansion boards that are included in the pre-order:

  • Crazyflie 2.0: The next generation of our flying open development platform with lots of new features
  • Crazyradio PA: The same mechanical footprint and price as the current Crazyradio, but now with a power amplifier that we have tested to above 1km range (line-of-sight) with the Crazyflie 2.0
  • Debug adapter kit: An easy way to debug the nRF51 and STM32F4 on the Crazyflie 2.0 by using an adapter board for connecting a standard 20-pin/100mil JTAG or 10-pin/50mil Cortex-debug cable
  • LED-ring expansion board: Fly into the night in style with this expansion board featuring 12 bright RGB LEDs that can be individually controlled and two strong white front-facing LEDs
  • Qi expansion board: Charge your Crazyflie 2.0 without any wires with this inductive charging expansion board using Qi
  • Breakout expansion board: Easy solderless prototyping with a board designed to fit a breadboard to try out your designs on the ground
  • Prototype expansion board: With space for prototyping and access to all the pins in the Crazyflie 2.0 expansion port there’s lots of possibilities with this board

We are also including all the spare parts in the pre-order to make sure that everyone gets a chance to get what they need together with their Crazyflie 2.0. Here’s the list of parts:

For the release we wanted to make a video explaining a bit the new platform, but since we have been really short on time we’re not done yet. Instead we are publishing a short video showing the Crazyflie 2.0 in action together with the LED-ring expansion board. The video also features the traffic light hack we did a few weeks ago.

Have a look at the Getting Started page for the Crazyflie 2.0 for assembly instructions or the wiki documentation for the project to see how to assemble the new solderless Crazyflie. There’s also some Expansion port documentation available as well as User Guide. We are still working on filling out more of the documentation, so bare with us. With the hardware completed we are now refocusing on the firmware and software. We have built in lots of neat features into the new Crazyflie 2.0 hardware that we now need to add software support for. So over the coming months we will be working on the iOS/Android apps and the Crazyflie PC client as well as the firmware. We will of course keep everyone updated of the progress here on our blog. Once the Crazyflie 2.0 products start shipping we will publish all the code and hardware design on our GitHub.

Starting with the pre-order of the Crazyflie 2.0 we are also lowering the price for the current version of the Crazyflie. The Crazyflie Nano Quadcopter 10-kit is lowered from $149 to $116 and the bundle with the Crazyradio is lowered from $179 to $146. So if you can’t wait until December then have a look at the current version over at Seeedstudio.

Finally it’s getting really close and we are very excited to say that the pre-order of the Crazyflie 2.0 will start this week! We will post more details about it during the week, until then here’s a short teaser from our release video :-)

 

The last couple of weeks we have been spent on finishing the testing of the hardware and preparing lots of practical things for the production of the new Crazyflie 2.0. With almost all the hardware finished, we are now working hard on preparing for the pre-order. The number of products that are included in the Crazyflie 2.0 launch is a lot more than we had for the current Crazyflie, which means that there’s a lot more things to be done. We are really excited about releasing Crazyflie 2.0 and can’t wait to see what you will do with it. We don’t want to promise anything but stay tuned, the pre-order launch has never been so close :-).

As you might already know we have added a 20dBm RF amplifier to the Crazyflie 2.0 as well as to the Crazyradio PA. We have had high hopes of getting a more stable link and much better range with this. We have done a lot of tests in the building we are sitting in and already experienced a big improvement in range. However radio range is a tricky thing as it depends on so many things and when we have tested it outside of the office we could only get a stable link for about 80m. This is very different from the documents we read where we could expect up to a kilometer of range! Maybe the fifteen wifi networks that where present outside our office played an effect.

So this weekend I set out to do some test on the country side. I packed my bag and mounted the Crazyradio PA on a 1m stick which I put in my bag so it could reach higher than my head. Then I took the bike to get to the country side. I got a lot of strange looks while bicycling. It was first when I reached the country side, it came to me that bicycling around with an antenna sticking out your backpack might be interpreted the wrong way :-o. After a while I reached a good spot and decided to put the Crazyflie still somewhere and instead take the computer with me so I could see what was happening. As the nRF51822 can take RSSI measurements we made a simple python program where the computer pings the Crazyflie and the Crazyflie responds with the RSSI measurement. We save the data in a CVS file which can be plotted in real time. I hang the Crazyflie in a bush, started the Crazyflie 2.0 at channel 10 and 250k air data rate, fired up the plot and took the bicycle and started pedaling.

After 100m I still had a solid connection, very good sign. After 500m the RSSI had dropped to about -80dBm but still a stable connection. After 1300m it got really shaky, about -100dBm, as the line of sight was obstructed by some trees and the road turned as well, 1.3km, LOS, that’s a huge improvement from the 80m we got back at the office. We know these circumstances are very optimal but at least it shows us we are not way off and hopefully we can expect half of that range in a more real situation. We have still not tuned the matching network for the antenna, which we will do soon, so hopefully we can expect yet another improvement. I also did a test with a hacked Crazyflie 2.0 with a duck antenna. With this one I got about -70dBm at the same 1.3km spot. This could be a great hack for special applications that require long radio distance as it could probably go beyond 2km range LOS, both up- and downlink.

A while ago we did a hack where we attached a NeoPixel ring to a Crazyflie. It was just a quick hack to show the concept, but we really liked the results. So we added some more firmware to easily be able to create new effects for the ring and also made it controllable using the Leap Motion. When we started talking about what expansion boards to do for the Crazyflie 2.0, we instantly thought about this hack. It’s fun to play around with the patterns, but it’s also great for lighting up the ground below that Crazyflie. To be able to light up in front of the Crazyflie we also added two strong white LEDs facing forward. Imagine a Sci-Fi movie where an abandoned alien ship is found. To explore it they first send in a small autonomous flying vehicle for exploration that lights up the walls and floor while blinking with some patterns, that’s the look we were going for :-)

To accomplish this we have designed an expansion board with a ring of 12 W2812B RGB modules as well as two strong front facing LEDs (the kind that’s used for LCD backlight). The board is 3cm in diameter and weighs about 3,5g. To make sure the LEDs are lit correctly as the battery voltage changes (especially when it get’s low) we added a DC/DC step-up/down to the board.

Like always, we are looking forward to seeing what fun things our users will do with this board :-)

One of the boards that we have been working on is an inductive charging expansion for the Crazyflie 2.0. Some of you might remember way back when we did an inductive charging hack for the Crazyflie. It’s always been very compelling with wireless charging, we’re not sure why. Maybe it’s because it feels a bit magic :-) For our inductive charging expansion board we choose the Qi standard, which is used in many cellphones today and finding a cheap charger for it is pretty easy. The board is designed around the BQ51013B Qi chip from Texas Instruments. Our initial testing of the board shows that it’s operating at about 65% efficiency and manages to provide an output of around 1A at 5V. The board weights about 5g, but we might be able to improve that  a bit, and is 30x30mm. Now all we need is a dock that we can automatically land on :-)

Here are some images of our current prototype, the final version will look a bit sleeker. The jumper sticking out on the side is for current measurements. It won’t be mounted in the final version, but the pads will still be there. So if you would like to measure the current you can cut the track and solder a jumper for it.

One of the nice new functionality of Crazyflie 2.0 is the Bluetooth 4.0 low energy (BLE) connectivity. In Crazyflie 2.0 we are using a radio microcontroller chip from Nordic semiconductor, the nRF51822. This radio chip allows us to keep compatibility with the existing Crayradio (and future Crazyradio PA), and to support BLE connectivity as well. The radio chip is a bit bigger that the one we used so far, and with the Power amplifier, we end up having the radio taking more space on the PCB:

The extra footprint is offset by the fact that we are now using smaller sensors and that the nRF51 is also handling the power management thus freeing pins on the main CPU.

The main usage of BLE will be to fly Crazyflie from a compatible mobile device like an Android phone or an Iphone. This could be used both to ‘just fly’ or to develop crazyflie control apps using the mobile phones capabilities. For example the phone camera could be used to detect and control Crazyflie autonomously. We have prototyped the BLE communication both on the existing Android client and for IPhone. The plan is to provide basic apps for the Crazyflie 2.0 release so that the copter can be flown from a mobile device out of the box. So far we have got the copter to fly from both Android and IOS:

We are not planning on implementing any BLE support for the PC client, so Crazyradio is still the main way to communicate with Crazyfle. It is possible to have BLE on PC but it would require a major effort to get it to work for Linux, Windows and Mac (there is no cross-platorm Python BLE lib as far as I know. If there is some please tell me in the comments!). Also Crazyradio is lower latency and has an higher datarate which makes it better for flying and communicating with one or many Crazyflie 2.0 from a PC.

We are also implementing BLE in the bootloader. This means that it will be possible update the Crazyflie 2.0 firmware from both a PC or a mobile device.

Technically we are using the Nordic Semiconductor soft device BLE stack. The stack runs a little bit like an operating system, behind and independently of the firmware: the firmware is not linked to the stack. This will make things a little bit easier to have an open-source firmware even though the nordic bluetooth stack is closed. Another nice thing about the nordic chip is that the radio peripheral is well documented so implementing open source stacks in the future is potentially possible.

Practically we where originally planning to have two modes for the firmware: one Crazyradio and one bluetooth mode. However the new release of the Nordic BLE stack allow to mix BLE and Crazyradio at the same time. So we are working on having a seamless connection procedure between Crazyradio and BLE: when starting Crazyflie 2.0 it will be accessible both via BLE and with the Crazyradio. When connected the unused mode will be disabled until disconnection. Also the name of the copter will be communicated both in BLE and Crazyradio mode and can be changed by the user. This will help a lot people having more than one Crazyflie (us first!) to differentiate them.

As we said in previous post, with Crazyflie 2.0 one of the focus has been on enhancing the current Crazyflie platform. The radio range and power is one of these things that is good enough on the current Crazyflie but that could be made much better. So on Crazyflie 2.0 we added a +20dB power amplifier that increase the output power up to +20dBm.

The logical move was to add a similar amplifier on the Crazyradio dongle and that is what we did. We made Crazyradio PA (power amplifier) and we intend to release it with Crazyflie 2.0

The output power is now of 20dBm for Crazyradio PA, which will dramatically increase the control range. Even though Crazyflie was originally intended for indoor use, Crazyflie 2.0 is pretty capable outside, mostly with the expansion capability that could allow to add things like GPS, so the extra range could be put to use. But maybe the biggest advantage is indoor where Crazyradio is now playing equal with Wifi in term of TX power. This increases the link robustness and allows for flying in other rooms (could be useful with a powerful FPV for example).

Preliminary tests show much better performance compared to the first Crazyradio and Crazyflie both indoor and outdoor. So far, we mesured a stable link two floors down about 20m away indoor and about 150m outside range (the uplink has been tested up to 450m). Of course we are continuing to work on it and final specs will come later.

As for the radio dongle mechanic we have changed nothing: the connectors and LEDs are still at the same place. This was made possible by using smaller SMD components and so existing 3D-printed cases for Crazyradio still work for Crazyradio PA.

One feature of the new Crazyflie 2.0 that we are especially happy about is the new expansion port. We have attached a lot of hardware to the current Crazyflie and we have also seen lots of users attaching their hardware, but it’s not very easy. The current connector is small, you will need to solder and it’s not mechanically stable once you attach something. For the Crazyflie 2.0 we wanted to improve this, making it easier to attach new hardware and to expand the functionality of the platform. When we started looking at this we quickly realized that the small size of our platform limits what kind of interface we can have. We wanted something very small and light, but still it couldn’t be too expensive. While looking for a solution we found some of good alternatives, until you start measuring them and bringing them into our design in KiCad (again, it’s like parking a minivan in your bedroom). Something that didn’t make the selection easier was that we wanted lots of flexibility. We wanted users to be able to add multiple boards, both on the bottom and on the top of the platform. This might sound crazy for a small platform like the Crazyflie, but with the new motors we are able to carry more weight than before. Adding expansion boards will of course effect performance (like flight time) but to the extent that it’s possible, we want to give users the possibility to do as much crazy things as possible with their Crazyflies :-)

After months of searching (it’s pretty hard finding connectors…) we finally found a solutions that fulfilled all of our requirements. The connectors we found allows users to place multiple boards on the Crazyflie, both on the top and the bottom, and without pre-defined vertical spacing. We only place female connectors on the expansion boards, which means that if you crash and bend the male pins, you just have to exchange them and not any expansion boards. Below are some images showing the expansion connector, the pins and some examples on how you can connect boards. It also shows two of the expansion boards that we have designed, a prototype board and a breakout board for breadboards. In the images we use the breadboard and the breakout board to connect to a pressure sensor from ST and the prototype board to build a flying traffic light :-) The idea of the pattern for the prototype board is taken from ElecFreaks. It allows for easily using both though-hole components and SMD components.

All the boards and the Crazyflie 2.0 with the 3D printed motor mounts are still just prototypes.

Detecting boards

We think that being able to attach different boards is great, but how do we use them in the firmware/software? Well, there are two different use-cases for that. The first one is “pre-made” boards. Aside from the two boards above (prototype and breakout) we have a bunch of ideas and also a few working prototypes that we will write a bit more about later. Let’s use the GPS-expansion that we are working on as an example. When you attach this board you want extra functionality to be available without re-compiling and configuring things. You still want the possibility to hack around in the firmware/software, but you want the hardware to be initialized properly so you don’t have to worry about that. To accomplish this we needed some way to identify the different boards. Again, this needed to be done is a cost-efficient way and without using up too many of the pins in the expansion port. The solution we found is 1-wire memories. So what’s so great about them? Well, they have some nifty features. First of all each produced IC has an unique address, so placing multiple memories on the same buss is no issue. Using a search algorithm you are able to find and identify all the connected memories so that you can address them individually. Secondly they only use, like the name suggest, one wire for communication. This wire is also used for parasitically powering the memory. That means all you need to connect is the one wire and ground. Last, but not least, they are fairly small. The ones we use are in a SOT23 package.

So how are we using these memories? We are placing a memory on every board we design (except for boards like the prototype and breakout boards). The memory is very small, but it’s enough to contain some information about the board. So during production each memory will be programmed with things like what board it is, which revision and what resources (i.e what pins in the expansion port) the board uses. At start-up the 1-wire bus will be scanned and all the memories will be read to detect what boards are attached. Why store what pins the expansion boards use? Well, the nice thing is that the 1-wire bus is connected to the nRF51 (here’s some info on the system architecture). Since the nRF51 is responsible for power management (i.e switching on power for the STM32F4) it’s possible to scan all the memories and detect conflicts in resources before powering on the main system and the expansion boards. Let’s say you attach two boards that use the same UART. This will result in issues when the systems starts running. To protect against this the nRF51 will check if there are any conflicts and won’t power on the system if there is.

The second use-case for expansion boards are the ones you make yourself. Then you might not be interested in using the 1-wire to detect your board. Therefore it’s in no way mandatory to use that feature, it’s just something that we think will make working with our platform easier for our users. But in case you are interested in detecting your own boards, the firmware will support programming the memory and we will link to the correct parts at suppliers.

The pinout of the expansion port

The expansion connector consists of 2 rows of 10 pins each with the spacing of 2mm and has the following pinout:

Crazyflie 2.0 expansion port

Crazyflie 2.0 expansion port

P6

  • VCC – 3V0 regulated supply (max ~50 mA consumption). Only powered when the STM32F4 is powered.
  • STM32F4 UART 1 (RX/TX)
  • STM32F4 I2C bus (400kHz)
  • STM32F4 4xGPIO (can be used as chip select for SPI)
  • GND – platform signal ground

P7

  • STM32F4 UART 2 (RX/TX)
  • STM32F4 SPI (SCK, MISO, MOSI)
  • nRF51 2xGPIO that could be used for GPIO but will have the following reserved:
    • nRF51 wakeup – allows waking up from an expansion board
    • nRF51 external power indication – will indicate if an expansion board is powering the system or not
    • nRF51 1-wire memory access
  • VCOM – unregulated direct access to power after charger (max 1 A consumption). The voltage is VUSB if a charger is connected and VBAT otherwise. Currently this power supply is always on (even when the system is powered off) witch allow for making always-on expansion board. However we are looking at inserting a high-side switch which would allow also switching this supply off if needed, making prototyping and design of expansion boards a bit simpler.
  • VUSB – unregulated direct access to uUSB power. This can either be used to get uUSB power or to supply uUSB power to the platform (like an external charging board that powers and charges the system).

The pins that are connected to the STM32F4 can be used as GPIO or for other functionality that they are multiplexed with, like timers.

Making expansion boards

As many of you probably know, we strive after using open source tool for our development. So for electronics design we use KiCad, an open source EDA suite that works on Linux/Windows/Mac. To make it easier for users to design and make their own expansion boards we have created a template for the design. It contains the initial schematics as well as layout. The connectors are added in the correct positions and the memory is also in. To make things even easier, the layout contains drawings of the Crazyflie 2.0 board outline and connectors, to easily see how the board will fit. As with everything else this needs some cleanup when the final design is in place, but then it will be released under the CC-BY-SA 4.0 license. Looping back to the 1-wire memories, if you make your own board will it be possible to get in on the automatic detection? Sure, the more the merrier. But we still haven’t specified exactly how this will work technically, so we will have to get back on the specifics. If you are interested in hacking something together a great way to go is first to try out the design on a breadboard, then solder it together on the prototype board and finally do the layout in KiCad and order it at a batch-PCB service.

While designing the Crazyflie 2.0 one of our focuses has been enhancing the current Crazyflie functionality. As a flying development kit the current Crazyflie already has a JTAG debug port that allows to flash and debug the STM32F1 microcontroller. The design uses a standard ARM 10-pins cortex debug connector. The connector is shipped with the Crazyflie control board, but it is not soldered. So before doing any advanced debugging with the Crazyflie the user will have to solder the debug connector (it is always possible to flash new firmware using the radio bootloader).

With Crazyflie 2.0 we wanted to make it easier to debug it out-of-the-box, without needing to solder. But the issue is that standard debug-connectors tend to be fairly large, so to fit the connector on the board we used a different connector that connects to an adapter board.

Aside from having a reset button, the adapter board will have 3 JTAG/SWD connectors:

  • 20-Pins HE10 ARM JTAG with 2.54mm spacing: The most commonly used connector
  • 10-Pins ARM Cortex with 1.27mm spacing: Used in some modern ARM board, the same as the current Crazyflie
  • 6-Pins SWV with 2.54mm spacing: Compatible with the connector present on ST Discovery boards

The smaller 6-pin connector connects to the Crazyflie 2.0 for flashing and debugging of its 2 MCUs: The STM32F405 and nRF51822. The connector for debugging the STM32F4 is mounted on the Crazyflie 2.0. For the nRF51 we are still working to get a solder-free solution using the same cable/connector on the debug-adapter. Why not just put two connectors, or one big with all the signals on the Crazyflie? There’s just no more space on the board. The connector looks very small, but when you bring the footprint into KiCad it’s like parking a minivan in your bedroom :-)

Since all the connectors are wired together the board can also be used in a number of other combinations, like using it as a 20-pin to 10-pin Cortex JTAG adapter or any other combination of its connectors.