We are currently working on a local positioning system based on ultra wide band decawave DWM1000 modules for the Crazyflie. We have already written a couple of times about it earlier, and in this post I will describe where we are now. We will also start making a wiki page and add more about the experimentation in the future.
During the end of year 2015, we have made some progress! We just moved to a new office and we now have a local positioning lab in the basement, where we are able to fly a Crazyflie 2.0 autonomously using the local positioning and keeping clear from the walls (I would like to say to keep a stable position, but we are not there yet :-).
As we have shown in previous posts we have electronic boards for the anchors, and the Crazyflie deck:
We have setup 6 anchors at our office. The configuration is designed to maximize the trilateration precision in the middle of the room. The ranging is done by the crazyflie and then communicated to the ground using the log subsytem. The ROS crazyflie driver receives the ranging and send it to the trilateration algorithm, a particle filter. We can then display the estimated position and use the position to control the Crazyflie position:
In order to try to fly autonomously, we have been trying the controller included with the Crazyflie ros driver. We also connected ROS via ZMQ to our python client and the controller we made to fly autonomously with the Kinect. Both work but are far from perfect: they have been tuned for a pretty stable measurement (from a Vicon system or a Kinect) and the output of the particle filter is a bit noisy, mostly for the altitude. We are looking at improving the position control loop and adding sensor fusion for positioning in the Crazyflie 2.0.
Early 2016 will be time to finalize the DWM1000-based local positioning system to be able to distribute it. We are currently writing an open-source C driver for the DW1000 chip and we are finalizing the anchors electronic design. If you are interested in getting such system do not hesitate to contact us, as we are finalizing the design, any input is interesting so that we end up with a system that is easy to use and to setup.
16 comments on “Crazyflie autonomous with DWM1000-based local positioning system”
Did you get my former message ? It was :
1-Will this positionning system be useful outdoor ?
2-Will it been stable enough to get correct pics ?
Hi, I am not sure we got your former message, sorry.
It will work outdoor, the dwm1000 should have a range of about 100 to 200 meters. In absolute positioning, it should be more precise than GPS at a cost of additional infrastructure. Otherwise we are currently finalizing the GPS deck.
I am not sure to understand the question. With both GPS and this location system the stability will mainly be due to the internal sensor fusion (fusing accelerometer/gyro with the position). I guess we will eventually end up having similar stability with GPS and the dwm positioning system.
This is outstanding! Sign me up!
I want to develop a likely system. can I get the such system?
We are not distributing it yet. If you already have a use case in mind please drop us a mail. We can use all input right now to finalize the design.
I would be interested in learning more about the DW1000 driver and hardware you are working on.
I am basically porting the Arduino driver (https://github.com/thotro/arduino-dw1000) to C. So far I have most of the code converted but it is not working yet. I am still fighting with it …
If anyone is interested to help I can push my current state on github.
Hey I wish to know more about this project. I am currently working on using an arduino controller to send commands to crazyflie to adjust its position in an indoor GPS environment created using optitrack cameras. I am struggling with implementing ESB protocol using arduino.
Hi, Sounds like a cool project. Though if you have an optitrack system why use an Arduino? I guess you have a PC connected to the system so your could use Crazyradio and either the python client or the ros Crazyflie driver.
Otherwise all you need to send the copter is the commander packet to control it. You can find the format of this packet on our wiki as well as the ESB configuration we use: https://wiki.bitcraze.io/doc:crazyflie:crtp:index and https://wiki.bitcraze.io/doc:crazyradio:usb:index#radio_configuration
I’m working on it also.
Can you push your code in github.
I’ll help you.
My senior design team at Auburn University is looking at using the crazyflie platform for our project. We are a group of six electrical and computer engineers. We were wondering if we could help out with this project or another side project that you guys at bitcraze would like to delegate, pending approval from our department of course? Let me know if you are interested.
Hi, Thanks for the offer and sorry for the late answer!
There is a lot of things going on with the LPS (like getting TDoA to work). If you are having some project with Crazyflie/LPS do not hesitate to share some details on the forum and maybe we can find some synergy :-).
Hi, Can you tell me what platform you have attached the dmw1000 to? Is it like the decaWave trek kit?
Hi, we have designed our own board so no, it is not based on the decawave dev kits. You can find more information about the design on our wiki: https://wiki.bitcraze.io/projects:lps:index.
Have you ported dw1000 the Arduino driver (https://github.com/thotro/arduino-dw1000) to C.
Can you push your code in github.
Yes we did and the code is already on github: https://github.com/bitcraze/libdw1000. We are using this lib both in the Crazyflie and in the LPS nodes that have now been released ;-).