Finding relative location of Raspberry Pi robot indoors

I would like to have a Raspberry Pi robot that can find its location in a room relative to an origin point.

• What methods would be cheapest?
• What would the most accurate be?
• Are there any others that might be in a sweet spot between the two that I should look into?
• have you done any research? .... what is the accuracy of GPS indoors? – jsotola May 10 '18 at 6:16
• Yes, I have done a little research. There is an Adafruit GPS breakout board for around $40. However, its accuracy is not good enough, unfortunately. – Tiskolin May 10 '18 at 15:19 • It may help if you read the Wikipedia article on Indoor Positioning Systems, and narrow down the focus of your question. (HINT: Generally, GPS systems don't work indoors!) – sempaiscuba May 10 '18 at 15:57 • Okay, thanks a bunch! I will look into it. – Tiskolin May 10 '18 at 16:49 • A well calibrated overhead camera with successive image subtraction (for motion detection) might be the easiest, assuming the camera can view the robot’s entire traversable space w/o occlusions and that you have a way to send this info to your robot wirelessly. – Paul May 11 '18 at 5:51 2 Answers For high cost and high accuracy, you can use motion capture systems such as https://www.vicon.com/, https://optitrack.com/, or http://phasespace.com/. These systems will typically have a dedicated (Windows) computer driving the cameras. You will have some code to write to pull this data out and transmit to the robot (if that is where you want it). On the plus side, the hardware on the robot is minimal, just a few retro-reflector spheres or LEDs. For even higher cost and higher accuracy, you can use a laser based metrology system such as: https://www.nikonmetrology.com/en-us/product/igps or http://www.hexagonmi.com/products/laser-tracker-systems. A camera and known-location fiducials like ARTags is another option. Accuracy depends on the number and size of fiducials, and how much effort you put into to calibrating your camera and locations of landmarks. UWB radios which can measure the time of flight between endpoints is another option. There are two main players here: https://www.decawave.com/ and http://bespoon.com/. Accuracy will depend on number and placement of beacons. I think that the methods which require no modification to the environment--e.g. gmapping with 2D lidar or ORB-slam with camera--are probably too computationally intense it to run on the pi alone. You would need to run a separate server and connect over Wi-Fi. This approach works, and I've actually gotten it to work over the internet instead of just a local network. However, if you're willing to limit yourself to one room, you could try putting up some visual fiducials with known locations. You could try an approach somewhat like what Paul suggests in a comment, with a bird's eye view camera that just tracks the robot as it moves around the room and computes its location directly. With this approach, you're going to need an external computer anyway, so you might as well do visual slam with a camera mounted on the robot. A camera is significantly cheaper than a lidar, though you can get a salvaged Neato xv 2d lidar on eBay for about$70.

All of this would be easier if you had wheel encoders to provide an odometry estimate.