These past few weeks my role has been to add networking/communication to CoLo-PE (CoLo Physical Experiments). Previously when evaluating the performance of a localization algorithm, CoLo would infer the connection strength between each of the robots from the relative distance between each of them (i.e. the farther away any two robots are, the poorer the connection strength).
To collect real world data, we have several networking options. To choose the best option, I compared the capabilities of Bluetooth, Wifi (direct), and a 915MHz Radio module from Adafruit.
Bluetooth | WiFi Direct | ~900MHz Radio | |
---|---|---|---|
TX Power | Only Class 1 Devices | Adjustable | Adjustable |
Topology | Arbitrary | 1-to-1 or 1-to-many | Broadcast (N/A) |
Metrics | - RSSI (defined per device) - # of dropped messages |
- RSSI (IEEE 802.11k) - # of dropped messages |
- RSSI (defined per device) - # dropped messages - Message integrity |
WiFi offers many advantages from the IEEE 802.11 standard that defines it. Unlike Bluetooth, the RSSI/RCPI (received channel power indicator) is enforced by the 802.11k-2008 addtion to the standard. This makes signal strength assessment standard regardless of what devices we use. Furthermore, WiFi devices can also adjust their TX (transmit) power from software. However, creating a complete network graph with WiFi direct is impossible due to its limitation to either a single 1-to-1 connection or 1-to-many connection. The only way to connect every robot to every other robot is to cycle through different connections. The added complexity of this logic plus the time it takes to reestablish a connection makes WiFi direct impractical for our purposes.
The 915MHz radio module covers nearly all of our requirements and is relatively simple to use compared to Bluetooth or WiFi since there is no concept of pairing or maintaining connections between radios. These radios can either broadcast raw signals or if we choose to, apply error correction and retransmit messages. The former option in particular can be used as raw data to evaluate the connection quality. These radios also provide an RSSI value similar to Bluetooth or WiFi.
The main issue with using these radio modules is that they are external devices to the rest of the robot. One of the goals of the CoLo PE project is to create a common metric by which we evaluate the cost of different parts of a localization algorithm. To this end, we use CPU usage as a proxy for the power consumption of different processes such as gathering odometry updates or detecting ArUco markers.
This leads us back to Bluetooth which despite its shortcomings, remains the option that best fulfills our requirements at the moment. Since it is already built into the compute sticks and laptops that we use for the robots, we can sample the CPU usage of sending/receiving messages in the same way as we sample other processes. Furthermore, the issue of the RSSI value not being a well-defined part of the standard can be avoided by using the same platform for all of our robots.