Servers by jDrones

Crazyflie goes Ardupilot

For a drone swarm project we bought swarming drone Crazyflie drone kit from Bitcraze, and start developing using the Crazyflie eco system. Using the Bitcraze system with LOCO UWB indoor positioning system it flies okay(is).

Not entirely satisfied with the flying characteristics of Crazyflie. We decided to port the Ardupilot flight stack to Crazyflie. There is support for the Crazyflie 2.0 drone within the Ardupilot project. The Crazyflie 2.0 has been discontinued and Bitcraze released the Crazyflie 2.1 which changed the IMU and barometer sensors.

The Crazyflie 2.1 uses the Bosch BMI088 IMU and BMI388 barometer, which is supported by the Ardupilot flight stack. We had to change the hwdef of Crazyflie to include these sensors, and modify the BMI088 driver to use I2C instead of SPI.

Using an ESP with the MavESP8266 firmware for telemetry we were able to fly the Crazyflie through MAVProxy and QGroundControl using a Frsky Taranis over USB.

And it flies :slight_smile: . Had to tune the PID a bit to get it flyable, but it flies. We have the feeling that if flies better, and more stable than the Crazyflie flight software. PID’s could be a bit better, but it flies decent.

Then we had the idea to convert the Crazyflie with brushless motors. We thought that using brushless motors, the flight characteristics should improve due to that brushless motors has more torque and can change motor speed faster than brushed motors. Besides the flight characteristics, the brushless motors should be more durable than brushed motors.

We bought the Sensi Micro V2 drone frame from DroneJunkies with the Eachine Lizard95 1104 6000kv motors and the Eachine Minicube 10A 4-in-1 ESC. The idea was to mount the Crazyflie hardware on the Sensi drone frame.

And it flies… horrible :laughing:. This drone is waaay overpowered and very aggressive. This frame-motor-prop-battery combination is destined for racing drones. Currently still working on the PID’s. And it is either violent oscillations or extremely sluggish. But I just finished this drone the other day, so I am still working on it.

Overall it has been extremely fun developing on the drones and Ardupilot. As a former Linux kernel developer I am extremely content with the structure of Ardupilot and the sources (props to the developers!). Do need to improve my knowledge regarding C++ though. I am a low level HW/SW developer. Learning it on the job!

Further challenges in our development:

  • Porting the Syslink driver (serial communication between Nordic nRF chip and STM) to transport MAVLINK
  • Porting the UWB driver for positioning
  • Realizing a swarming communication telemetry link with 100+ drones
  • Developing our own drone

Thanks all, and we will keep you guys updated!


That is really fantastic. Sounds like you found some issues with the hwdef for the new crazyflie so we’d love to get that in master when you’re ready to create a PR.

Really great work!

1 Like

really nice, thanks! A PR to update the hwdef would be nice. You could include some better default params in the defaults.parm in the hwdef directory so it is flyable without tuning.
Warm welcome to the world of ArduPilot development!

1 Like

Nice work! Love the UWB integration

1 Like

Thanks guys.

I have created a PR:

The only issue I have is that I had to remove the return value check of write_register() for a soft-reset command of the gyro. Somehow this fails when using I2C. Perhaps others have more insight regarding this. I have stated this in the PR as well.

1 Like

These are my PID settings. This should get people airborne (4.0.3). As for the other tuning settings I followed the Excel sheet from xfacta.

1 Like

for a frame like this it is best to put those settings in a defaults.parm in the hwdef directory, so that they get embedded as defaults in the firmware

1 Like

Super cool! To get something like that flyable you’ll most likely have to use the dynamic notch. Keep up the good work :slight_smile:

1 Like
Servers by jDrones