Precise roomscale tracking with ancient cameras
Everything you need to accomplish this setup
For most, the idea of roomscale tracking usually conjures images of elaborate 200 camera setups and suits covered in pingpong balls for high budget films and video games, but the basics can be achieved for shockingly cheap.
I discovered a need for tracking when working on developing a prototype of an autonomous drone, and discovered a hidden capability in the Playstation 3 Eye Camera, which is now nearing its fourteenth year of existence. The camera itself has very low specs by modern standards, sporting a 480p resolution at 60hz. As a result, its price has fallen in recent years, and I was able to acquire all of my cameras for under 10 dollars each. Their penchant for IR tracking is granted by their extremely easily removable IR filter, which can be taken out in under 10 minutes with minimal effort and tools (I used an x-acto knife). Just slot in a tiny visible light filter and floodlight from amazon and you suddenly have a fully functional IR sensor for less than fifteen bucks!
I set up a very simple circuit to act as the target of my cameras, utilizing a single ir led connected to a few resistors and an 18350 battery.
Now comes the question of how to connect those cameras to code, and how to turn three white dots into a centimeter-accurate 3d coordinate. Luckily for both of these tasks, I was able to find publicly available code to accomplish everything I needed. For connecting to code I used the pseyepy library, which came with the complication of having been untouched in the last eight years. I was plagued by errors on installation, but was eventually able to make it work by switching to linux, editing a few packages, and replacing some outdated packages with their modern alternatives. After that was up and running I used code by Joshua Bird from a very similar project he was working on, and achieved triangulation.
All in all, very simple, especially considering the breadth of information provided by a relatively unassuming starting point. This is in major part due to the work of Joshua and bensondaled, so thanks to them in particular.