SLAC.js Indoor localisation using Javascript

Simultaneously Localisation and Configuration (SLAC) of indoor Wireless Sensor Networks and their users built upon FastSLAM.

With SLAC we aim to simultaneously locate both the user and the devices of a system deployed in an indoor environment. The algorithm is privacy-aware and is an online localisation method; i.e. localisation starts whenever a user starts moving inside a building. Moreover, for the SLAC system we focus on a solution that can be deployed in smart spaces without additional hardware requirements besides users’ mobile phones and the components of the space. By utilising a mobile phone we remove the need for a application-dependent device that the user needs to keep.


  1. Presentation
  2. Demonstration (running in the browser)
  3. Additional examples
  4. License

See for more information SLACjs on Github.


This project/post was part of my research on indoor localization. Please see my paper or this presentation for more information. You can use the following reference if you want to cite my paper:

W. Bulten, A. C. V. Rossum and W. F. G. Haselager, “Human SLAM, Indoor Localisation of Devices and Users,” 2016 IEEE First International Conference on Internet-of-Things Design and Implementation (IoTDI), Berlin, 2016, pp. 211-222. doi: 10.1109/IoTDI.2015.19 URL

Or, if you prefer in BibTeX format:

author={W. Bulten and A. C. V. Rossum and W. F. G. Haselager}, 
booktitle={2016 IEEE First International Conference on Internet-of-Things Design and Implementation (IoTDI)}, 
title={Human SLAM, Indoor Localisation of Devices and Users}, 
keywords={RSSI;data privacy;indoor environment;ubiquitous computing;FastSLAM;RSSI update;SLAC algorithm;device RSSI;device indoor localisation;device location;device position;environment noise;human SLAM;nontrivial environment;received signal strength indicator;simultaneous localisation and configuration;smart space;user indoor localisation;user motion data;user privacy;Estimation;Performance evaluation;Privacy;Simultaneous localization and mapping;Privacy;Simultaneous localization and mapping;Smart Homes;Ubiquitous computing;Wireless sensor networks}, 


The presentation below describes the general idea of SLACjs and why we built it. It also shows the mathetical background and explains how particle filters and extended Kalman filters are used for the localisation.

Live demonstration

The demo below shows a simulated world with 7 devices (black squares). A user walks around (blue line) and collects RSSI measurements from the devices. Each grey line shows a single particle representing the user's trace. The green line shows the current best particle (based on the importance weight). Red squares (with the device name) show the current best estimate of that device's location. The estimate is retrieved from the best particle.

Note: The simulation is slowed down to show the actual process. Between each simulation step there is a 500ms delay.

Current average error

(Only visible after at least 1 landmark has been found)


Individual landmark errors

(Only visible after initialisation phase)

Other demos

Some other demos are also available online showing specific parts of the algorithm. A few of the demo's run an older version of the SLAC algorithm.

  • Movie of SLACjs and moving devices (on YouTube). The movie shows what happens when two devices are swapped and how the algorithm manages to find the new locations.
  • EKF initalisation. Demo showing the dedicated particle filter that is used to initialize a new device. It finds a rough estimate of the device's position using a particle filter. This version does not yet contain the improved resampling function that is used in the newest version of SLACjs.
  • Older version of the algorithm on random data. The world and movement is fully random.
  • Replay version of a live tests. Data has been recorded inside a real building with 7 bluetooth beacons used as landmarks. The demo version runs a slightly older version and does not show the maximum attainable localisation performance.


Copyright (C) 2015 Wouter Bulten

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.