Goto controller algorithm #20
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Parent map: #18
Question
What algorithm should the goto controller use to translate a target (x, y) into per-tick
setTargetSpeedandsetTurnRatecommands?Considerations:
setDistanceRemainingAPI — does it exist and can it be leveraged?Research complete
Full writeup:
docs/research/goto-controller-algorithm.mdon branchresearch/goto-controller.Recommendation: forward/reverse proportional steering with
getNewTargetSpeedPer-tick pseudocode:
Key decisions
effBearing.clamp(-maxTurn, maxTurn)actions.nimgetNewTargetSpeedutils.nim; encodes accel +1 / decel −2 asymmetry correctly so the bot brakes exactly on target with no overshootWhat was NOT chosen
actions.nim.Resolution
Proportional steering with forward/reverse selection, reusing existing
getNewTargetSpeedfromutils.nim.Algorithm:
arctan2(target - position) - heading|bearing| > 90°: reverse (negate speed, adjust bearing by 180°)±(10 - 0.75 × |speed|)dirSign × getNewTargetSpeed(MAX_SPEED, |speed|, distance)Key facts:
getNewTargetSpeedalready inutils.nim— handles asymmetric accel(+1)/decel(-2) modeldocs/research/goto-controller-algorithm.mdon branchresearch/goto-controller