Skip to content

idaohang/mole

 
 

Repository files navigation

Mole (Mole Organic Localization Engine) uses existing WiFi signals to estimate what room the device it is running on is in.  This has lots of applications, from finding the nearest printer to context-aware behavior like changing how your mobile phone behaves based on what room it is in.  The algorithms that Mole uses are described in our Journal of Location Based Services paper (June 2012).

As of January 2012, the Mole software consists of two disjoint parts.  These parts illustrate (a) different ways of running the software and (b) our changing concept of how the schema of rooms should be organized.  Let's call the parts "on-device" and "web-services."

The on-device set of components is what is described in the paper.  It consists of three executables: mole (cli for moled), moled (WiFi scanner, signature fetch/cache, localizer), and mole-binder (GUI for moled).  It is backed by several of the server components, primarily builder.pl.  Builder.pl takes WiFi scans from potentially many clients and merges them into per floor signature files, where there may be many rooms per floor.

To run the on-device components, start the daemon:
# /usr/sbin/moled -n -d
then start the GUI
$ mole-binder -d
If you are in some place where Mole does not see any access points it recognizes, the GUI will show all question marks in its estimate.  If you want to add a room to the database, you must wait until a certain number of WiFi scans have been collected to help uniquely identify that room.  After this number of scans have been made (~10), you are able to enter in a name for the place you are in and submit it to the database.

This process, called binding, allows you and others to recognize this place in the future.  You will get better results if you let the device collect 30-60 scans per place, but at least 6-10 should get you going.  The more spread out rooms are the better it will do (e.g. shops at a mall).  Conversely, it will not do well differentiating between adjoining rooms separated by free space (no WiFi positioning algorithm will).

While Mole does not have any notion of a map, it would be logically simple to put a map underneath the GUI, and to associate clicks on the map with binds of that location.  We did this with an earlier instantiation of a similar project.

The web-services set of components is a more recent addition.  It has similar functionality, but moves the computation of the location estimate to a server.  Each client sends a set of scans to the server, it computes the estimate, and it sends back the result.  This component consists of two executables: mole-ws (cli) and mole-scanner.  mole-scanner acts similarly to the daemon (moled) except that it only keeps track of recent set of WiFi scans; it does not cache signatures or compute the location on the client.  mole-ws either does its own quick scan or requests scans from mole-scanner, if it is being used.  It then sends the current set of scans to the server; the server computes an answer and replies with it.  mole-ws is also used to make binds and delete places.

A second major difference between the on-device and web-services components is their schema for representing rooms and addresses.  The on-device set organizes the world into a hierarchy of country, region, city, street address, floor, and room name.  This was originally felt to be more scalable, but now it feels like shoe-horning (it does potentially make adding new parts of the tree cleaner from a UI standpoint).  The web-services components do away with this and view the world as consisting of a container (e.g. a building or a floor) and a point of interest (e.g. a room).  There is nothing inherent in the on-device components that requires the hierarchical addresses and this could be changed fairly simply.

While both sets of components use the same algorithm to localize, they use different databases because of this schema change.  The on-device component is probably more informative because of the diagnostic information that the GUI provides, such as whether the user is moving and the number of scans being used to localize at the moment.  The GUI also allows you to easily see the score of all of the rooms being evaluated and to see other devices nearby you if they have proximity turned on.

More directions are here: https://projects.developer.nokia.com/mole/wiki

For a click-to-install Maemo N900 link, go here: http://mole.research.nokia.com/

About

Provides client-side positioning (aka localization) in non-GPS environments through collaborative RF-fingerprint sharing. This is the client component.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 98.6%
  • C 1.4%