Repository navigation
feat(x5h): before/after actuation parameter profiles for the MRM demo - #47
Merged
oguzkaganozt merged 8 commits intoSep 23, 2026
Conversation
youtalk
marked this pull request as ready for review
August 27, 2026 13:11
youtalk
force-pushed
the
feat/freertos-x5h-netif
branch
from
August 31, 2026 18:38
27c729d to
829e117
Compare
youtalk
force-pushed
the
feat/x5h-actuation-param-profiles
branch
from
August 31, 2026 18:38
1b9cfa6 to
9004f2e
Compare
youtalk
force-pushed
the
feat/freertos-x5h-netif
branch
from
August 31, 2026 21:25
829e117 to
74fbb0a
Compare
Signed-off-by: Yutaka Kondo <yutaka.kondo@youtalk.jp>
Signed-off-by: Yutaka Kondo <yutaka.kondo@youtalk.jp>
Signed-off-by: Yutaka Kondo <yutaka.kondo@youtalk.jp>
… profile The header and CMakeLists.txt comments claimed an unconfigured "after" build is byte-identical to its predecessor on every target; the boot banner's new profile-identity string makes that false for freertos_x5h specifically (Zephyr/S32Z2/POSIX are unaffected). Reword both comments to state what actually holds: identical parameter values and code everywhere, identical .rodata except for that string on freertos_x5h. Also apply the after/before convention consistently to the diag ELF contract re-verification steps (they build an "after" image but omitted the argument), and document --param-profile, check-elf-contract.sh's full argument list, and the two CI artifact names in the freertos_x5h README. Signed-off-by: Yutaka Kondo <yutaka.kondo@youtalk.jp>
The usage block in the freertos_x5h README sat inside a runnable bash fence but carried placeholder arguments. A verbatim copy-paste failed with CONTRACT_FAIL, because the script looked for the literal string '[service-name]' in .rodata. Use the real values for the default build instead, and say in the prose what to change for a before build. Also align the copyright line of actuation_param_profile.h with the convention the rest of this tree uses for 2026-dated files: 49 files carry 'Arm Limited and contributors.' and 9 carry 'Arm Limited.' Signed-off-by: Yutaka Kondo <yutaka.kondo@youtalk.jp>
youtalk
force-pushed
the
feat/x5h-actuation-param-profiles
branch
from
September 22, 2026 04:13
9004f2e to
cbdc461
Compare
Stacked fork PRs against feat/freertos-x5h-netif never matched pull_request: branches: [main], and push: on the head branch does not create upstream checks. Include the stacked base so the before-profile job actually runs. Signed-off-by: Oguz Ozturk <oguzkaganozt@gmail.com>
Do not enumerate stacked head/base branch names. An unfiltered pull_request trigger covers PRs against main and feature-branch bases. Signed-off-by: Oguz Ozturk <oguzkaganozt@gmail.com>
pull_request (unfiltered) plus workflow_dispatch is enough. Listing feature-branch names under push: was the same one-off trigger pattern. Signed-off-by: Oguz Ozturk <oguzkaganozt@gmail.com>
oguzkaganozt
merged commit Sep 23, 2026
9a4d7f1
into
autowarefoundation:feat/freertos-x5h-netif
4 checks passed
This was referenced Oct 1, 2026
oguzkaganozt
pushed a commit
that referenced
this pull request
Oct 8, 2026
#47 merged into feat/freertos-x5h-netif 17 seconds after #45 had squash-merged that branch into main. Its content therefore never reached main: actuation_param_profile.h, the build.sh --param-profile switch, the profile argument of check-elf-contract.sh and the before-profile CI artifact are all missing there. This re-applies the reviewed #47 squash commit (9a4d7f1) to main unchanged. The CI trigger change in it also matters for the stack above: pull_request is unfiltered, so a stacked pull request whose base is not main still runs this workflow. Signed-off-by: Yutaka Kondo <yutaka.kondo@youtalk.jp>
25 of 39 tasks
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.
Stacks on #45.
Adds a compile-time
ACTUATION_PARAM_PROFILEfor the X5H CR52 firmware:after(the default) is the tuned profile and keeps the five longitudinal-controller deceleration defaults this tree already carried, so an unconfigured build is unchanged in behaviour on every target and the S32Z2, Zephyr and POSIX targets are unaffected.beforeselects the CES 2026 untuned deceleration limits (stopped_acc-0.4,emergency_acc-0.75,emergency_jerk-1.0,min_acc-0.75,min_jerk-1.0).Selected with
build.sh --platform freertos-x5h --param-profile before|after. The profile name is printed in the FreeRTOS boot banner, which also placesactuation_param_profile=<name>in.rodata;check-elf-contract.shgains an optional third argument that asserts it, so which profile an image carries is machine-verifiable before it is ever flashed. CI builds the before profile into its own-ddirectory and uploads it as a separate artifact,freertos-x5h-before-elfs, deliberately distinct fromfreertos-x5h-elfsso an operator fetching a flash image cannot confuse the untuned demo baseline with the image that ships.Only the
afterimage is a behavioural no-op: the boot banner now carries the identity string on both x5h images, so their.rodatadiffers from their predecessors by exactly that string.Verified on hardware (2026-08-20). Both profiles were flashed onto an R-Car X5H Ironhide board and the MRM fault-injection scenario was run under each. Measured stop distance: before 52.96 m mean (3 runs), after 39.39 m mean (4 runs) — a 13.6 m / 34% difference, with the tuned profile reproducing to 0.33 m across six reflashes. Every run completed the MRM chain (
mrm=succeeded, final commanded velocity zero). A disassembly diff of the two builds confirms exactly five changed constants in the longitudinal controller and nothing else.The consuming side — the stop-distance measurement and the demo orchestrator — is a companion pull request in
autowarefoundation/openadkit.Why a compile-time switch, and not a parameter file
One question a reviewer will ask: why compile this in, when
declare_parameterdefaults can be overridden at run time with a parameter file? The run-time route works, but it leaves the firmware image ambiguous. The same ELF can then run as either profile, and which one it runs as depends on files that live outside the image. The compile-time switch stamps the profile name into.rodata, socheck-elf-contract.shreads the profile back out of the ELF alone. Before a board session we can prove which profile is about to be flashed, from the file we are about to flash and nothing else. That matters because thebeforeprofile is the untuned CES 2026 baseline. It brakes weakly on purpose. An operator must not be able to flash it while believing it is the tuned image that ships, and a parameter file cannot give that guarantee.