Our team decided to analyze the current COVID-19 testing procedures in our region. Then, we found that residents were spending a disproportionate amount of time waiting in line at local health centers to get tested for COVID-19. Additionally, they barely respected social distancing guidelines due to the regular overcrowdedness of those centers. With those observations in mind, we agreed to come up with Test-on-the-Fly, a drone-based system that local health centers can use to offer COVID-19 tests to residents within minutes from the moment they request it, all that while respecting social distancing guidelines from the comfort of their homes!
What it does
First, the user initiates a COVID-19 test request using Test-on-the-Fly's Android app while making sure that their location is on. Second, the local health center receives the request information, which includes the user's location and username, in its Firestore database. Third, the request information is encoded into a QR code that is sent to a drone holding a COVID-19 test kit, as well as to the user for validation purposes. Fourth, the drone flies to the user's location using a real-time navigation algorithm leveraging GPS and compass modules. Fifth, once the drone arrives at the user's location, it proceeds to land within a safe range; the user will then be able to retrieve the COVID-19 test kit from the drone receptacle and follow instructions to test themselves. Sixth, once the user completes the COVID-19 test procedure, they drop the test sample in the drone receptacle and show the QR code, which was sent to them through the Test-on-the-Fly app, to the drone camera so that we can validate the user's identity. Seventh and finally, the drone flies back to the local health center with the test sample ready for analysis!
How we built it
Test-on-the-Fly is a system made up of multiple components. First, the drone structure was assembled with 3D-printed (test kit receptacle, microcontroller and battery holders) and off-the-shelf components (carbon fiber frame). Then, the drone's flight system included carbon fiber propellers, brushless motors and a STM-type flight controller. For data acquisition and signal processing, GPS and compass modules, as well as a Raspberry Pi 4 board were used; the RPi4 board was in charge of executing the real-time navigation algorithm and then sending the updated flight parameters (yaw, throttle, pitch, roll) to the drone's flight controller. Also, note that a soldering iron was used, among many other instances, to solder the GPS and compass pins to the jumper cables that are connected to the RPi4 board. Second, the Android user app was built entirely using Java (main classes used include the android suite, Zxing and Firebase/Firestore for authentication and data retrieval) , with user information being stored in a Cloud Firestore database. Third, the real-time navigation algorithm was developed with Python. For GPS and compass interfacing, the gpsd, pynmea2 and i2clibraries modules were mainly used; for QR code recognition, we used Open-CV. Then, for PPM communication between the RPi4 board and the flight controller, the pigpio module was imported.
Challenges we ran into
We ran into several challenges! First, we noticed that the real-time navigation algorithm would only generate satisfying results if we were to fly the drone outdoors; this is because the GPS module is inherently less accurate when located indoors. Unfortunately, due to snow being present on most outdoor spaces near our places, we were restricted to fly the drone indoors. Nevertheless, by slowing down the data acquisition rate of the RPi4 board from the GPS and compass modules, we were able to build a navigation algorithm that could adjust to drone drift relatively well. Then, another challenge was that one our teammates was located in Greece during the hackathon; with him being 7 hours ahead of us, this made it hard for our team to have regular video meetings, which slowed down the exchange of thoughts and ideas. Fortunately, we were able to maintain solid team communication using exhaustive code documentation on GitHub and discussions on Messenger. Finally, since the hardware component of our project was quite involved, a part of our team, based in Montreal, therefore had to meet for drone testing purposes; the main tests included communication with the RPi4 board and real-time navigation with GPS and compass modules. Unfortunately, given a 8PM-5AM curfew is currently in effect in our region, we had to be very effective at troubleshooting issues related to configuration, interfacing and so on.
Accomplishments that we're proud of
We are very proud of the Test-on-the-Fly Android app that we developed. Its simple, user-friendly and straightforward layout allows the user to quickly sign up with just a user name and a password, and then request a COVID-19 test after enabling their location. Then, a QR code is displayed on their screen, and they simply have to show it to the drone camera for validation after they prepared their test sample accordingly. Another accomplishment we are proud of is the successful interfacing between the Android app, the RPi4 board and the drone. We initially thought that it would be virtually impossible to make all three components interact smoothly due to the diverse communication protocols governing each component. However, we surprised ourselves since we managed to integrate all three components by extensively consulting documentation on the Internet (tutorials, articles, etc.) and managing our stress adequately as a team. Even though the drone navigation is less accurate than we expected, we think it is still an accomplishment worth mentioning. The final accomplishment, and perhaps the most important one, is the effectiveness and dedication of our team despite unfavorable circumstances. From driving to another teammate's place to pick up a crucial hardware component, to meeting with our teammate in Greece at 3 AM in the morning to discuss essential feature specifications, we took actions which demonstrated everyone's awareness that, regardless of unfavorable circumstances, we could build, step by step, something impressive, innovative and useful for the health system.
What we learned
This hackathon was a great learning experience for all of us! From organizing our project and collaborating from different time zones to learning how to use new sensors and components, frameworks and APIs, we all learned something new. For instance, the Raspberry Pi 4 board was not a technology that most of our team members were familiar with. Indeed, our prior projects were based on Arduino boards, which are simple, high-level electronics prototyping platforms. On the other hand, Raspberry Pi boards have much more dependencies. For instance, to be able to execute Python scripts on the RPi4 board, we had to put the desired files and the Raspberry Pi operating system in a microSD card, and then insert it in the appropriate port on the board. Then, we also learned that the Raspberry Pi 4 signals did not have the same format (10-bit) as those processed by the flight controller (8-bit). Therefore, we wrote an additional Python script to convert 10-bit signals from the RPi4 board to 8-bit signals (throttle, yaw, pitch, roll) that could be recognized by the flight controller.
What's next for Test-on-the-Fly
When weather conditions will be more favorable, we plan on validating the Test-on-the-Fly system in an ideal outdoors setting so that the drone can navigate and arrive at the destination location more accurately. Then, we plan on making this project fully-functional and fully-documented so that local health centers can test it on a small scale to reduce their waiting times for COVID-19 tests. Eventually, we also plan on improving the drone hardware to extend the scope of this system. For instance, residents with mobility problems could use it to fetch household items and delivered packages.