Repository navigation
beta_v0.9.0: promote dev_v0.9.0 (a robot driver with delay and accel mode, speed and acceleration references, fixs.driver(xil=, control=), XilSetup.SpeedTo*, the (vRef, aRef) pair) - #428
Merged
Conversation
…amics after the delay
xil: the dyno's robot driver takes a transport delay, an actuator function and an accel mode
…ionFromSpeed rebuilds the speed exactly on the float32 wire
…or both; a 3-argument exchange also gets aref
…, and 'both' refuses a pair that disagrees
…r bit; without it the run drifts up to 0.95 m/s
driver: referenceMode reads the eco controller's speed, acceleration or both; exchange can take aref
… dyno accelerationDesired as sent, unchecked
… no longer compares them; 'independent' goes
…pendent FIXS_Applications#88/referenceMode 'both' takes the pair as sent, without comparing them
…stock step is default() and its pieces are public; import fixs reaches fixs.xil
…ist=); logStep takes what it records; default() reads as four numbered stages
…ease, translated by _oldNames with a FutureWarning
#424/fixs.driver(xil=, control=), fixs.driver.instance() and public step methods
… speed SUMO and applications get - SpeedToTraffic: virenv | xil -- SUMO is given CARLA's speed or the dyno's - SpeedToApplication: traffic | xil -- applications get SUMO's speed or the dyno's, with acceleration by SUMO's formula; the CARLA bridge keeps SUMO's - the Python bridge carries the dyno's speed in the ego's speedDesired when either is xil - TrafficLayer keeps the dyno's speed per virtual-environment ego across the tick - both default to today's behaviour; xil needs EnableXil, Dynamics virenv, SUMO and the Python bridge, and is refused otherwise in both ConfigHelpers
#426/XilSetup.SpeedToTraffic and SpeedToApplication: which ego speed SUMO and the application get with a dyno in the loop
…nge(vRef, aRef) takes them - reference(control): the agent's speed, and the eco controller's acceleration plus the change the caps and the agent made to its speed over one feed step - exchange(vRef, aRef=None): without aRef, the one that goes with vRef, as before - default() and the passive step keep the dyno's answer as vHold, so logStep records the vRef and aRef sent to the dyno; the driver log gains an aRef column - arefFor is internal now (_arefFor) - driver_template: the pair, and speedDesired is restored before every step, so it never reads back the step's own command
…ce_pair #429/drv.reference(control) returns (vRef, aRef) and drv.exchange(vRef, aRef) takes them
yunlishao
approved these changes
Oct 12, 2026
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.
Promotes #421, #422, #423, #425, #427 and #430. That's 20 commits, 15 files. A simulated merge reports zero conflicts. The only commits on
beta_v0.9.0thatdev_v0.9.0lacks are the earlier promotion merges.What it adds
The simulated dyno's robot driver (xil: the dyno's robot driver takes a transport delay, an actuator function and an accel mode #421):
delay_s);actuator=fn);mode='accel').All three pass through
fixs.xil.dynosim(driver={...}). The defaults are bit-identical to before.The upstream controller's command as speed, acceleration or both (driver: referenceMode reads the eco controller's speed, acceleration or both; exchange can take aref #422, FIXS_Applications#88/referenceMode 'both' takes the pair as sent, without comparing them #423):
veh.set(speedDesired=..., accelerationDesired=...)is accepted.fixs.accelerationFromSpeedis the exact float32 inverse ofspeedFromAcceleration.fixs.driver(referenceMode='speed'|'accel'|'both')picks what the driver reads.'both'takes the pair as sent, without comparing them (FIXS_Applications#88/referenceMode 'both' takes the pair as sent, without comparing them #423).aref:exchange(vref, aref, dt).Hooking a controller in (#424/fixs.driver(xil=, control=), fixs.driver.instance() and public step methods #425):
fixs.driver(xil=, control=)andfixs.driver.instance().default(ego, dt)in four numbered stages, on public methods:shiftIntoFirstGear,advisoryOf,signalCeiling,leaderCeiling,stepAgent,reference,exchange,speedToPedal,logStep,controlPassive.fixs.driver(exchange),exchange=,usercontrol=) still work for one release, with aFutureWarning.import fixsreachesfixs.xil.Which ego speed SUMO and the application get with a dyno in the loop (#426/XilSetup.SpeedToTraffic and SpeedToApplication: which ego speed SUMO and the application get with a dyno in the loop #427, closes [FEATURE] XilSetup.SpeedToTraffic / SpeedToApplication: which ego speed SUMO and the application get with a dyno in the loop #426):
XilSetup.SpeedToTraffic: virenv | xilandSpeedToApplication: traffic | xil, read by TrafficLayer.A control step shows what reaches the dyno (#429/drv.reference(control) returns (vRef, aRef) and drv.exchange(vRef, aRef) takes them #430, closes [FEATURE] fixs.driver: reference() returns (vRef, aRef) and exchange(vRef, aRef) takes them, so a control step shows what reaches the dyno #429):
vRef, aRef = drv.reference(control): the agent's speed, and the eco controller's acceleration corrected by the change the caps and the agent made to its speed.drv.exchange(vRef, aRef)hands the dyno that pair; withoutaRefit behaves as before.vRefcolumn is now the reference sent to the dyno, not a copy ofvDyno, and anaRefcolumn is added.reference()now returns a pair, so FIXS_Applications' controller must move with it (FIXS_Applications#92).Related Issues / Tasks
Promotion; closes no new issues. #426 is closed by #427, #429 by #430.
ORNL-Real-Sim/FIXS_Applications'sbetapromotion needs this one to have publishedv0.9.0-betafirst: its controllers callfixs.driver(xil=, control=),fixs.driver.instance(), anddrv.reference(control)for the(vRef, aRef)pair from #430.Checklist
dev_v0.9.0, and FIXS_Applications rungs 5 and 6 run end to end against it.