Page 1 of 1

Multiple radio with one Crazyflie (Radio Redundancy)

Posted: Thu Jan 09, 2020 7:25 pm
by b1t_user
Dear All,

Searching in the forum, or on the internet, I found a lot of posts about connecting multiple vehicles using one radio.
In my case, I would be interested in having multiple radio connected to the same vehicle to achieve communication/control redundancy.

The idea is that there could be different control nodes connected to the vehicle, but only one is providing commands. In case of failure of that node, there would be still at least another connection active which could take over immediately.

Before starting to dig inside the code of the crtp, radio driver, commander and making attempts, is there anyone who could give me some references to look into? Just to speed up and avoid loosing time wandering in wrong directions.

Thank you very much for the time,


Re: Multiple radio with one Crazyflie (Radio Redundancy)

Posted: Fri Jan 10, 2020 10:35 am
by arnaud
There has been no work done in that field as far as I know.

There is a fundamental design decision in CRTP you must be aware of: CRTP has been designed to have one and only one client connected to the Crazyflie at any time. Some ports, like the low level commander/setpoints, are stateless and will not care about receiving packets from multiple client. Others like the log subsytem have a state that must be synchronized between the client and the Crazyflie.

The exact implementation depends a lot of your failure modes. Can you trust that one controller is always alive or do you have a fully distributed system where any node can die at any time.

The easiest I can think about is to have a control system that is always alive and nodes that only handles radio communication. In that case you could implement a radio transport for CRTP to the nodes and handle the failover in the controller. In the crazyflie lib, there is a driver layer to implement the CRTP link: ... cflib/crtp. One quick implementation would be to implement a ZMQ driver using REQ/REP socket and having a python script on your nodes implementing the radio transmit/receive, basically implemening the low level of the radiodriver remotely. ZMQ REQ/REP will handle round-robin and failover automatically.

For a fully disctributed system, the exact implementation will depend a lot of your exact use-case. You might have to either implement custom code in the Crazyflie to handle the failover and state sharing, or implement a distributed version of the client.

Re: Multiple radio with one Crazyflie (Radio Redundancy)

Posted: Sat Jan 11, 2020 11:21 pm
by b1t_user
Dear arnaud,

Thank you very much for your reply.
I will proceed step by step. I need to get through the details of the communication, since, up to know, I gave part of it for granted.
I will start looking at the reference you gave me to play with the radios. Thank you for the tip regarding the implementation idea: this will save me a lot of time in looking around.
Once I am comfortable with the communication part, and I am conscious of what I can achieve with the hardware, I will move on the control problem.

I will keep you informed if I get somewhere.