Anish’s Status Report for 04/29

This week we did our final presentation – we all helped Ethan prepare the slide presentation for that. Other than that, I have been working on refinements to the user-interface so that we can easily show people how our system works during the final demo (by visualizing the internals of the sensing and algorithm). The other thing I have been working on is implementing a few of the remaining unit-tests that we still need to run to validate our system against our design requirements.

I feel like we are on schedule; in the next week we will work on the poster, final report, and finish up running the unit-tests (device detection, as well as the integration-test for accuracy).

Team Status Report 04/22

We had a very productive couple of weeks, including finalizing the hardware stack and making it into a small package that can be mounted to the back of a user’s phone so that the user doesn’t need to carry their laptop around the room. We also integrated the components of the system together – the main entry point is a Python program which interfaces with the WebXR platform (streaming data to/from the phone over the network), the device-detection pipeline, the ToF pinging hardware, and the localization algorithm implemented in MATLAB. We got the system integration working where we can walk around a room, and as it collects data points, it runs them through the localization stack to determine and visualize the detected Wi-Fi devices (no manual intervention needed between the steps). The monetary cost of the system still remains within our $150 metric (ESP32, ESP8266, wireless radio, small battery, and USB Wi-Fi card) and it still runs quite well within our expected 5 minute detection time.

We don’t expect any substantial risks going forward as the important parts of our system are all working and integrating successfully. One thing that will be interesting to see is how different devices respond to the same Polite Wifi attack (we’ve already noted that different devices send response packets at different reliability rates, and some Wi-Fi cards go to sleep faster than orders). We’re not expecting this to break anything, but it may require some tuning to force the system to generate more traffic against certain devices to compensate for less accuracy in detecting them.

Anish Status Report 04/22

These past two weeks were extremely productive – I finalized our hardware stack into a small, battery-powered unit (see the pictures in our “Team Status Report 04/22”) that attaches to the back of the user’s phone. The processing stack runs on a laptop, which can be anywhere in the vicinity (the user doesn’t have to carry it around the room when doing the scan); and the laptop connects wirelessly to the rest of the electronics using a 900MHz (ISM band) radio. I refined the firmware for the ESP32 to use this wireless link to talk to a driver (implemented in Python) on the laptop, as well as programming the ESP8266 to send out the pinging packets (hence completing the time-of-flight loop).

I feel like we are very much on schedule as our integration-testing all works – we can walk around a room with the sensor for ~4 minutes, and see in the AR view that the Wi-Fi devices are located to within the 1m accuracy. There are a few points left to be refined during the next week, including nicer visualization (both on the laptop and in the AR space) and making the device detection run fully asynchronously and feed into the rest of the stack, and after that it’s just working on our report and unit-tests.

Anish’s Status Update 04/08

This week I made substantial progress on the system integration. I ported the pinging-initiator code to run on an ESP8266, and added an interface to configure and pull data from the ESP32+ESP8266 combo, over the UART, in real-time (the need for two microcontrollers comes from the inability to precisely timestamp outgoing packets, so we must send packets from one microcontroller and timestamp both the request and the response on the other). I’ve tested this against the rest of the system (by generating CSV files and piping them into the MATLAB pipeline) and it works quite well in terms of efficiency and reliability.

My next step is to finish integrating it with the rest of the stack by completing the wireless interface (which means the computer running the system doesn’t need to be carried around with the user while they are doing their scan) and writing the Python interface to allow integrating it with the device-detection and localization code. I’m a little worried about wireless reliability with the XBee radio I’m currently using, but there should be a way to make it work with a proper handshaking interface. As such, I feel like we are pretty on-schedule although will need to do substantial testing and debugging-integration in the next two weeks to get everything working.

The testing we need to do once everything is working is to walk around in a room and collect data; and then take various subsets of this data (to test for different timescales and movement patterns) and determine the accuracy of locating the different devices. This, combined with some unit-testing of the self-localization and visualization accuracy, should allow us to quantifiably verify our use-case requirements and metrics.

 

 

Anish Status Report for 04/01

Over the past week I worked on fixing some bugs in the ESP32 code and using it to start collecting data traces to test our algorithms with. It works better than expected; after filtering outliers and doing smoothing, the results are pretty consistent with what they should look like (at least over a several-meter range). We’re still trying to get it working on short ranges as well. There are no major roadblocks that I see blocking us going forward. I also started taking data measurements with the Yagi directional antenna to see if that data can be useful to our final algorithm or if the ToF data is sufficient.

In the next week I’m hoping to work on the end-user interface and figure out how we’ll actually stream the results out of our algorithm and display it to the user.

Anish’s Status Report 3/25

This week I was attempting to figure out how to get PicoScenes to detect the NULL/ACK packets from our pinging attack in order to use it for measuring the time-of-flight to maximum possible accuracy. I was not able to make much progress on this because I kept running into some other issues with PicoScenes where it would crash randomly and sometimes crash my other network interfaces with it (I was initially using a wired connection to SSH into the machine with PicoScenes); I’m still trying to fix this (possibly related to other configuration on the computer; restarting seems to help but the problem does sometimes come back).

I did clean up the ESP32 code a little bit, which, while not the best (very noisy data), is an option to at least start testing full system integration. It’s still unclear whether there’s a more effective way to handle dealing with multipath on the results from the ESP32.

I am slightly behind schedule which I hope to rectify in the next week by spending more time debugging and make a final decision on whether PicoScenes will work, or if we need to rely fully on Scapy + ESP32 for everything. There is also the open question of whether the directional antenna will buy us any more useful data. Next steps after that is to start prototyping the user-interface where we will actually show the results to the user.

 

Anish’s Status Report for 03/18

I reached out to the PicoScenes developers and was able to get a donated PicoScenes license (which avoids us having to deal with the issues of the ESP32). The high-precision clock sampling seemsĀ  to work and I’m able to read the relevant packet metadata from Python; however it is limited to 40mhz clock speed (because we are on 2.4ghz which has limited width bands). It also does not detect our ping packets for some reason (possibly due to them being malformed packets).

Next week I’ll be working on figuring out how to work around these two issues (the packet issue would likely be by formatting the packets to have additional fields so PicoScenes parses them correctly, but I’m still unsure how to deal with the 40mhz limitation); that should bring us to a point where we can collect data to test our algorithms against.

Anish’s Status Report for 03/11

A significant chunk of time in the past week went into writing up the design review report and documenting our plans for the project. Because of limitations on timestamp capturing in PicoScenes that I don’t think we’ll be able to work around, I started looking into how we can use an ESP32 microcontroller to get similarly-precise timestamps, like is done in the Wi-Peep paper. I wrote some code to run the ESP32 in monitor-mode and take timestamps when the interrupt is received. I took some test measurements and noted it was significantly noisier than the Wi-Peep paper’s results; it also seems to vary quite a bit with changes to the optimization and driver settings for the ESP. Next week I will be looking further into if there are any more build-time settings that can be changed or other ways to improve the measurement quality.

Anish’s Status Report for 2/25

I had a lower time availability this week due to other project deadlines and midterm exams but I still made some progress. I gave the design review presentation on Wednesday and looked closely into the feedback from that (as well as the proposal presentation) that was provided to us later in the week. I took some measurement traces with the directional antenna to validate that it does indeed roughly match the expected radiation pattern (noting that it does not actually work directionally on 5GHz; only on 2.4, as expected). I also investigated how to capture precise timestamps from the WiFi card – we found that the PicoScenes library has some restrictions on timestamp capturing which we may need to work around to do ToF-quality measurements.

Although doing tasks slightly out-of-order, I feel generally on-track in terms of progress relative to the schedule. Next week I hope to figure out how to capture timestamps accurately and with low jitter, as well as start prototyping the AR self-localization aspect so that we can use it to take realistic data traces once the Polite WiFi implementation is complete.

Team Status Report for 2/18

We spent some time this week reviewing the feedback from our project proposal and ensuring that our project scope was well-defined, including constraining our use-case to static devices in an indoors environment, but also adding the requirement that we be able to distinguish multiple devices physically close to each other. These are already requirements that we had in mind, so the main change is just documenting them properly. As a result, there are no added costs or schedule changes.

We were able to test the CSI data produced by the AX200 wifi card using PicoScenes, and saw that moving the device around / moving ourselves in front of the antenna would affect the measured signal-strength and phase data; so we know that we are able to get meaningful measurements. We also verified that we are able to get individual signal-strength data from each antenna, which is useful for verifying

The main risk we are worried about is whether the fidelity of our data (in terms of noise and quantization) will be high enough to get the level of accuracy we want. Our contingency is based on the fact that we have a variety of different measurements which we are fusing together, so we’re expecting that with all the data combined, we’ll be able to get sufficient accuracy and meet our 1m requirement.

The main principles of engineering we’ve been using so far include electromagnetism and RF (in terms of choosing antennas and the considerations of multipath propagation); signal processing (interpreting the data we get from the wifi card, phase-difference-of-arrival, etc.); and some probability/statistics (in implementing the filtering algorithm to deal with noise in our measurements).

Below image shows our current experiments using an open-source dataset (“Intel Open Wi-Fi RTT Dataset“) of time-of-flight data between client devices and access-points, and attempting to find the location of the APs using this data.