The Hagisonic Stargazer is an indoor positioning system which computes the robots relative position and orientation to pseudolites, which are infared reflectors attached to the ceiling.
From the Hagisonic website:
"StarGazerTM is a unique world best solution, a sensor system for Indoor localization of intelligent mobile robots. It analyzes infrared ray image reflected from a passive landmark with characteristic ID. The output of position and heading angle of a robot is given with very precise resolution and high speed. It is remarkably strong for surroundings such as an infrared and fluorescence lights and sunshine. It is the world best in performance, convenience and cost."
The Hagisonic Stargazer outputs sensor measurements through the serial port that gives the mode of the sensor, the unique ID of the pseudolite being observed, and the position and orientation of the sensor in the local pseudlite reference frame. The setup and pinouts of the sensor can be found in the Stargazer Manual referenced above. The position of each pseudolite was carefully measured in a global reference frame located at the bottom left of the maze. When a measurement is received the algorithm rotates and translates this measurement to the global reference frame based on the pseudolite ID.
Nine pseudolites were attached to the ceiling to cover an area of 16' x 16', which is large enough for the entire Pac-man maze. The picture below shows three pseudolites hanging from the ceiling.
The next picture shows the sensor mounted on top of the Roomba itself.
The position and heading of the Roomba was found by fusing both the Stargazer measurements and odometry from the Roomba itself. The Stargazer measurements are given in (x,y,angle) of the sensor relative to the current Pseudolite being looked at. The odometry from the Roomba itself is given in terms of distance travelled and angular change since the last request. The sensor fusion was done using an Unscented Kalman filter (UKF). The UKF employed is a general UKF object already in place in the NetUAS software that is general for any sensing problem and requires initial conditions (state and covariance), process and sensor noise matrices, and a state update and measurement equation.
The following equations are the basic formualtion of the filter, for a full treatment of this, please refer to the paper: A New Extension of the Kalman Filter to Nonlinear Systems. The time update equations are performed always before processing a new measurement, and also if the position is requested but no new measurements are available. The measurement update is performed either when there is a new measurement from the Hagisonic Stargazer or if there is a new odometry update from the roomba. The odometry measurements were necessary to incorporate because when the edge of the visibility of a pseudolite is reached, there is sometimes no new Stargazer measurements for several seconds and there are also sometimes bad measurements with errors in excess of 1m.
This three plots show the xy positional data and the angle data for the Roomba driving around the lab as a function of time. Note that the filter (blue) does a good job of filtering out some of the bad measurement data (red). During this specific run there was a rather long timeout when the Hagisonic Stargazer had trouble getting a measurement. This took place between around 100s to 110s, note that during this time the filter did a good job of prediciting the state given only odometry measurements.