Blog

We have noticed some confusion about how we control the Crazyflie after our RC controller post. So just to clarify we are using a Playstation 3 gamepad to control the Crazyflie from the PC, this is the best we have but any gamepad or joystick would do. However there are other options.

The Crazyflie will be controllable from the CrazyRadio USB dongle. The dongle has a number of interfaces that can be used: USB, SPI/UART and PPM. A custom made controller could be connected to the SPI/UART or a RC remote to the PPM interface. If the dongle is connected to the computer using USB it can be interfaced using our Python library. Currently we are using a QT application together with a gamepad controller to interface the Python library but it’s also possible to do other stuff like one of our dreams: using openCV to track the Crazyflie and control it autonomously from a PC and a couple of webcams :)

Also we are still porting the code and testing the new prototypes. So far we haven’t fond any more problems than the JTAG reset.

A large part of this Monday was spent assembling and testing the new prototypes with the digital sensors which arrived today. Eager to try them out we pretty quickly got stuck when we tried to program them with the JTAG. The copter wouldn’t respond to any JTAG commands… After a long time of testing we found our rookie mistake: We have been moving around some of the signals now when we have digital sensors to make the expansion port use a dedicated SPI port and not share it with the radio, which is a great improvement. With this moving around we managed to put one of the motor outputs on the optional JTAG reset pin, NJTRST. The motors are pulled low so they don’t start unintentionally which then makes the JTAG go in constant reset :o This can be walked around by temporarily holding that pin low during the first programming of the boot loader which will then immediately remap the NJTRST pin to be unused by the JTAG. If the bootloader is never removed the problem is gone but if the boot loader is unintentionally overwritten then one have to do the “pull low” trick again. So now we have to decide whether to live with this flaw or do yet another board re-spin… :-( There are still plenty of sensor testing left to do that maybe need another re-spin.

Before we have any maiden flight video the show below is a photo of the new Rev.D PCB. There are more in this album.

Crazyflie Rev.D PCB

 

We don’t have that much new to write about this week. The software clean-up is slowly evolving and we have been working some more on the radio protocol and the ground station.

We hope that the new prototypes will be ready this week so maybe we could make a first flight with them in the beginning of next week :-)

A none return point has been passed as we have put in an order for a shit-load of motors. Now everything has to work out or we will be sitting with a hole bunch of motors and no money to do other fun stuff.

 

While we are waiting for our prototypes to arrive, the ETA is the 18th of may which is a looong wait, we thought we would play around with the Crazyflie outside now when spring has finally reached the south of Sweden. The drawback with a quadcopter this small is that it doesn’t work that well when it is windy outside but the upside is that it is pretty durable which makes great for some crazy testing :-). This Monday it was very calm outside and we got the idea to throw it in the air and try to make a “throwing start”. From the beginning we thought, no way, but it actually worked better then we thought. Here are some of the clips of  the more successful attempts :-)

We also bought one of these very popular key chain spy cameras to try and get some on-board action footage. We removed the electronics from the casing, removed the battery and connected it to our battery instead. We even removed the mini-USB connector to save weight. It all ended up in about 25g including the Crazyflie which is OK. Now it is really starting to look as an insect of some sort…

Frame from onboard video footage

We managed to take a short on-board video but the camera doesn’t handle the battery voltage drop and resets pretty easily as soon as you hit the thrust. Maybe it is possible to power it from our stable 2.8V instead because now it is pretty useless. Also the view-angle is to narrow as well as the framerate being too low to get any good footage. We seem to have gotten the 808 #14 model which isn’t supposed to be the best. At least the Crazyflie is looking pretty mean with it attached :-). Further investigations will be done when we have some time left over.

We are still working hard on the Crazyflie code while we are waiting for the new prototypes. We are also working on finalizing the Crazyradio, the radio dongle we are making to communicate with Crazyflie.

In order for us to test the radio hardware performance we brought a RFExplorer:

The radio chip (nRF24U1) is put in continuous carrier mode, which makes it emit constantly at a single frequency. Below is a screenshot of the measured frequency and power from the radio dongle:

This measurement is not that useful as an absolute value (for one we do not have a RF test chamber) but it will give us the opportunity to compare the next prototype with this one. Our next radio prototype uses smaller SMD component for the RF parts which is supposed to give better performance. We already compared it with another dev board and our radio seems to have similar performance :).

We wish we had something interesting to write about, but recently we have just been cleaning up and reorganizing the Crazyflie firmware. We are doing this so it would be simpler to further develop the software when it is released. We have also been preparing the new drivers for the digital sensors so they will be ready when the next version of prototypes arrives within the next two weeks.

One funny thing we have though is this little teaser video we put together while testing the speed of the Crazyflie. It is not recommended crashing into something hard at this speed 8O

While waiting for our next round of prototypes we are continuing the work on the software. As we feel that the copter is now stable enough for release we are concentrating on making the software easier to use and better organized.

We have also run a little profiling test on the Crazyflie firmware to see how much CPU was used by the current stabilisation algorithm. We use FreeRTOS and added some functionality to log all the task transitions.  The first result was quite worrying as it seems that we where using about 90% of the avaliable CPU. After further investigation is appeared that the problem came from the fact that we where testing Debug buils. When optimizing for size (-Os of GCC) it brings us back to 70% cpu usage and optimisation for speed (-O3) to 65%:

We are currently running two sensor fusion algorithms in parallel and have a lot of room for improvement for the code efficiency but we believe that would be good enough.

There has also been some work done on the PC GUI, there are now more flight settings and it is easier to use. We are currently adding a Joystick configuration window to be able to add support for new joysticks/gamepads more easily:

Crazyflie GUI: Flight data tab

To begin with, we have just created a Bitcraze Announcement google-group that we will use as a very-low-volume mailing list to make big announcements like the release of Crazyflie. So if you are interested by buying Crazyflie just subscribe to the list and you will receive a mail as soon as it becomes available.

 

As for the project, we are now waiting for the next (and hopefully last) prototype run. In the mean time we are trying to fix everything from the todo-list. One item was to verify that the radio dongle can receive PPM signal from a RC remote, as it was designed for. This is what I  have been working on last week and the result hardware-wise is this kind of hacked programming/RC-training cable attached to our radio dongle:

The idea is to be able to control Crazyflie using a RC transmitter only (without a computer) so that the radio dongle would be powered and controlled by the RC transmitter. This kind of transmitter generates a PPM (Pulse Position Modulated) signal which is acquired from the training jack of our ‘Turnigy 9X’ transmitter. We do not plan to manufacture such cables right now as there are too much kind of RC transmitter around there  and we believe that you will be able to hook the Crazyradio dongle to your transmitter without problem :-).

As the cotper firmware can not fly easily without the PC yet (most of the settings are still sent from the PC software before flight) we decided, as a first step, to use the PC anyway but by using the radio dongle for the PPM acquisition:

A HID USB joystick mode has been added to the radio dongle so that it is now recognized as a joystick by the PC (in addition to the radio endpoints) and transmits the axis position of the RC transmitter to the PC. By mapping the axis the same way a Plastation3 gamepad is mapped we could fly Crazyflie with the RC remote and with an unmodified version of our PC software. This permitted to verify that the radio dongle can acquire PPM signals (with a little hardware change that has been sent just-in-time to our manufacturer for the next prototype) and so Crazyflie will also be able to fly without PC :-). In the case of our radio transmitter however we will have to connect the radio dongle to the TX module port instead of the training jack as the training jack does not provide power.

This is still work in progress and it is unlikely the ‘pc-free’ functionality will be finished before the copter release but at least now we know that the hardware can do it.

The last week we have been working hard on finishing the Crazyflie with the digital sensors, MPU-6050, HMC5883L and MS5611-01BA03. We are not so sure that the magnetometer,  HMC5883L, will work that well due to the strongly magnetized motors just a few centimeters from the sensor. That will be one of the upcoming tasks to find out.

Within 3-4 weeks we will receive what will hopefully be the final prototype version which later can be used for the first batch of Crazyflies. Until then we have plenty of work with software both on the PC side and the firmware. Now it is pretty late, the clock just passed 00:00 and writing at this hour is hard. We will post some video to compensate for this short post later this week :-)

Due to the IDG/ISZ-500 gyros EOL problem we are removing the  IDG/ISZ-500/BMA145 and going for the MPU-6050 instead. We where pretty certain the gyro part of the MPU-6050 would work but not so sure about the accelerometer.

To minimize the risk we wanted to try it out with our design before pushing the order button. We looked around for small IMUs with this chip and found that the FreeIMU uses the sensors that we are interested in testing. So we bought one and attached to the Crazyflie using the expansion connector. Here’s a image of what it looks like:

Since we now free up some space by replacing three sensor ICs with one we added a HMC5883L magnetometer and MS5611 pressure sensor which are the most common IMU sensors right now. If they will be mounted or not in the final version depends on cost and possible performance increase. If we don’t mount them there is always the possibility to do this yourself. Actually, as of this writing, we just made a virgin flight using the MPU-6050 data from the FreeIMU with good results.