Releases: Unknownuserfrommars/booster-patch
Release list
Patch v2.2.9 - Fix v2.2.8 Field Regressions
v2.2.9 - Fix v2.2.8 Field Regressions
Three bugs seen running v2.2.8 on the robot, all traced to the aggressive speed push and the GlanceAtGoal node. Config/XML only - no C++ change, no recompile. Use this over v2.2.8 for matches.
Bug: robot stops midway / stops chasing completely
The v2.2.8 Chase speed of 1.8 m/s outran the head's ball tracking - the ball left the frame, ball_location_known went false after 3 s, Chase hard-stopped, and the decision flipped to find (which scans with the head while the body stands still - looked like it stopped chasing). Obstacle-avoidance veers and stop-to-turn caused the "stops midway".
- Chase
vx_limit1.8 -> 1.2 (still faster than the original 0.9, but the head keeps the ball in view),vtheta_limit2.0 -> 1.5. obstacle_avoidance.chase_ao_safe_dist1.5 -> 1.0 (avoidance only fires when genuinely close, cutting false stalls from depth misdetections).
Bug: not shooting in the correct direction
v2.2.8 near_ball_speed_limit 1.0 meant the robot reached the ball still moving fast and kicked before settling, scattering the aim.
near_ball_speed_limit1.0 -> 0.6 (settle before the kick). The kick-direction geometry was verified correct and is unchanged.
Bug: GlanceAtGoal is bad
The node froze the robot (setVelocity 0,0,0) for 0.6-0.9 s mid-attack and swung the head off the ball - in a live match that just loses the ball or invites a steal, and the goalposts often weren't actually reacquired.
strategy.glance_at_goal.enabletrue -> false. Aim now relies on normal localization + goalpost detection during ball tracking. (Node left in place, dormant.)
Retained from v2.2.8
soft_kickoff: true(gentle short kick-off) - that one worked as intended.
Loading
Config/XML only: ./scripts/build_brain.sh (--symlink-install, fast, no C++ recompile) then ./scripts/start.sh.
Packaging
- Source folder
v2.2.9/excludes.enginefiles; release assetv2.2.9.zipincludes them.
Patch v2.2.8 - Chase Max Speed + Soft Kick-off
v2.2.8 - Chase at Max Speed + Soft Kick-off
Config/XML-only release on top of v2.2.7. No C++ changes, no recompile.
Chase speed / mid-chase stalling
- Chase node now runs at the robot's true max forward speed.
subtree_striker_play.xmlChasevx_limit0.9 -> 1.8 (=robot.vx_limit, the hard ceiling enforced insetVelocity; chase had been capped at half the robot's legs).vtheta_limit1.0 -> 2.0 so it turns faster and spends less time in Chase'svx *= sigmoid(|targetDir|,1,3)"stop-to-turn" low-speed phase - a major cause of the visible mid-chase halting. strategy.near_ball_speed_limit0.6 -> 1.0: less crawling within 2 m of the ball. (setVelocityhas a 0.3 m/s floor; dial back toward 0.6-0.8 if the faster approach starts bumping the ball before the kick sets up.)- Two remaining stall causes are left as opt-in toggles (documented in CHANGELOG):
obstacle_avoidance.avoid_during_chase(drops to a fixed 0.5 m/s veer near any obstacle/misdetection - likely the #1 stall on a crowded field) and theball_location_knowndead-stop after >3 s without sight of the ball.
Soft kick-off
strategy.soft_kickofffalse -> true: during the kickoff window (isKickingOff/isFreekickKickingOff) the Kick node walks through the ball atsoft_kickoff_speed(0.3 m/s) instead of 0.9-1.2, giving a gentle short kick-off (~1/3 the momentum) for controlled possession instead of a long blast. Applies to both game and freekick kickoffs. 0.3 is effectively the softest possible (0.3 m/s floor); for an even shorter kick-off, shorten kick contact time (min_msec_kick), not the speed.
Stability note
1.8 m/s + 2.0 rad/s turns is aggressive for a K1 biped. If it falls during chase, lower Chase vx_limit toward ~1.4 (still a big jump from 0.9).
Loading the changes
All changes are non-compiled (config + behavior-tree XML). On the robot run ./scripts/build_brain.sh (--symlink-install, fast, no C++ recompile) then ./scripts/start.sh.
Packaging
- Repository source folder
v2.2.8/excludes TensorRT.enginemodel files. - Release asset
v2.2.8.zipcontains the full patch folder, including model engines.
Patch v2.2.7 - Rerun Post-Match Logging
v2.2.7 - Rerun Post-Match Logging On By Default
Config-only release on top of v2.2.6 (which is frozen at its released state). Implements the team's rerun.docx usage guide, adapted to tournament conditions where matches run unobserved (ethernet unplugged, no live monitoring allowed).
What changed
rerunLog.enable_file: true- every match now writes.rrdrecordings to/home/booster/Workspace/rrlog, split into 5-minute files. This is the post-match flight recorder: camera stream with detections, field-map replay (green circle = self), everytree/Decidedecision with its reasons, team lead/cost election, comms latency,debug/RLVisionKickanddebug/teamSignalchannels.rerunLog.img_interval: 1 -> 10(~3 fps image logging instead of every frame) - protects match-day CPU on the Orin and keeps file sizes sane.enable_tcpstaysfalsefor matches; the config now documents the live-view workflow for pre-match testing: setenable_tcp: true+server_ipto your PC's wired IP, open the Rerun Viewer on the PC first, then./scripts/start.sh.
Usage
- After a match:
scp booster@<robot>:~/Workspace/rrlog/*.rrd .and open in the Rerun Viewer (top-left menu -> Open). File names are the recording start timestamp. - Viewer/SDK version must match: check the robot's rerun_sdk version, then
pip install rerun-sdk==<version>on your PC (thereruncommand is the viewer) or download the matching viewer binary from Rerun's GitHub releases. - Housekeeping: clear
~/Workspace/rrlogbefore each match day so disk does not fill. - Calibration check trick (from rerun.docx): place the ball at a measured spot; the viewer shows ball X/Y/C in robot frame. If off, adjust
vision.yamlpitch_compensation(shifts X) /yaw_compensation(shifts Y) until they match reality.
Packaging
- Repository source folder
v2.2.7/excludes TensorRT.enginemodel files. - Release asset
v2.2.7.zipcontains the full patch folder, including model engines. - Config-only change vs v2.2.6 - no rebuild needed on robots that already built v2.2.6; just update
src/brain/config/config.yaml(it is read at launch).
Patch v2.2.6 - Tournament Anti-Interference Compliance
v2.2.6 - Tournament Anti-Interference Rules Compliance
Implements the organizer's rules update (upd.docx, 避免外部连接干扰比赛-解决方案). Referees pull system logs during matches; non-compliant external connections are penalized. Functionally identical to v2.2.5 otherwise.
What changed
Automated by this patch
- Bundled the official
scripts/kill_booster_server.sh(verbatim from the organizer's attachment - do not modify): stops theboosterserver/server.motionservice that provides phone-App and Bluetooth connectivity. Handles firmware 1.7 (bdb service), 1.6 (bdb container), and pre-1.6 (BoosterServerprocess) automatically. scripts/start.shruns it in the background at the exact position the official doc specifies (after./scripts/stop.sh, beforejetson_clocks):
sudo -v && sudo -b bash ./scripts/kill_booster_server.sh >/dev/null 2>&1
The service auto-starts on every boot, so each match start re-disables it. After it runs, the rear breathing light turns red - this is the expected Bluetooth-off indicator, not a fault. Daily (non-match) App usage is unaffected: the service returns after a reboot.
Manual steps per robot (cannot be automated - do before the match)
- Block booster-studio connections:
sudo passwd booster(studio logins require the user password). - Report each robot's wireless IP to the organizers: run
ifconfigand read thewlP1p1s0inet address. Only the registered eight robot IPs are permitted on the field network - anything else is removed and blacklisted. - Do not connect to the field network outside of matches.
Packaging
- Repository source folder
v2.2.6/excludes TensorRT.enginemodel files. - Release asset
v2.2.6.zipcontains the full patch folder, including model engines.
Validation
kill_booster_server.shshipped byte-identical to the official attachment; LF endings verified on it and the modifiedstart.sh.- No brain/vision code changes vs v2.2.5 - no rebuild required if v2.2.5 is already built on the robot; just update
scripts/.
Patch v2.2.5 - CRITICAL ABORT Fix + Race Config
v2.2.5 - CRITICAL ABORT Fix + Race Config + Review Hardening
Use this version for matches. v2.2.4 and earlier v2.2.x contain a critical latent bug (below).
CRITICAL: ABORT team signal permanently disabled receiving robots (latent since v2.2)
handleReceivedTeamSignal'sABORTcase setcontrol_state = 1- the gamepad/manual branch ofgame.xml. The only ways back to autonomous play are the startupRunOnceor a gamepad LT+B, neither available mid-match. One received ABORT idled a robot for the rest of the match.- The two-on-one wall-pass tactic broadcast ABORT on every abort (setup timeout 2.5s, stale partner comms 1.4s, a second opponent entering the corridor) - near-certain to fire within minutes of real 3v3 play with
two_to_one.enabled: true. First failed wall-pass = all other robots permanently frozen. - Fix, both ends: receiving ABORT now stops for one tick, releases tactic/lead, and resumes autonomous play; the wall-pass abort path sends the targeted
WALL_PASS_COMPLETE(partner releases its wall-pass state only) instead of a team-wide ABORT.
Race config profile (no-warmup, no-intervention match defaults)
All reversible in config.yaml, each documented inline:
enable_auto_visual_kick: false- whether this firmware's RL VisualKick physically kicks was never verified; its failure mode (track-forever) repeats all match with nobody able to intervene. The band-split + stall hand-off code stays in and can be re-enabled after post-race verification.two_to_one.enabled: false- never field-verified; avoids 7-second two-robot choreography variance (and makes the ABORT path structurally unreachable, on top of the code fix).enable_stable_kick: false- the 1s stabilize plus ~1.8s kick exceeds the 2.5s decision-commit window and could reintroduce mid-kick decision flapping; without it a kick completes in ~1.8s, safely inside the window.
Review hardening (full pre-race code audit)
GlanceAtGoalearly-exit (goal outside head range) now zeroes velocity so the held glance decision cannot coast on a stale velocity command.Kick::onRunningobstacle-avoid branch: min-speed amplification disabled (-0.1 was amplified to -0.3; matches the onStart fix).- Audit also verified: decision-chain priority and scoping, all three kick aim points, field-frame math of the kick-direction helper, RLVisionKick stall/cooldown/halt paths, goalie decision chain, brace/encoding integrity vs the released v2.2.2 baseline, and that the autostart tree (
chase.xml) is untouched by all v2.2.3+ changes.
Packaging
- Repository source folder
v2.2.5/excludes TensorRT.enginemodel files. - Release asset
v2.2.5.zipcontains the full patch folder, including model engines. - The
v2.2.4release asset has been restored to its original release content (post-release edits were withdrawn and moved into this version).
Validation
- Full ROS/colcon build was not run on this PC (no ROS locally) - build with
./scripts/build.shon the robot. - Shell scripts verified LF line endings.
- Reminder for match day: verify
game_control_ip,game.team_id, and per-robotgame.player_id/player_role/player_start_posbeforestart.sh; calibrate via./scripts/start_calibration.sh.
Patch v2.2.4 - Deployment + Manual Calibration Fixes
v2.2.4 - Deployment + Manual Calibration Fixes
Race-prep release on top of v2.2.3: merges the robot-side deployment fixes and makes the manual hand-eye calibration (ros2 run vision calibration_node handeye ...) work reliably on the patched tree.
What changed
Deployment (merged from the "fixed-for-robot" package)
scripts/assist.sh+robocup_game_assist.service:tree:=assist→tree:=chase.assist.xmlnever existed inbehavior_trees/, so the assist autostart crashed the brain at init.robocup_game_assist.service:Restart=neveris not a valid systemd value →Restart=no; addedWorkingDirectory; fixed missing trailing newline.distribution/install.sh/uninstall.sh: install root is now/home/booster/Workspace/robocup_demo(override withROBOCUP_WORKSPACE); an existing install is backed up (.backup-<timestamp>) instead ofrm -rf'd;set -e, quoted paths, and tolerant stop/disable ordering on uninstall.
Manual hand-eye calibration
src/vision/CMakeLists.txt:install(DIRECTORY model ... OPTIONAL). Source checkouts from this repo have nomodel/dir (engines are stripped; git drops empty dirs), which failed the vision install step and producedPackage 'vision' not foundafter a build. Vision now installs regardless; copy the engines from this release zip intosrc/vision/model/for detection to work.calibration_node.cpp: intrinsics topicrgb/camera_info→depth/camera_info, matching the robot-verified K1_5v5_Demo_v1.6_fixed reference (rgb/camera_infois not published on some firmware; intrinsics still bootstrap from vision.yaml either way).scripts/start_calibration.sh: now verifies the workspace is built and thevisionpackage resolves after sourcing, with actionable error messages. Reminder: the vision package only builds ON the robot (CUDA/TensorRT required) -Package 'vision' not foundon a PC is expected.
How to calibrate (on the robot)
./scripts/stop.sh
./scripts/build.sh
./scripts/start_calibration.sh # runs calibration_node handeye + copies result to /opt/booster/vision.yaml
The calibration UI needs an X-capable terminal (MobaXterm / ssh -X).
Packaging
- Repository source folder
v2.2.4/excludes TensorRT.enginemodel files. - Release asset
v2.2.4.zipcontains the full patch folder, including model engines.
Validation
- Deployment-script changes were hash-diffed against the working robot package; the vision package with the same calibration_node lineage built and installed
calibration_nodeon the robot (verified from the reference workspace's build/install tree). start_calibration.shverified LF line endings.- Full ROS/colcon build was not run on this PC because ROS/colcon is not installed locally - build with
./scripts/build.shon the robot.
Patch v2.2.3 - Kick Pipeline Fixes + RL Kick Hand-off + GlanceAtGoal
v2.2.3 - Kick Pipeline Fixes + RL Kick Hand-off + GlanceAtGoal
Fixes the two biggest on-field problems observed with v2.2.2: the robot hesitating ~15 seconds before kicking, and kicks going visibly off target even while the camera tracked the ball.
What changed
Kick hesitation (P0)
- Fixed the inverted goalpost-margin fallback in
Brain::isAngleGood()— the strict 0.5m margin applied whenever the goal window was smaller than 120° (i.e. almost always), leaving a ±6-8° shot-acceptance window at range. The big margin now only applies close to the goal. - Relaxed
reachedKickDir(static threshold 0.1 → 0.2 rad) while tightening the sign-flip release (π/6 → 0.25 rad). - Added a 2.5s kick-decision commit latch in
StrikerDecideso the robot's own motion can no longer flap the angle conditions and halt the statefulKicknode mid-execution. - Fixed the "stabilize" phase of
Kick:applyMinXamplified a -0.05 m/s hold command into a 0.3 m/s backward walk that pushed the ball out of kick range. Now stands still. - Retunes:
near_ball_speed_limit0.4 → 0.6, Adjusttangential_speed_near0.15 → 0.3, kick gate tolerates ≤400ms ball-detection dropout at contact range.
Kick direction (P0)
Kicknow crab-walks through the ball along the plannedkickDir(aiming 0.3m beyond the ball, clamped ±0.35 rad of the ball bearing) instead of walking at the raw ball bearing.GoalieDecidewrites its clear direction intodata->kickDirso goalie kicks aim correctly.
RL VisualKick band split — enable_auto_visual_kick re-enabled
- The RL branch now only triggers in a 1.2-4.0m band (code-enforced floor of
kick_range * 1.2), so it can never shadow the deterministicKickwindow again. RL owns the approach; the scripted kick owns the finish. - Stall hand-off: if the ball sits within 0.85m essentially unmoved for 2.5s ("track-but-never-kick" firmware behavior),
RLVisionKickexits and the scripted kick takes over. - Implemented the previously stubbed
isMinIntervalSatisfied()as a real 4s re-entry cooldown — no more exit/re-enter thrash.
New: GlanceAtGoal
- Before a
kick/safe_shoot, if no opponent-half goalpost was seen and no successful re-localization happened within 4s, the robot pauses ~0.6s and looks at the goal to acquire goalposts / re-localize, then shoots. Config:strategy.glance_at_goal.*.
Other fixes
- Removed the empty-decision goalie freeze branch (ball 0.5-2.0m ahead caused no-op ticks).
- Possession detection now measures opponent distance from vision-confirmed
Opponentrobots instead of raw depth-grid obstacles (teammates/referees no longer hijack the kick into steal/defend). - Steal-vs-defend risk roll cached 1s instead of re-rolled every 10ms tick; lead election got a sticky margin;
onHaltedseconds-vs-ms timer bugs fixed; duplicated leg-selection block removed.
Packaging
- Repository source folder
v2.2.3/excludes TensorRT.enginemodel files. - Release asset
v2.2.3.zipcontains the full patch folder, including model engines.
Validation
- All changes cross-checked for symbol/registration/config consistency (new BT node registered, params declared, XML wired).
- Full ROS/colcon build was not run on this PC because ROS/colcon is not installed locally — build with
./scripts/build_brain.shon the robot before deploying. - Field-test tip: watch the
debug/RLVisionKickrerun channel — exit reasons show whether the RL policy actually kicks in the band (ball_too_farexits) or relies on the stall hand-off (stall_handoffexits).
Patch v2.2.2 - GameController Safety + Build Fixes
v2.2.2 - GameController Safety + Build Fixes
What changed
- Added hard zero-velocity override for GameController
SET,END, penalty, free-kickSTOP, and free-kickSETstates. - Added immediate stop when transitioning into
SET. - Made malformed GameController values fail closed instead of leaving stale
PLAYwalking behavior active. - Fixed the
NONEmacro collision fromRoboCupGameControlData.hby renaming new symbols toINACTIVE/NO_COMMAND. - Included
scripts/auto_calib.shin the packaged patch.
Packaging
- Source tree excludes model engine binaries.
- Release asset
v2.2.2.zipcontains the full patch folder, including model engines.
Validation
- Local macro-collision syntax probe passed with RoboCup header included before patched headers.
scripts/auto_calib.shexists and uses LF line endings.- Full ROS/colcon build was not run on this PC because ROS/colcon is not installed locally.
Patch v2.2.1 - 3v3 Two-on-One Wall-Pass Tactic
v2.2.1
Patch update for the v2.2 team-signal communication system, focused on the current 3v3 match setup.
Highlights
- Adds a conservative 3v3 two-on-one wall-pass tactic.
- Adds targeted wall-pass CIDs:
- 2600 + PID: WALL_PASS_START
- 2700 + PID: WALL_PASS_READY
- 2800 + PID: WALL_PASS_RUN_READY
- 2900: WALL_PASS_COMPLETE
- Adds configurable
strategy.two_to_one.*thresholds, timing, offsets, readiness radius, and abort behavior. - Sets default
game.number_of_playersto 3 for the current match setup. - Updates README/release archive entry and patch metadata.
Packaging
- Repository source folder excludes TensorRT
.enginemodel files. - Release asset
v2.2.1.zipcontains the full v2.2.1 code package, including runtime engine files for deployment.
Validation
- YAML config parse OK.
- Striker BT XML parse OK.
- Team-signal CID registry standalone C++ syntax check OK.
- Full ROS/colcon build was not run locally because this machine does not have
colcon/ROS installed.
Patch v2.2 - Team Signal CID Communication System
Highlights
- Adds the �2.2/ patch archive with the team signal CID communication system.
- Introduces the CID registry, send/receive queues, team/single-target signal handling, and config-driven signal tendencies.
- Wires practical signals into defensive behavior and keeps unimplemented complex CIDs documented as TODO/not-done for later training.
- Includes the safe-shoot striker fallback and communication robustness fixes from the latest local work.
Local validation
- Parsed src/brain/config/config.yaml successfully.
- Parsed subtree_striker_play.xml successfully.
- Compiled/static-checked the standalone eam_signals.h registry.
- Full ROS/colcon build was not run on this PC because local ROS 2/colcon is not installed; robot-side validation is still recommended after SSH access.