This week I worked primarily on increasing the accuracy of localization, as well as the finishing of the tag device. To increase the accuracy of localization, I wrote a gradient descent-based routine for finding the position of the tag given the anchor distances. This was not only more accurate than the linear-algebra-based trilateration we were using before (since it was not as brittle/much more robust to input measurement error), but also more versatile (since it didn’t take exactly 3 distances as input, but rather, as many anchors as we wanted). The other work I did on increasing localization accuracy was to code up a kind of low pass filter for the distance readings. If a new reading was very far away from the previous readings (based on the maximum speed we estimate a person will be walking), we can mark it as an anomaly and not include it in our tracking. As for my work on the tag device, I fully assembled all parts: Raspberry Pi, battery pack, UWB chip, and accelerometer. I also wrote a script for the Raspberry Pi to estimate its orientation using the gyroscope onboard the accelerometer.
My progress is on track, since I was supposed to program the IMU and complete the tag device this week, which I have done.
Next week, I will program the tag device with the same code as the laptop we are currently using to test, so that we can finally use the tag device in a real test. After that, we should be ready for our interim demo, after which I will continue to work with the rest of the team on improvements to our current tracking system, to make it more responsive and accurate.