Skip to content

Conversation

@Th3stral
Copy link

@Th3stral Th3stral commented Apr 4, 2025

Release v1.1.0 Notes for LiveLink

image

Written by: Zhaohan Wang

On behalf of: Group04 (Jiayan Liang, Jingyu Sun, Zhaohan Wang)


TLDR

This release introduces upgrades and improvements in the following areas:

  1. WiFi Positioning Module
  2. Boosted Accuracy in Positioning using a Particle Filter and a Sliding-Window Weighted Smoothing Filter
  3. Tagging Function for performance evaluation and route point highlighting
  4. Introduction of GeoFence Logic
  5. Recording & Replay Functionality Updates to process and display more detailed information
  6. Enhanced User Experience

System

Major Updates

1. Wi-Fi Positioning Module

  • Open Positioning API Integration
    The system can now estimate location and floor based on submitted Wi-Fi fingerprints.

  • Improved Reliability
    Weak signals and unreliable access points are filtered out; only the top 30 strongest signals are retained before upload.

  • Optimised Server Requests
    A new callback function handles server responses immediately, triggering necessary processes.

  • Redundant Request Prevention
    A flaw causing repeated identical requests has been fixed. A filtering layer now discards duplicate responses to improve efficiency.

  • Enhanced Initial Positioning
    The system prioritises Wi-Fi over GNSS for the initial location, improving indoor accuracy. If Wi-Fi data is unavailable or more than 30 seconds old, it falls back to the latest GNSS position. The user interface also displays Wi-Fi availability and shows the timestamp of the last update.

2. Sensor Fusion

The sensor fusion module combines data from:

  • PDR (Pedestrian Dead Reckoning)
  • GNSS
  • Wi-Fi

to estimate the user’s trajectory and position. Two main filters have been introduced for more accurate indoor and outdoor positioning:

  1. Dynamically Adjusted Particle Filter (in FilterUtils.java):

    • Trigger: Driven by PDR estimations, using Wi-Fi positions as primary anchors. GNSS data is used if Wi-Fi signals are unreliable.
    • Timeliness: Considers the age of Wi-Fi data, applying time-varying weights to reduce the influence of outdated readings.
    • Directionality: Adjusts the weight of Wi-Fi anchor points based on orientation.
  2. Sliding-Window Weighted Smoothing Filter (in TrajectoryOptimizer.java):

    • Substitutes batch optimisation to smooth and refine the predicted trajectory without high computational overhead.

An EKF (Extended Kalman Filter) is also provided in FilterUtils.java for future use.

Evaluation Pipeline

  • Tags can be added while recording a trajectory for subsequent performance evaluation.
  • An external pipeline quantitatively assesses filter performance and supports parameter tuning.
gt_vs_pred

Trajectory Storage

  • Wi-Fi and tagged positions are now stored in the existing gnss_data entry with providers labelled as wifi_fine and fusion.
  • Fused trajectory points are stored in the new fusion_data entry, using a existing protocol Pdr_Samples.

3. GeoFence

  • Accurate Geofences
    Geofences help correct predicted trajectories in specific scenarios.
  • Floor Change Detection
    By identifying main staircases and lift areas in the Nucleus Building, the system automatically adjusts floor levels. Field tests confirm reliable performance.
  • External Geofence Labelling Tool
    Accelerates the process of acquiring geofence coordinates.

4. Display and User Experience

  • Recording

    • Colour-Coded PDR, fused trajectory, GNSS, and Wi-Fi positions, with toggles to enable or disable each (except fused trajectory).
    • Only the latest five GNSS and Wi-Fi positions are shown to maintain a clear view.
  • Replay

    • Displays the same elements as recording mode, preserving all Wi-Fi and GNSS positions.
    • Shows GNSS error as circles for improved clarity.
  • User Experience

    • A default account is available to avoid mandatory registration.
    • More status messages appear via toast notifications.
    • Wi-Fi acquisition status is now visible on the initial positioning interface.

5. Known Issues in the Original PositionMe App

Incorrect Coordinate Conversion Function (Fixed)

  • The calculateNewPos() function in UtilFunctions had an error in its latitude correction term, producing incorrect east/west conversions. This has now been fixed, an individual pull request about this problem shall be submit later this month..
image

Wi-Fi Positioning Request Issue (Not Fixed)

  • The current mechanism relies on Volley, which does not gracefully handle HTTP 404 errors, causing repeated Wi-Fi registrations. While this does not severely affect core functionality, it remains unresolved.

Screenshots from the new release

image
image
image

Th3stral and others added 30 commits February 12, 2025 01:32
-- updated all previous commit to the new UI framework
-- Reapplied the original premission obtaination logic from the old ui framework.
--UI color and position update
-- hide api keys
-- added red dot in the recording page for indication, which turns to green after 30 sec
-- refined pressure sensor initial value, increased initial buffer size from 3 to 5 for better result
-- added/modified comments
-- some new color configs and icons
-- refined ui layout
--UI colors are changed
# Conflicts:
#	app/src/main/java/com/openpositioning/PositionMe/MainActivity.java
#	app/src/main/java/com/openpositioning/PositionMe/fragments/ReplayTrajFragment.java
-- added anim logic between pages
-- baned system return button on some pages
-- minor fixs on ui layout
-- added proto source for Traj.java
-- fixed null exception when pressure sensor encountered abnormal situation
-- improved the robustness on handling abnormal data from sensors
-- more comments and commented out some log
- sorted received WiFi from higher intensity to lower
- able to receive Location returned by openpositionAPI
- Logs are added to print the WiFi fingerprint and catch the time locations are returned
This reverts commit d0ff954.
- sorted received WiFi from higher intensity to lower
- able to receive Location returned by openpositionAPI
- Logs are added to print the WiFi fingerprint and catch the time locations are returned
- added WiFi positioning marker
- Recording map can display the current wifi position
- added API for transform wifi LatLng and XY displacement
- New class for filter utilities
- applied a simple particle filter
- new method for latlong convert to northing-easting
- Increased the number of cloud fetched traj from 30 to 50
- changed sensor fusion wifi request from instant to call back
- minor change in existing comments
…test

# Conflicts:
#	app/src/main/java/com/openpositioning/PositionMe/fragments/WifiFragment.java
# Conflicts:
#	app/src/main/java/com/openpositioning/PositionMe/sensors/SensorFusion.java
#	app/src/main/java/com/openpositioning/PositionMe/sensors/WiFiPositioning.java
-- attempts on filter parmater tunning
-- more comprehensive termination logic on leaving the page
-- new unstage observer function for wifi com (not implemented)
Th3stral and others added 30 commits March 31, 2025 21:41
# Conflicts:
#	app/src/main/java/com/openpositioning/PositionMe/GeoUtils.java
#	app/src/main/java/com/openpositioning/PositionMe/sensors/SensorFusion.java
- implemented new variable in the singlton SensorFusion to save last wifi position and floor
- use the Pdr_Sample format with new entry 'fusion_data' to save traj
- add save logic for both fused traj and wifi position
- to handel the problem of multiple wifi register, check logic is provided to limit the update of the wifi pos
- POSITION Fragment: text view for checking current wifi state is added, but changes using new wifi logic
- RECORDING Fragment: switches logic of GNSS and Wifi are improved, now it will be visible the last 5 observations once the switch is checked; trajectory path colar is modified;
- REPLAY Fragment: visibility of pdr path can be disabled by the switch;
- xml files:  checked switches will change its color to the color of corresponding components
- update the location logic in recording for indoor map and error distance calculation
- wifi status update
- temp muted batch optimisation for particle tunning
calculate and save wifi height using assumed nucleus height
-- updated fusion logic for gnss to make it only steps in when there is no wifi
-- updated the particle filter util to make the measurment noise param can be accessed from outside
- the fusion path can be displayed on the replay map
- the WiFi marker of each point can be displayed on the replay map
- the added tag can be displayed with the fusion path
- (BUG) Wifi markers can not be removed when the switch of the WiFi position is unchecked
- refined the autofloor logic to proper handel the floor transation for both LIB and NUC
- more comments
- cleaned format and more comments in the recording fragment & position fragment
- make filter individual block
- fix to initial floor logic issue
- fixed wifi update time disp
- fixed geofence function and integrated along with others
- new default login info for quicker access
- auto floor from the Wifi list can be displayed
- add effectiveness check for wifi as initial position.
- replay function is now added to the final app with careful consideration of empty check and auto-floor logic
-- implemented the filter functions lost in prev merge
-- gathered geofence related functions into GeoUtils
-- more comments and docs
- documented and reviewed all main java class except the ReplayTrajFragment
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants