Path Planner Robot for Indoor Positioning using RF Ranging GPS
Standard GPS receivers are accurate to roughly 20–50 metres at best, and their signal doesn't reliably reach indoors at all — leaving indoor mobile robots with no usable satellite positioning inside buildings.
This project replaces GPS with a 3-node Ultra-Wideband (UWB) anchor grid, achieving around 10cm positioning accuracy indoors — a large improvement over GPS, in an environment where GPS doesn't function at all. The user sends a target (x, y) coordinate from an Android app; the robot calculates its own position from the UWB grid, plans a path to the target, and drives there — using an onboard magnetometer to correct heading drift along the way and Mecanum wheels for precise, no-wide-turn maneuvering into final position.
How It Works
- Three UWB anchor modules (e.g. DecaWave DWM1000) are fixed at known coordinates around the operating space, forming a reference grid.
- The robot's onboard UWB tag exchanges time-of-flight ranging messages with each of the three anchors; the resulting distances are trilaterated into the robot's real-time (x, y) position, accurate to roughly 10cm.
- The user enters a target coordinate through an Android app, sent to the robot over Bluetooth/Wi-Fi.
- An onboard path-planning routine computes a route from the robot's current UWB-derived position to the target.
- A magnetometer (digital compass) cross-checks and corrects heading drift during travel, since wheel odometry alone accumulates error over a route.
- Mecanum wheels let the robot strafe and rotate precisely to align exactly with the target coordinate without needing a wide turning arc.
Components
Arduino Mega or ESP32 (robot controller)
3x UWB DWM1000 anchor modules (fixed, known coordinates) + 1 mobile UWB tag (on robot)
Magnetometer (HMC5883L / QMC5883L)
4x Mecanum wheels + DC gear motors
Dual motor driver modules (L298N / BTS7960) for 4-wheel independent control
Bluetooth (HC-05) or built-in Wi-Fi (ESP32) for Android app communication
Android app for target-coordinate input
Battery pack + chassis
Applications
- Warehouse and indoor delivery robots
- Hospital equipment/medication transport bots
- Indoor mobile robot and drone navigation research
- GPS-denied environments — basements, tunnels, multi-storey buildings
Advantages
- ~10cm UWB accuracy vs GPS's 20-50m — and works fully indoors, where GPS doesn't reach at all
- App-based target-coordinate input replaces manual driving with a simple destination command
- Magnetometer heading correction keeps the robot on course over longer routes than wheel odometry alone
- Mecanum wheels give precise final positioning without wide turning maneuvers
Sample Code — UWB Trilateration with Magnetometer Heading Correction
// Simplified UWB trilateration + heading correction outline - Arduino
struct Point { float x, y; };
Point anchor1 = {0, 0}, anchor2 = {500, 0}, anchor3 = {250, 500}; // cm, known positions
Point trilaterate(float d1, float d2, float d3) {
float x = (sq(d1) - sq(d2) + sq(anchor2.x)) / (2 * anchor2.x);
float y = (sq(d1) - sq(d3) + sq(anchor3.x) + sq(anchor3.y) - 2*anchor3.x*x) / (2 * anchor3.y);
return {x, y};
}
void loop() {
float d1 = readUWBDistance(1); // DWM1000 ranging exchange per anchor
float d2 = readUWBDistance(2);
float d3 = readUWBDistance(3);
Point pos = trilaterate(d1, d2, d3);
float heading = readMagnetometerHeading(); // corrects drift from wheel odometry
driveTowardWaypoint(pos, heading, targetWaypoint); // Mecanum path-follow + correction
}
Related Research
Hours
Monday - Saturday: 9:00 AM - 5:00 PM
Sunday: Not Working
Location
2nd Floor, Comptron Arcade, Kallattumukku,
Thiruvananthapuram, Kerala 695012