Friend Compass
A pair of hardware compasses that point to each other using relative RF signal strength and sensor fusion, fostering a sense of presence and connection.
Project Details
I built a pair of "compasses" that point toward each other no matter where they are in a room. While standard GPS tools reduce social connection to Cartesian coordinates on a map, Friend Compass uses relative RF signal strength (RSSI) and sensor fusion to provide a continuous, egocentric bearing toward a partner. It explores how relative directional cues can foster a sense of presence, turning navigation into a warm game of hot-and-cold rather than a cold turn-by-turn instruction.
Inspiration
Please note that this project is heavily inspired by komugiko2000's animation for ZUTOMAYO – Hunch Gray (Music Video). You can watch the YouTube video and understand the inspiration. I highly recommend it!
I actually watched the above video a few years ago and was fascinated by the concept of a compass wristwatch that points to a friend. However, I didn't have the knowledge, resources, or ability at the time for how to even go about building it, and this was my best guess. Here is my sketch from 2022/2023:
...and here is a sketch I made for this project (November 2025):
Overview
Friend Compass is a two-device system: a Seeker device that estimates the direction of a Target device in-room that points back. The goal isn’t perfect localization; it’s a continuous, egocentric cue that feels more like “presence” than “navigation.” At its best, the compass feels like a magnetic pull: you turn your wrist/body and the arrow smoothly reorients toward your friend. At its worst, it reveals the physics of indoor radio: multipath reflections, metal-heavy rooms, bodies blocking 2.4GHz, and jitter that can make a device feel haunted.
Proposal
I propose Friend Compass:
A focused end-to-end pipeline that trades GPS/absolute positioning for a “warm” directional relationship. One device emits a simple RF beacon; the other listens with stereo RF (two Wi-Fi “ears”), compares signal strength, and fuses those deltas with gyro integration to produce a stable arrow. The target device mirrors the seeker’s reported heading by rendering the inverse angle, so both devices “agree” and point to each other.
Design intent: Users don’t experience “RSSI confidence.” They experience behavior. If the arrow jitters, it feels broken. If it moves smoothly, even slightly wrong, it feels like an object with weight and intention.
The Scope Pivot (Hardware)
I started this project with an extremely ambitious "hardware-first" mindset. The original plan was to build a pair of physical wristwatches driven by Femtoduinos, using tiny brushless motors to spin a physical needle. I spent the first week diving into the mechanics of absolute positioning and quickly realized I was spiraling into scope creep. Absolute position motors are surprisingly expensive, and standard DC motors have no idea "where" they are pointing without complex optical encoders. I tried stepper motors, but they are often capped at 180 degrees or require bulky drivers. I considered continuous rotation servos with slip rings, but wondered about mechanical drift, as this was a problem I was seeing even with the stepper motors. Without a closed-loop control system, the physical needle would eventually lose its orientation relative to "North," making it useless.
I realized that while a physical needle is cool, I was solving a mechanical engineering problem instead of the interaction design problem I actually cared about. I pivoted hard. I swapped the idea of Femtoduino back to prototype Raspberry Pi 5 and the physical motor idea back to just a digital display. This allowed me to focus on the actual hard problem: the invisible signal processing. While less "mechanical" than a moving needle, the digital display allowed for rapid iteration on the smoothing algorithms without worrying about the physical inertia or latency of a motor. It shifted the project from "How do I spin this gear?" to "How do I know where my friend is?"
Here is my original pitch:
The Signal Problem (RSSI vs. Reality)
Here are some of the different routes that were tested but ultimately not gone down.
From left to right:
- Pair of servo motors. While stepped variants exist they are often not continuous, and most continuous versions do not have a bearing.
- GPS Breakout. This didn't work at all indoors and when it connected to satellites outside, location was too brittle.
- Rotary encoder. This was just to test rubber band between a servo motor and the encoder. Interesting concept but bad execution.
The core technical challenge was calculating direction using Wi-Fi signals. My initial instinct was to use a GPS module on the Pi. I thought, "Satellites know where everything is, right?" I was wrong. The GPS modules were incredibly brittle, failing completely indoors (where most social interaction happens) and requiring a clear view of the sky to get even a 10-meter accuracy radius. For a "room-scale" interaction, 10 meters of error is useless, you could be in the kitchen while the compass says you’re outside.
So, I looked at what was already in the air: Wi-Fi. I shifted to using RSSI (Received Signal Strength Indicator) over a shared Wi-Fi network to estimate proximity and direction. I hypothesized that I could triangulate position based on signal strength (I did my undergraduate degree in Mathematics and Bellman's Lost in a Forest navigation problem was by far my favorite, but that is more geometric than this). The "Moment of Truth" came when I set up the two Pis on opposite ends of my apartment. I wrote a script to make the "Seeker" Pi scan for the "Target" Pi's unique beacon packets. I watched the console logs: RSSI: -45dBm, RSSI: -60dBm. It was working! The numbers moved as I moved. But they were pretty messy.
Here is a diagram of the pivoted architecture, moving from raw hardware to a sensor-fusion software approach:
However, seeing numbers on a console screen and getting an arrow to point at a person turned out to be two completely different realities. The gap between "I have data" and "I have a compass" was massive and filled with physics problems I hadn't anticipated. When I first hooked the RSSI data directly to the visual arrow, the result was a catastrophe. The arrow didn't point at my friend; it seized violently, vibrating back and forth across 180 degrees, or spinning in circles even when both devices were sitting perfectly still on a table.
I discovered that indoor environments are essentially "Halls of Mirrors" for radio waves. This is called Multipath Interference: signals bouncing off walls, floors, and metal desks, creating noise that makes a static device look like it's teleporting. Even a hand covering the antenna can drop the signal strength significantly, throwing off the calculation. The signal from my friend's device wasn't just coming in a straight line; it was bouncing off nearly everything around it. Sometimes a reflected signal was stronger than the direct line-of-sight signal because the direct path was blocked by my own body (maybe since humans are mostly water, and water blocks 2.4GHz waves effectively?). The compass would confidently point at a metal cabinet because that's where the strongest reflection was coming from. I first tried to solve this with machine learning regression, feeding it raw data to "learn" the room, but the environment was too dynamic. Moving a chair or opening a door changed the RF landscape completely.
The breakthrough came when I realized I couldn't rely on RF alone for direction. I needed to know what the device itself was doing. If the signal strength dropped, did my friend run away, or did I just turn my body? To answer this, I integrated an IMU (Inertial Measurement Unit) but I discovered it didn't have a magnetometer (compass chip), only a Gyroscope and Accelerometer. This meant the device had absolutely no idea where "North" was. It was blind to the world, only knowing how fast it was spinning. However, this was useful for the compass to know if we were "turning our body" and essentially could ensure that rotating the device keeps the needle still pointing in the same consistent direction with the IMU readings.
Since we could solve rotating in place, the biggest thing left was accuracy of the needle. Multipath interference was the boss of all bosses, to which I was stumped. Thankfully, real life comes to save us sometimes. Reggie Fils-Aimé visited our campus the next day and reminded me that the Wii existed, and specifically Wii Sports Resort and the Wii Balance Board. I remembered something that every person who owned a Wii went through, and wondered if it could be applied to my own setting: custom calibration the very first time you set it up.
So I implemented a "Calibration" startup sequence. When we start using our compass, the user spins around their friend in a slow 360-degree circle. The system maps the RSSI strength and how it changes in that dynamic environment. It identifies the angle where the signal was strongest (the "Peak") and defines that virtual angle as "Friend." From that moment on, the system relies entirely on a calibrated environment that is custom to the person, and not some generic model from a completely different environment. This smoothed the experience drastically. While RSSI and multipath interference were still issues, they were noticeably less apparent: the needle stopped jumping to reflections because it was anchored to that initial calibration scan. It wasn't perfect, since there was no magnetometer to correct it, and sometimes gyro drift would eventually creep in, but it transformed the device from a broken random number generator into something that felt stable, heavy, and intentional.
Here is what the device looked like with needle pointing in direction of a friend:
Interaction
Observations
Despite the brittleness of the underlying signal, the interaction feels magical when it works. In a confined, open environment (like a large living room or lab without heavy metal interference), the compass can usually reliably point toward the partner device, with some drift/interference (it is impossible to get rid of all interference with Wi-Fi).
In an open room without too many obstacles, when you turn the device and the arrow spins to lock onto your friend, it feels genuinely alive. It feels like a magnetic pull. Users immediately understood the "game" of it without explanation.
However, the system falls apart in predictable, physics-based ways. Even with the smoothing, Multipath Interference is a persistent enemy. In the Maker Lab, which is full of metal desks and equipment, the signal would sometimes bounce so hard that the "Peak" during calibration was actually a reflection off a wall, leading the user confidently in the wrong direction. I also found that the human body is a giant blocker; simply holding the device close to your chest (or enclosing the Wi-Fi sensors with your hands) could drop the signal strength by 10dBm, making the compass think your friend just sprinted 20 feet away.
Users
Thinking like a user, I realized that "accuracy" matters a bit less than "responsiveness." If the needle jumps around wildly (which raw RSSI data does), the user thinks the device is broken. If the needle moves smoothly but is slightly wrong, the user thinks they are reading it wrong or that it's "calibrating" (or like some users pointed out, were convinced that it was accurate and justified reasons for the needle's direction). I leaned into this.
I implemented a heavy filter that trusts the Gyroscope for short-term rotation and ignores sudden, impossible jumps in RSSI signal. This makes the needle feel heavy and intentional, rather than jittery and digital. Users described this as feeling more like a "magnetic" compass, which was exactly the socio-affective vibe I wanted.
The "Pirates of the Caribbean" effect is real. Users noted that because the device is "alive" (constantly updating), their brains do a lot of the work. If the needle points generally in the right direction, the user feels a connection. The smoothing algorithms helped here immensely; by damping the rotation, the compass feels like it has weight and inertia, making it feel less like a glitchy computer and more like a physical object.
Here are some top-down photos of the compass:
Here is a video of the compass when it is navigating towards its friend:
Here is a video of the compass when it is near its friend:
I realized that the interaction worked best when I treated it as "Calm Technology." It shouldn't scream at you. It should just be.
The pivot from hardware mechanics to software signal processing was the project's defining victory. Moving away from the complexity of physical motors allowed the "vibe" of the interaction to take center stage. Even when the compass was technically inaccurate, sometimes pointing 15 degrees off target, users didn't care. They naturally corrected their path, treating the interaction like a game of "Hot and Cold." The visual feedback of the needle rotating smoothly, driven by the Gyro, masked the noisy data underneath and made the device feel high-quality rather than glitchy.
However, the limitations of the sensors were stark. RSSI proved incredibly sensitive to the environment and barely usable for precision, while the initial GPS idea failed completely indoors. The lack of a magnetometer meant the device suffered from gyroscope drift; if used for more than 10 minutes without re-calibration, "North" would slowly drift, causing the arrow to lose accuracy. Despite these flaws, the biggest lesson was that filtering creates reality. While the raw data suggested the friend was teleporting around the room, the filter insisted they were standing still, and users believed the filter. To feel "smart," the device didn't need perfect sensors: it just needed a model of the world that rejected impossible data. I also found that calibration could be a feature rather than a bug; the ritual of spinning to calibrate built trust, making the user an active participant in the sensing loop.
For a second iteration, the first change would be the radio. LoRaWAN is the answer, as Wi-Fi is designed for high bandwidth rather than ranging. LoRa modules like the SX1280 offer Time-of-Flight (ToF) capabilities, which measure signal travel time for infinitely better accuracy than signal loudness. I would also integrate haptics to create a "Tell-Tale Heart" effect, where the watch pulses like a heartbeat as you get closer to your friend, enabling eyes-free navigation. Finally, a 9-axis IMU with a working magnetometer is a strict requirement to eliminate the "time limit" caused by gyro drift.
Here is a longer format video of the Friend Compass in action, showing the "seeking" behavior and its spin interaction on finding the friend.
Discussion
| Person | Viewpoint |
|---|---|
| Sebastian Bidigain | Thinks the concept is fantastic. He revealed he had a similar idea for a "festival wristband" using LoRaWAN and LED rings. He was impressed I managed to get a prototype working with just Wi-Fi RF, noting that existing commercial solutions (like Totem Compass) usually require extremely close range. He validated that moving to LoRa is the "smart way to go" for the future. |
| Bil de Leon | Jokingly called it "the future." He compared it to the compass in Pirates of the Caribbean that points to "what you desire most." He was skeptical of the accuracy, wondering if the "placebo effect" made him believe the needle was more accurate than it was, but admitted the smooth rotation made it feel convincing. |
| Anonymous | Found the interaction "playful." She noted that unlike a map, which demands your full attention, this device allows you to look around the room. She liked that it didn't give a distance number (ex. "10 meters"), but rather a feeling of direction, which felt more human. |
The Friend Compass suggests that navigation is not about certainty, but about relation. It replaces the absolute authority of a map with a relative tug, locating a friend not as a coordinate, but as a direction felt in the wrist and shoulders. By moving the interface off the screen and into the physical world, the device transforms "finding" from a logic puzzle into an act of orientation. It offers a persistent "that way" that you negotiate with your own motion, turning the room into a field of invitations rather than a grid of metrics.
Under the hood, the project reveals that direction is a story we agree to believe. Because the indoor RF environment is a chaotic "hall of mirrors," the interface must choose which world to narrate. Here, signal processing becomes a form of authorship: deciding which fluctuations count as presence, which are merely rumor, and how much uncertainty to let leak into the needle. The smooth movement of the display is not a raw measurement of the world, but an edit of it, curated to make the interaction legible enough to trust.
Ultimately, the device acts as a primitive instrument for a new kind of social physics. As sensing dissolves into the ambient environment, the goal shifts from precision to attunement. Friend Compass proposes a future where coherence emerges without screens, where distance is felt rather than calculated, and where proximity becomes a shared, negotiable state instead of a statistic you possess.
Special Thanks
Special thanks to Sebastian Bidigain for the critical feedback on RF protocols and the wristband concept validation, and Bil de Leon for the user experience testing and "Pirates" comparison. Thanks to the Maker Lab staff for letting me run around the room endlessly to test signal drops. Also, special thanks to Albert Han, Hauke Sandhaus, and Wendy Ju for their support, none of this would be possible without their encouragement and mentorship.