{"id":21513247,"url":"https://github.com/patrickfav/indoor-positioning","last_synced_at":"2025-04-09T18:53:12.337Z","repository":{"id":45155556,"uuid":"65147448","full_name":"patrickfav/indoor-positioning","owner":"patrickfav","description":"A full-featured indoor positioning system that was developed during my master thesis. It has a javascript based rich UI and has a server-client architecture.","archived":false,"fork":false,"pushed_at":"2024-04-08T20:29:51.000Z","size":25083,"stargazers_count":57,"open_issues_count":3,"forks_count":24,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-23T20:51:15.901Z","etag":null,"topics":["angular","couchdb","highcharts","iot","javaee","nearest-neighbors","open-wrt","received-signal-strength","wifi"],"latest_commit_sha":null,"homepage":"https://repositum.tuwien.at/handle/20.500.12708/2080","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/patrickfav.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2016-08-07T18:16:32.000Z","updated_at":"2025-02-02T16:56:04.000Z","dependencies_parsed_at":"2024-01-13T03:54:45.491Z","dependency_job_id":null,"html_url":"https://github.com/patrickfav/indoor-positioning","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrickfav%2Findoor-positioning","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrickfav%2Findoor-positioning/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrickfav%2Findoor-positioning/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrickfav%2Findoor-positioning/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/patrickfav","download_url":"https://codeload.github.com/patrickfav/indoor-positioning/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248093420,"owners_count":21046682,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","couchdb","highcharts","iot","javaee","nearest-neighbors","open-wrt","received-signal-strength","wifi"],"created_at":"2024-11-23T22:55:08.987Z","updated_at":"2025-04-09T18:53:12.312Z","avatar_url":"https://github.com/patrickfav.png","language":"Java","readme":"# Introduction\n\nThis is a full-featured indoor positioning system that was developed during my master thesis.\nIts server component uses servlets and an Angular JS front end, whereas the Router/AP service is written in Lua.\n\n[![GitHub release](https://img.shields.io/github/release/patrickfav/indoor-positioning.svg)](https://github.com/patrickfav/indoor-positioning/releases/latest)\n[![Github Actions](https://github.com/patrickfav/indoor-positioning/actions/workflows/build.yml/badge.svg)](https://github.com/patrickfav/indoor-positioning/actions)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=patrickfav_indoor-positioning\u0026metric=coverage)](https://sonarcloud.io/summary/new_code?id=patrickfav_indoor-positioning)\n[![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=patrickfav_indoor-positioning\u0026metric=sqale_index)](https://sonarcloud.io/summary/new_code?id=patrickfav_indoor-positioning)\n\n![UI Overview](https://github.com/patrickfav/indoor-positioning/blob/main/misc/ui-overview.png?raw=true)\n\n# Requirements\n\n## Software\n\n* Java 11\n* Tomcat 7\n* CouchDB 1.5\n* Maven 3\n\n## Hardware\n\n* At least 4 OpenWRT compatible AP/Routers in a network with provided custom web services\n* At least 1 OpenWrt compatible AP/Router as client with provided custom web services\n\n# Architecture/Procedure\n\nThe underlying architecture can be observed in the diagram below.\n\n![Map Generation Procedure Diagram](https://github.com/patrickfav/indoor-positioning/blob/main/misc/map_generation_procedure_lowsat.jpg?raw=true)\n\nOverall procedure to map the target area:\n\n1. **Node Setup \u0026 RSS Measurement**\nActive Nodes, which can be regular access points, are distributed\namong the target area. Next a measurement phase is initialized\nwhich takes about one to three hours.\n\n2. **Site Evaluation**\nFrom the resulting data, the underlying radio propagation model\ncan be adjusted to meet the actual properties of the current site.\n\n3. **Map Generation \u0026 Positioning**\nWith the adapted model, radio wave propagation can be simulated over\na representation of the target area. Positioning works similar to the\nscene analysis approach using a modified nearest neighbor algorithm.\n\n![Phases Diagram](https://github.com/patrickfav/indoor-positioning/blob/main/misc/simple_phases_lowsat.jpg?raw=true)\n\n# Setup\n\n## Server\n\nStart Tomcat \u0026 CouchDB with standard ports. Compile project with\n\n`mvn clean package`\n\nand deploy the *.war on your Tomcat. The DB will be set up automatically, the name of the db will be derived from the\nmaven \u003cbuild\u003e -\u003e \u003cfinalName\u003e, so if you have a backup change the finalName accordingly.\n\n## AP/Routers\n\n## System Configuration\n\nAs prerequisites, you must have at least 4 APs ready (with installed webservers) in your network (knowing the IPs of each).\n\nOpen the browser and enter the url you deployed the war (usually something like [http://localhost:8080/MyProject](http://localhost:8080/)).\nCreate a new network by pressing the box with the \"+\". Enter the details and set \"Surveys Per Node to 100\" and \"Survey Schedule\" to\n\"Every Minute\" to accelerate measurement.\nThen next to \"Active Nodes\", add new nodes with \"Add Node\". Enter name and IP address, then press \"discover\" to see if\nthe node is reachable. After adding all nodes wait a couple of hours to let it measure.\n\nNext press \"Schedule Job\" -\u003e \"Start Single Run Analysis\" and wait a couple of seconds. The analysis should appear under\n\"Analysis\", reload page if not. The click \"Radio Path Loss Config\" and click \"Normalize Node Multipliers\". In the bottom\n table click on drop-down under \"SSID\" and choose \"Targetdistance\". Add the physical distances between nodes in meters\n in the distance matrix or skip the entire step. After entering the distances you can press \"Calculate Path Loss Model\"\n to optimize the used model -\u003e \"Update config\".\n\nNext, again, press \"Schedule Job\" -\u003e \"Start Single Run Analysis\" and wait a couple of seconds. Select the current analysis\n(with the adapted model). Choose \"Signal Strength Map\" and correct the positions of the active nodes. You may want to upload\na floor plan blueprint first in the network details (the pen icon next to the main header). After that, go to map full screen\nmode (four arrows icon). Scale the floor plan with the slider until the meter sizes are correct (you may have to correct the\npositions of the Active Nodes again). Then press \"Calculate\" next to the \"Extended Nodes\" headers. This will calculate the positions\nof all APs/Routers in the vicinity. You may want to correct the positions you know of. Press \"save\". You now are ready\nto position.\n\n![Node Editor](https://github.com/patrickfav/indoor-positioning/blob/main/misc/ui-node-editor.jpg?raw=true)\n\n# Positioning\n\nYou need an AP with the custom webservices installed, same as Active Nodes. This AP must be in your network.\n\n![Positioning](https://github.com/patrickfav/indoor-positioning/blob/main/misc/ui-positioning.png?raw=true)\n\nGo to \"Positioning\". Input the IP of the client (AP) and press \"Find\". If multiple networks match for this position\nyou have to select one, otherwise you will be shown a UI with the estimated position. You may press on a square in the grid\nto select the actual position to let the system calculate the offset.\n\n# Performance\n\nProperties of the Proposed System\n\n* Adapts well to the specific environment\n* Good scalability and low maintenance with easy setup\n* Accuracy between 2 and 4 meters on average (see diagram)\n* Initial positioning with trilateration works well\n* Quality degrades with non-correlating RSS\n\n## Accuracy\n\nThe results indicate that the position accuracy offers a performance comparable to\na state-of-the-art solution. The following diagram shows the accumulated offsets\nin all test locations.\n\n![Accuracy Diagram](https://github.com/patrickfav/indoor-positioning/blob/main/misc/ac_diagram.png?raw=true)\n\n## Scalability\n\nBased on extrapolated data, the proposed system delivers superior performance in\nterms of maintainability and scalability. In the diagram below the required effort\nfor various target areas is depicted.\n\n![Scalability Diagram](https://github.com/patrickfav/indoor-positioning/blob/main/misc/maintain_diagram.png?raw=true)\n\n# License\n\nCurrently proprietary\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatrickfav%2Findoor-positioning","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpatrickfav%2Findoor-positioning","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatrickfav%2Findoor-positioning/lists"}