Real/extend kick transmission - #93
Conversation
There was a problem hiding this comment.
Pull request overview
Extends the real robot serial command transmission so kick/chip commands can be “persisted” across multiple control timesteps to mitigate packet loss and rising-edge-only triggering on embedded firmware.
Changes:
- Add kick/chip persistence trackers in
RealRobotControllerand decrement them each send cycle. - Apply persistence when generating the command buffer (kick bit currently; chip intended).
- Add
KICK_PERSIST_TIMESTEPSto global settings.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
utama_core/team_controller/src/controllers/real/real_robot_controller.py |
Adds kick/chip persistence tracking and uses it during command buffer generation. |
utama_core/config/settings.py |
Introduces a new persistence duration constant for the real controller. |
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
| if c_command.kick or robot_id in self._kick_tracker: | ||
| kicker_byte |= 0xF0 # upper kicker full power | ||
| if c_command.chip: | ||
| if c_command.chip or robot_id in self._chip_tracker: | ||
| kicker_byte |= 0x0F |
There was a problem hiding this comment.
Kick/chip persistence can override safety stop commands: even if a stop/empty RobotCommand has kick/chip set to 0, the outgoing kicker_byte will still be set HIGH while the robot_id remains in _kick_tracker/_chip_tracker. If an emergency stop happens after a kick request but before embedded received the rising edge, the subsequent stop packets could create the rising edge and trigger a kick during shutdown. Consider adding an explicit way to clear/disable kick/chip persistence (e.g., a controller method to clear trackers, invoked by stop routines) or a hard override that forces kicker_byte=0 when the caller intends a stop packet.
There was a problem hiding this comment.
this is a valid point. Right now there's no way to distinguish between an emergency stop and a regular empty_command(). We have to look into this in the future, but the risk right now is not high
…rst-Order-RoboCup-SSL/Utama-Core into real/extend_kick_transmission
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
Comments suppressed due to low confidence (1)
utama_core/team_controller/src/controllers/real/real_robot_controller.py:218
- There is unreachable / redundant code at the end of
_generate_command_buffer():return packetat line 214 already exits the function, so the subsequent commented-outpacket_strline and the secondreturn packetcan never run. Please remove the dead code to avoid confusion and to ensure future edits don’t accidentally go into the unreachable block.
return packet
# packet_str = " ".join(f"{byte:08b}" for byte in packet)
return packet
* the dwa is cooked it runs in sim but the robots are undergoing brownian motion * Fast Path PLanning * fixing * cleaning up * test: write simple straight line test * test: uncomment straight line test with obstacles * test: moving robots obstacle course, also added separate motion controller for opponents for testing * test: implement unit test of 12 robots dashing straight at each other * test: implement test with 6 robots moving randomly in a half court * fixing a bug * increased safety * revert dwa config and planner * rename test file * fixing slowing down at sugoals + linting * recursion error fix * fix: index out of order bug * updates to fastpathplanning * updates * updating * adding test * random movement test succeeds with fpp (5 robots) * diagonal robot movement test pass with fpp * make number of robots in random_movement_test adjustable * use fpp in all tests * reduce to 3 robots in random_movement_test * compute distance between two line segments * g * Lined Based obstacles and Config Files Updates * fixed issues concerning new functions in math_utils * updating * Removing extra libraries * Update utama_core/motion_planning/src/fastpathplanning/planner.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Adding snake eye convention and removing unwanted code * Removed target from collide function * Updating checksegment function * Including Joel's suggestions * snake_case and parameter error fix * Update utama_core/motion_planning/src/controllers/fastpathplanning.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Fix/goalkeeping (#92) * dribbling * improved logic * bug fix * updates * improvements * typing * optimizations to rsim * Update utama_core/rsoccer_simulator/src/ssl/envs/standard_ssl.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * bug fixes + updates * linting * test bug fix * test_fix * undo * undo * reverted params * bug fixes * improved dribbler logic * Update utama_core/team_controller/src/controllers/real/real_robot_controller.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * updates * update fix * updates * updates * fixes * removed prints * feat: change goalkeep * feat: fix bug * add change * Fix: fix the bug run toward enemy * Fix: add a barrier to the forbiden square * Fix: goal keep * simplification of similar codes * simplification * minor: improve in algo * minor: improve in algo * fix: algorithm problem * Fix: write the algorithm that let goalkeeper go between predict line and other robo * Feat: add the third defender * Fix: better tribble defender * chore: linting * Update utama_core/skills/src/goalkeep.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update utama_core/skills/src/defend_parameter.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update utama_core/skills/src/defend_parameter.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Remove unused imports from defend_parameter.py (#100) * Initial plan * Remove unused imports face_ball and move Co-authored-by: NingchuanIC <212761386+NingchuanIC@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: NingchuanIC <212761386+NingchuanIC@users.noreply.github.com> * Fix goalkeep to handle teams with more than 3 robots (#99) * Initial plan * Fix: handle cases with more than 3 friendly robots in goalkeep Co-authored-by: NingchuanIC <212761386+NingchuanIC@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: NingchuanIC <212761386+NingchuanIC@users.noreply.github.com> * Remove dead code file goal_keep.py (#98) * Initial plan * Remove dead code file goal_keep.py Co-authored-by: NingchuanIC <212761386+NingchuanIC@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: NingchuanIC <212761386+NingchuanIC@users.noreply.github.com> * Remove unused math import from standard_ssl.py (#97) * Initial plan * Remove unused math import from standard_ssl.py Co-authored-by: NingchuanIC <212761386+NingchuanIC@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: NingchuanIC <212761386+NingchuanIC@users.noreply.github.com> * Fix hardcoded goal coordinates in defend_parameter.py for bidirectional play (#96) * Initial plan * Fix hardcoded goal x-coordinates in defend_parameter.py Co-authored-by: NingchuanIC <212761386+NingchuanIC@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: NingchuanIC <212761386+NingchuanIC@users.noreply.github.com> Co-authored-by: Fred Huang <60901360+fred-huang122@users.noreply.github.com> --------- Co-authored-by: Fred Huang <fredhuang122106@gmail.com> Co-authored-by: Fred Huang <60901360+fred-huang122@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Isaac Yong <72080621+isaac0804@users.noreply.github.com> Co-authored-by: Yangping Li <lynfe@LAPTOP-JJF6AK12.localdomain> Co-authored-by: Ningchaun <1311856651@qq.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: NingchuanIC <212761386+NingchuanIC@users.noreply.github.com> * chore(release): bump version to v1.5.20 * Real/extend kick transmission (#93) * chore(release): bump version to v1.5.21 * Add DeepWiki badge to README Add badge for DeepWiki to README * Feature/rsim noise (#89) * Implemented a flag to add Gaussian noise in rsim. Added another more hackish implementation for comparison. * Cleaned up implementation, removed hackish alternative * Working on adding noise to each component independently * Completed implementation of noise addition * Addressed comments on PR, got orientation to work * Addressed comments in PR, added vanishing, added support for ball * Minor linting * Moved utility functions for adding Gaussian noise from classes representing balls/robots to the SSLStdenv class. Learned about this best practice in this week's lecture * Turned off a flag used for testing --------- Co-authored-by: Joel <42647510+energy-in-joles@users.noreply.github.com> * chore(release): bump version to v1.6.0 * Fix/defence parameter (#103) * Fix: fix the goalkeeper and defencer * fix: the robot will not move if it block the ball * Fix: the robot will not move if it block the path * Update utama_core/skills/src/defend_parameter.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Fix goalkeeper defender position logic for left goal defense (#104) * Initial plan * Fix defender position logic for left/right goal defense Co-authored-by: NingchuanIC <212761386+NingchuanIC@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: NingchuanIC <212761386+NingchuanIC@users.noreply.github.com> * Fix side-aware defender position check in goalkeeper logic (#105) * Initial plan * Fix: Make defender position check side-aware Co-authored-by: NingchuanIC <212761386+NingchuanIC@users.noreply.github.com> --------- Co-authored-by: NingchuanIC <212761386+NingchuanIC@users.noreply.github.com> --------- Co-authored-by: NingchuanIC <212761386+NingchuanIC@users.noreply.github.com> Co-authored-by: Fred Huang <60901360+fred-huang122@users.noreply.github.com> * Feature/kalman (#101) * 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 * Analysed vanishing problem, created sample datasets * Position refiner now has access to the last game frame and command map. Imputing feature is coming along , but there are unexplained spikes that are preventing it from working properly * Fixed issues, now imputes correctly based on last gameframe * Completed work on vanishing * Incorporated some suggestions from copilot regardign style * Addressed comments on PR * Removed redundant utility function * Factored out static method into global utility * cleanup * Added back error handling for imports when run from Jupyter * Renamed datasets to include the control mode, filtering only turned on during run mode together with vanishing * Fixed bug in tests due to renaming of files * Created working Kalman filter. Working on analytics * Working on analytics * Implemented a flag to add Gaussian noise in rsim. Added another more hackish implementation for comparison. * Analysing Kalman filter performance; need to merge new rsim utilities first * Cleaned up implementation, removed hackish alternative * Working on adding noise to each component independently * Completed implementation of noise addition * Addressed comments on PR, got orientation to work * Performed benchmarking on kalman filters * Performed benchmarking on kalman filters * More benchmarking * Kalman filter performance validated * Kalman filters now handle vanishing * Removed non-performing implementations * Rejigged analytics for Kalman filter * Addressed comments in PR, added vanishing, added support for ball * Minor linting * Merge branch 'feature/rsim_noise' into feature/kalman * Added filter for ball, added support for orientation * Now able to run analytics for orientation * Moved utility functions for adding Gaussian noise from classes representing balls/robots to the SSLStdenv class. Learned about this best practice in this week's lecture * Turned off a flag used for testing * Minor bug fix * Analysing data for orientation, plus some minor fixes * Completed work with Kalman filters, will now work on PR * Removed some redundant files * Renamed folder to ease merging with testing * Renamed folder to ease merging with testing * Cleanup, getting ready for PR * Small fix to satisfy linter * Final cleanup after reviewing PR diff * Improved filter docs * add docstring to math_utils.py * remove unused get_displacement_vector * remove unused import * [chore] formatting * chore: formatting * fix matrix inversion numerical instability and formatting of class name * remove improper static method use * improper use of tuple[float] type hint and mix bug referencing self.covariance_mat_xy instead of self.covariance_mat in KalmanFilterBall * removed references of .cmd_map not used position.py * fix test failure * Made non-global constant variable lower-cased * Using matrix transpose attribute instead of function call * update test cases * Removed redundant last_game_frame attribute * separate my and opp refiners * update running attribute for opposite refiner too * Minor formatting and naming changes to Kalman filter * fix incorrect assumption about robot id numbering in position refiner tests * corrected direct imputation of None values into vision data. Fix bug causing test fail * improve reset functionaity of position refiner * Fixed bugs introduced when removing assumption about numbering * fix dictionary logic in position refiner * update optional typing for KalmanFilterBall filter * fix typing in KalmanFilterBall * fix point cycle strat * Fixed issues in test due to filters no longer having ids, and now taking Robot instead of Dict[Int, Robot] * Kalman filter now has id attribute * label vision data using kalman id instead of last frame id * add comment about treating substitution as vanishing * remove unncessary imports * add authors --------- Co-authored-by: Fred Huang <fredhuang122106@gmail.com> Co-authored-by: Joel <nzmjoel@gmail.com> * chore(release): bump version to v1.7.0 * FIR filters (#81) * 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> * chore(release): bump version to v1.8.0 * reverting mistake This reverts commit ba83a96. * planner.py naming convention fixes * addressed pull request comments * Updating * Updating * Updating * Updating * Updating * Added Field Bounds to FastPathPlannig * Added field bounds as an obstacle * Added boundaries are as obstacle, updated how the point of closesnt obstacle is calculated. * Added a project feature, to increase the speed * ignore DS_Store * optimise fastpathplanner --------- Co-authored-by: Jawad <jawad.olavian@gmail.com> Co-authored-by: wowthecoder <wengloo135@gmail.com> Co-authored-by: Sarthak Agarwal <sarth@Sarthaks-Macbook.local> Co-authored-by: Sarthak Agarwal <132744408+Vortex4627@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: maimaicircle <lynfevian@outlook.com> Co-authored-by: Fred Huang <fredhuang122106@gmail.com> Co-authored-by: Fred Huang <60901360+fred-huang122@users.noreply.github.com> Co-authored-by: Isaac Yong <72080621+isaac0804@users.noreply.github.com> Co-authored-by: Yangping Li <lynfe@LAPTOP-JJF6AK12.localdomain> Co-authored-by: Ningchaun <1311856651@qq.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: NingchuanIC <212761386+NingchuanIC@users.noreply.github.com> Co-authored-by: utama-release-manager[bot] <232491996+utama-release-manager[bot]@users.noreply.github.com> Co-authored-by: Joel <42647510+energy-in-joles@users.noreply.github.com> Co-authored-by: Sze Yoong Low <low.szeyoong@gmail.com> Co-authored-by: Sze Yoong Low <sy8low@gmail.com> Co-authored-by: Joel <nzmjoel@gmail.com>
Adds
KICK_PERSIST_TIMESTEPSandKICK_COOLDOWN_TIMESTEPS.