Author: Marcus

It’s been a while since we summed up things happening in the community so here’s some of the things that are happening. There’s lots of more things, so if you think we are missing something, then post it in the comments below.

Ralph has been doing some work on an semi-automatic flip feature in the client. There’s more info on the forum and video below.

Last week we tested some modifications made by otto for a headfree mode (i.e yaw only rotates the platform, not the referance direction). It’s a really nice feeling just rotating without taking care of the direction you are going in :-) There’s more information and links to code on the forum.

The SHERPA project have been working on swarm algorithms using a vision system and the Crazyflie.

Geof from Centeye have been working on optical flow stabilization using the Crazyflie. He has a prototype board working and there’s lots of information in the forum about this build. To see the results have a look at the video below.

Thanks to Victor the Deviation firmware for Devo-7e (custom firmware for Devo RC-controllers) now has support for the Crazyflie (needs hardware hack). If you would like to give it a try have a look at the code or grab one of the nightlies.

Researchers at the University of Tokyo have been testing a new concept for a HoverBall using the Crazyflie. Imagine throwing a ball into the air that doesn’t come down (well not right away at least..). Here’s some more info and a picture.

We have also seen some nice stand alone controllers for the Crazyflie, one by  MidLifeCrisis (more info here) and one by ivandevel (video below) . There’s also more info in the forum.

There also some updates on the work done by Oliver on the Kinect tracking of the Crazyflie. A demo video is shown below (it looks great!) and there’s more information on the forum.

And finally here’s a nice video we found on Youtube showing position control of the Crazyflie using a VICON system.

Continuing our post last week here’s a video showing the Adafruit NeoPixel ring and some of the effects that we did. The client code still needs some cleaning up, but the firmware is pushed here.

The firmware implementation includes two parameters, ring.neffect and ring.effect. The first parameter is used to know how many effects are implemented and the second one is used to set the index of the effect that should be used. For our current implementation we just loop though all the effects with either a joystick button or using the thumb together with the Leap Motion. It’s also possible to use these parameters directly from the UI as seen in this blog post.

Params for NeoPixel

 

Some of the effects we implemented are just blinking patterns, but we also wanted the ability to show feedback from the firmware using the ring. This has been enabled by adding an API in the firmware to access variables exposed though the logging framework. Using this API the firmware can access the same variables in the logging as the client. This enables all kinds of fun possibilities. In the video you can see (blurred) our implementation showing which direction the Crazyflie is tilting, but we have also been working on showing thrust (think rocket :-) ) as well as other things. We have done our best to implement a couple of effects, but there is so much more cool effects that could be done. So the firmware allows for custom effects and also for mixing multiple effects together (see this code).

This week we are heading off to Paris in France to present our project at Devoxx France. So if you are there and want to listen, then drop by the Ella Fitzgerald room at 10:40. The presentation will be in french and it will of course end with some demos :-) We will also hang around after the presentation just in case someone wants to test their flying skills. We are currently working on some nice light-effects using the Adafruit Neo Pixel ring that we will show off.

Also the Crazyflie is finally back in stock at Seeedstudio!

A while ago we posted a tutorial on how to modify the firmware to add logging/parameters and to plot/modify them from the client. We have done a continuation on this tutorial to show how to modify the client to integrate logging and parameters directly into the UI (like we have done on the flight tab). For the tutorial we use our virtual machine to do the development and running the code. Since we continue on the concepts and design made in the first video, it might be a good idea to see that one first.

 

A couple of weeks ago we moved into the Malmö based business incubator Minc. It’s a great chance to get some extra help developing Bitcraze and also to get a chance to meet people from other start-ups. Below is a picture of a bunch of Crazyflies in our lab (i.e the table designated lab).

Bitcraze Lab

On a more technical note, here’s a video of a blimp that was hacked together with some left over party-balloons and a broken Crazyflie that we had lying around. It’s the day after the party, so there wasn’t that much lift left in the balloons (that’s why we have a bunch of them). After a few hacks to the firmware it actually works pretty well! The motors power has been redistributed and only the Yaw regulation is active, which explains that the yaw is still pretty stable, we are thinking about pushing the ‘blimp-mode’ at some point (first we will need more balloons and Helium though :) ).

We have released version 0.5 of the Bitcraze Virtual Machine and version 0.3 of the Raspberry Pi image.

Here are some of the changes for Bitcraze VM 0.5:

  • Upgraded all Ubuntu Packages
  • Installed custom build of KDE Marble with Python bindings
  • Installed PyQtGraph
  • Installed Oracle Java JRE (needed for PyCharm)
  • Installed PyCharm Community Edition 3.1
  • Installed KiCad from repo (using build script, but excluding documentation) to add support for all of our projects in their new format
  • Installed EmbSys RegViewer plugin for Eclipse
  • Replace old BitBucket repos with new GitHub repos and updated the “Update all repos” script
  • Decreased image size (Even with all the new stuff this new version is smaller than the previous)

The full Bitcraze VM 0.5 changelog is available here and the files are available as direct download or as torrent.

Here are some of the changes for the Raspberry Pi image 0.3:

  • Moved configuration files in the fat partition: It is now possible to configure radio link and inputdevice mapping easily from windows/linux/mac. See crazyflie folder.
  • Upgraded all packages
  • Replace old BitBucket repos with new GitHub repos and updated to the latest versions
  • Updated the README.txt with information on how to flash the Crazyflie/Crazyradio from the Raspberry Pi
  • Image size increased from 2GB to 4GB

The full Raspberry Pi image 0.3 changelog is available here and the files is available as direct download or as torrent.

 

Finally after some issues and lots of interruptions we made the move to GitHub. We will keep the BitBucket repos (but as read-only) since there’s lots of inbound links for code and issues.

If you are interested in doing the same move here’s what we did.

Create the reposiory on GitHub, then pull in Mercurial project from BitBucket into a local git repos using git-remote-hg:

git clone hg::https://bitbucket.org/bitcraze/crazyflie-firmware

The new github repos can then be added to the local git. Tags and branches can then be pushed to github. As Mercurial and Git have very different way to handle branches you will have to chose which branch to push and push them manually (we did not find any way to push all at once and we did not want to push all the branches anyway…):

cd crazyflie-firmware
git remote add github git@github.com:bitcraze/crazyflie-firmware.git
git push github master
#Pushing tags
git push --tags github
# Tracking and pushing all interesting branches
git branch --track 2014.01 origin/branches/2014.01
git push github 2014.01
git branch --track gps_ublox_dev origin/branches/gps_ublox_dev
git push github gps_ublox_dev

 

Copying the issues from BitBucket to GitHub can be done using this script. It takes the source user/repo and destination user/repo as arguments. Keep in mind that GitHub doesn’t have the same metadata as BitBucket does. So there’s a JSON file where you set up the mapping between BitBucket kind/status/priority/component and GitHub labels. In this you can set up zero to multiple labels. If a mapping for components is missing then a label with the same name is used. Milestones on BitBucket is mapped 1:1 to GitHub. The needed labels and milestones will be created as they are used while copying the issues.

If you are copying issues to an organization repository you will have to use a GitHub API token for identification, since you cannot log in using the organization username. Here’s an example for what we did for the Crazyflie python clients:

#Migrating tickets from Bitbucket to Github
python migrate.py -g bitcraze -d crazyflie-clients-python -u bitcraze -s crazyflie-pc-client -k your_api_token_here

Two tips: Create a new user that does the migration (like bitcraze-issue-importer) and make sure that you haven’t created any issues in the target repositories before the migration. If you don’t have any issues before then the number will match and all the references will work out of the box (from commit messages and other issues).

To show the functionality in the logging and parameter frameworks we did a video. It shows how to use the Bitcraze virtual machine to add variables and parameters to the firmware and to flash it using the radio bootloader. It also shows how to visualize the log-data using the plotter and to modify parameters from the client.

While cutting the video we noticed that the temperature goes down when we touch the pressure sensor. Either we are more cold-blooded than we should be or there’s a bug in there somewhere…

Edit: Turns out it not a bug. After some discussions this morning (and testing) we arrived at the conclusion that the measurement was correct. The PCB get’s a bit warm when running/charging and a fingertip isn’t necessarily 37C.

We have started the migration to GitHub, as usual with this kind of things it is not as obvious as we had thought at first. We decided to start with the most active repos which is currently the PC client. In the process it will be renamed crazyflie-clients-python to show that it contains the python libs and it works on more than just PC (ie. raspbery pie at least).

The source code migration is a little challenge due to the very different way Git and Mercurial handle branches. Using git-remote-hg we could pull the mercurial repos in a newly created git repos and then push the interesting branches and tags to github. This seems to work quite well but the last things we would like to have is the possibility to pull changes made in git to mercurial so that we could keep the current mercurial as a read-only mirror. Internally some of us plan to still work with mercurial anyway using hg-git and the great TortoiseHG.

For migrating the issues from BitBucket to GitHub we forked this script to add some functionality. Aside from copying the title/text/comments, we also wanted to map the metadata from BitBucket to labels/milestones on GitHub. So the modified script first creates/sets the correct milestone on GitHub and then creates/sets the labels according to a JSON mapping of BitBucket metadata to GitHub labels. It supports mapping of kind, status, priority and component to zero or more labels. The modified script is available here. While doing tests we discovered that github was sending a mail for every single ticket and comment, a collateral damage was one of our mailbox that got 303 messages in a couple of minutes (the smartphone attached to the mailbox actually played notification tunes for hours…).

ticket-mails

 

 

After a week of fixing things for the Crazyflie firmware/software RC (release candidate) we have now tagged and built the final release 2014.01 of the crazyflie PC client and firmware. Last week we listed the changes, but for the final version we also made improvements for the logging and communication. This mostly effects the connection and downloading of TOCs and parameters, which improves the connection reliability.

Screenshoot_2014.01.0

With this release there are some updates to the Python API for the Crazyflie. In order to more easily keep the examples in sync with the API we have added some basic examples in the example folder in the repository. We will also update the wiki with these changes.

To download the new version the links are: