Merged
Conversation
…ing in changes made to position refiners
…finer's constructor
…ored classes, added new datasets
…e testing utilities
Contributor
There was a problem hiding this comment.
Pull request overview
This PR implements FIR (Finite Impulse Response) filtering for noise reduction in robot position tracking from vision data. The implementation includes a new filter module, comprehensive unit tests validating MSE reduction, and integration into the position refinement pipeline with support for both friendly and enemy robot tracking.
Key Changes:
- New FIR filter implementation with configurable parameters for position smoothing
- Unit tests demonstrating filter effectiveness across 6 robots using real simulation data
- Updated PositionRefiner API to accept team color and robot count parameters for filter initialization
- Added visualization and analysis dependencies (scipy, seaborn, pyqtgraph, pyside6)
Reviewed changes
Copilot reviewed 17 out of 24 changed files in this pull request and generated 11 comments.
Show a summary per file
| File | Description |
|---|---|
utama_core/run/refiners/filters.py |
New FIR filter implementation with position and orientation filtering support |
utama_core/tests/refiners/noise_filter_test.py |
Comprehensive unit tests validating MSE reduction for x, y, and vector positions |
utama_core/run/refiners/position.py |
Integration of filters into position refiners (not shown in diff) |
utama_core/tests/refiners/position_unit_test.py |
Updated test signatures to match new PositionRefiner constructor |
utama_core/tests/refiners/position_refiner_integration_test.py |
Updated integration test with new PositionRefiner parameters |
utama_core/run/strategy_runner.py |
Updated PositionRefiner instantiation with team and robot count parameters |
utama_core/entities/data/vision.py |
Added Gaussian noise injection method for testing |
pixi.toml |
Added scipy, seaborn, pyqtgraph, and pyside6 dependencies |
vision_data/*.csv |
Test data files for filter validation |
vision_data/.jupyter/* |
Jupyter workspace configuration (should not be committed) |
main.py |
Changed mode from "rsim" to "grsim" |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…ned off filtering by default with a flag to PositionRefiner
…-SSL/Utama-Core into position_filtering_2
…-SSL/Utama-Core into position_filtering_2
energy-in-joles
approved these changes
Feb 21, 2026
valentinbruehl
pushed a commit
that referenced
this pull request
Feb 22, 2026
* Added extracted vision data with varying degrees of vanishing and noise * Attempt to store past raw game frames; starting work on test cases * added Andrew's filter * Integrated filters into position refiner * bad example test * Refined filter weights, added vision data for testing * Updated test data * Noise now added manually, updated test data * Amended test cases to address CI failure due to changes to PositionRefiner's constructor * Refinements to filters based on empirical data * Added some references for building tests * First pass unit tests * Some issues with unit tests. Working on fix * Added live testing utilities, conducted analytics for filters, refactored classes, added new datasets * Finalised analysis of filters, unit tests are working, added more live testing utilities * Deleted redundant files * Minor refinements to the live testing utilities * fixed formatting issues * Commented out utilities for testing and exporting data * Addressed comments on PR * Removed redundant utility function * cleanup * Added back error handling for imports when run from Jupyter * Moved unused testing/debugging utilities to a separate text file, turned off filtering by default with a flag to PositionRefiner * Further cleanup * Removed all testing utilities, will create a testing branch * Cleaned up test suite * Removed data analysis * Removed data analysis * Removed data analysis * Final cleanup * revert position_refiner_integration_test * update test * fixes and formatting * remove unncessary comments * update readme --------- Co-authored-by: Fred Huang <fredhuang122106@gmail.com> Co-authored-by: Joel <nzmjoel@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Finite Impulse Response (FIR) filters for noise filtering
Results achieved
When testing with grSim using the PID controller under random noise with standard deviation of 10 cm, we achieved a 45% improvement in robot positioning accuracy.
However, under the DWA controller, it creates random oscillations. We suspect it is due to the phase delay that FIR filters inherently caused. As such, we have since focused on developing a Kalman filter.
Note:
Kindly keep the additional unused parameters to the Position Refiner. It is required for Kalman filters, and removing it will require double work.
Completed by @szeyoong-low and @JiamingLiu5