feat(alpasim-integration): continuation of closed loop integration - #177
Arseni10Lk wants to merge 46 commits into
Conversation
…n for issue autowarefoundation#140 Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
…ack in test_alpasim_stream.py Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
…int inference, and attach camera params in stream parser Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
…ing requirements, and add closed-loop smoke test Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
…tion example Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
…tion Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
https://github.com/NVlabs/alpasim/blob/main/src/driver/src/alpasim_driver/models/base.py Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
…e 7-camera KITScenes setup Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
… driver Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
b526788 to
a31920d
Compare
…figs Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
|
Please, take a look when you have a moment |
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
|
@Arseni10Lk thanks, really great your work,
|
It is impossible to run it as is as of now, because the usdz are not provided by KITScenes I think and the conversion PR is not there yet it seems (unless I missed smth). The KIT camera names are hardcoded as of now (should this be swappable?) However, I ran it using Physical AI dataset (by swapping the camera names), and it worked. |
|
@riita10069, the doc is here. The first half of it comes from KIT/Alpasim/AutoE2E integration (so this plugin + other stuff from issue #140 ) The second half comes almost exclusively from issue #123, where I was not really actively participating, so I hope I did not get anything wrong there |
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
43f828b to
5c11e32
Compare
|
In terms of production, this seems very clear. In terms of reinforcement learning though, I don't know if this doesn't exceed NuRec capabilities. If I understand everything correctly, then what you are suggesting is:
But isn't this impossible in NuRec? |
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
|
@Arseni10Lk Instead of converting AlpaSim's route into LEFT / RIGHT / STRAIGHT and then reconstructing a synthetic mask from that command, I would keep the original route geometry and rasterize it directly into the AutoE2E Concretely, I would suggest:
So the driver should preserve the route received from AlpaSim, transform/crop it into the ego-local frame, and render the same fixed-width route corridor used during imitation learning. The discrete command can still be kept for other policies if needed, but AutoE2E should consume the route geometry directly. This also means we do not need to provide the route to NuRec or generate the world from the route; NuRec can continue rendering from the updated ego pose as it does now. My understanding is that whether it's a PoV or Robotaxi, fundamentally there should be navigation set up with the current location, destination, and Route displayed on a map. My understanding is that what gets input into AutoE2E's Route is always a rasterized screenshot from that IVI. I think we should create something equivalent to that. If the Vector Map in Alpasim is inadequate, we could also pull OSM data from GNSS and create a raster map in the same way as during Imitation. Please point it out if I'm saying something strange. |
…y test Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
|
@riita10069, thanks for all your feedback. I really appreciate all the great ideas shared So, I examined the navigation and its potential implementation here, and I wanted to confirm/discuss one thing. Constructing a route mask shouldn't be an issue (at least not as much as map rasterization). However, when it comes to map rasterization, there is one critical difference from offline training that requires some thought.
So, the key question I wanted to ask is whether you had a chance to test live rasterization before, and how much it slows down performance in combination with a 10 Hz frequency of operation of our Reactive model |
|
I think this actually can be resolved by simply pulling a "bigger" tile than needed first and then just cropping (not literally cropping, but rather rasterizing its chunk) it in accordance with the current position. So, now I will be working on that |
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
…documentation Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
|
I think one important point is how much freedom we actually want to give the model during RL. Since the 3DGS environment is reconstructed from camera data along the original vehicle trajectory, the agent cannot deviate too far from it. For example, if it moves more than ~3 m away, we could give a negative reward and terminate the episode, since we probably shouldn’t train on clearly degraded regions of the reconstruction. So even with RL, the task is essentially to follow the same route as the original vehicle, while allowing some local freedom in how the agent drives. Given this constraint, I think we can preprocess and pack a sufficiently large rasterized map and route with each scene, similar to IL. During RL, we would only need to sample the relevant region based on the agent’s current pose, rather than rasterizing the map from scratch at every step. |
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
…/Arseni10Lk/auto_e2e into restored-closed-loop-integration
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com> autowarefoundation#123 v1 uses rollout comfort/progress as the base and multiplies fidelity onto the WM consequence alone, so a noisy world model cannot wipe safety or flip the ranking. The offline pair is the tensor AlpaSim (autowarefoundation#177) should call later.
|
Today (9/2/2026), @ZaynabEM mentioned https://huggingface.co/SIMFORGE-AI/SIMFORGE-D1.5, which is a distilled version of Alpamayo. I wanted to leave this here so that it can be looked into and added after we are done with the Reactive Branch |
|
@Arseni10Lk Before reviewing the code I wanted to flag something mechanical that makes this PR much The diff currently shows 93 files, +18,088 / -1,147. Against Retargeting the base to Please can you check that? |
|
@gcordova10, thank you for letting me know. It seems to be fixed now. Also, just a heads-up: I initially started implementing the full Reward Registry, which was a bit problematic at the time because KIT scenes didn't provide bounding boxes, and they were required, and so on. But as @riita10069 said during the last meeting (9/9/2026), at first we can just use a normal deviation from the GT. Then we can implement the full reward as you suggested it and I provided this suggestion of yours in Reinforcement_Learning.md in a separate PR (leaving it here as "Future work," as it is labeled in reinforcement learning. md now). What do you think about that? |
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
Signed-off-by: Arseni10Lk <arseniy230606@gmail.com>
|
@Arseni10Lk Thanks for the 16 September commits — this review is against One consequence worth recording, because it closes §6.2.2's own concern: the stationary-ego case I went through the plugin, the parser, the reward library, the two test suites and the design Short version. Items 1 and 2 stop any real Line numbers for repository files are against What now works. The two-yaml camera inconsistency from 7 August is closed. The default is 1.
Until The suite cannot catch this: 2. The route path is unreachable from the wizard, so
3. The driver builds the model from constructor defaults instead of from the
The good news is that this is now a loud failure — dropping the Worth noting where the helper should come from. Whichever way it is done, it needs no special handling for 4.
The semantic raster is already in hand at the point the tile is fetched: 5. The integrator differs from the evaluation one by about a metre at 6.4 s, so closed-loop and
I ran both over 64 steps at 0.1 s on the same control sequences rather than arguing from the code:
This is not a braking problem, it is a turning problem. Braking is the mildest case in the set: 6. §6.1 is labelled "(Implemented)", but
The class and its tests are fine as far as they go. The point is the label: this is the same thing 7. The camera-topology parity test compares the parser against a hardcoded copy of itself.
This shares a root cause with item 3. Three corrections to the design document, all about numbers or references from #123. §6.2.1 ( §6.2.2 ( §7.2 ( |
This is a PR for PR #175 .
PR #166 was closed automatically due to a history revamp, and now this PR continues the work on the closed-loop integration.
Acceptance order: