Autoware sensor-kit promotion¶
calibrex autoware promotion is a ROS-independent package adapter for a
calibration candidate. It creates a digest-bound, read-only plan before any
vehicle package is changed:
calibrex autoware promotion plan CANDIDATE \
--workspace-root /path/to/autoware \
--package-root /path/to/autoware/src \
--individual-params-root /path/to/autoware/src/individual_params \
--sensor-kit-description-root /path/to/autoware/src/sensor_kit/my_sensor_kit_description \
--vehicle-id my_vehicle --sensor-kit-id my_sensor_kit \
--profile production \
--output promotion.yaml
calibrex autoware promotion verify promotion.yaml --output promotion.verified.yaml
calibrex autoware smoke run promotion.verified.yaml --profile production \
--stage-command 'xacro_urdf=["xacro","..."]' \
--stage-command 'build_test=["colcon","build"]' \
--stage-command 'tf_static=["python","check_tf.py"]' \
--stage-command 'sensor_launch=["ros2","launch","..."]' \
--output smoke.yaml
calibrex autoware smoke verify smoke.yaml --plan promotion.verified.yaml
calibrex autoware promotion apply promotion.verified.yaml --smoke-artifact smoke.yaml
calibrex autoware promotion rollback promotion.verified.yaml
The adapter understands the package layout described by the Autoware sensor model guide:
individual_params/**/sensor_kit_calibration.yaml;- the vehicle/sensor-kit
sensors_calibration.yaml; - sensor-kit URDF/Xacro files; and
- YAML sensor and topic parameters.
The importer rejects duplicate YAML keys, conflicting duplicate child frames,
cycles, disconnected calibration edges, a missing base_link to
sensor_kit_base_link edge, non-unit/undeclared quaternion conventions, and
declarative topic/frame references that are not in the package graph. The
official guide specifies Euler [x, y, z, roll, pitch, yaw] values in meters
and radians and says that the mirrored individual_params calibration file
must be kept synchronized. Identical mirrored declarations are therefore
accepted; conflicting declarations are not.
Only PASS/ADOPT plans can be applied. Production plans additionally require
a PASS, production-admissible smoke artifact bound to the exact promotion
self-digest, candidate digest, and current package baseline. A developer plan
must explicitly use --profile developer; its application is labelled
developer-only and is not production/admissible. A Koide candidate additionally must
be the frozen pilot artifact with status: PASS, adoption_decision: ADOPT,
and a valid self-digest. Generic result candidates must carry an explicit
quality.grade: pass under the default policy. Applying rechecks the baseline
manifest and every patch input digest, backs up exact files inside the
explicit workspace root, then atomically replaces each target. Rollback
refuses to overwrite an intervening edit.
The core boundary does not import ROS, ros2, xacro, colcon, or a
perception implementation. calibrex autoware smoke is a downstream adapter:
it records argv-only subprocess/container/precomputed evidence, timeout and
resource/network/read-only policies, output digests/tails, immutable container
digests, and provenance. In this repository ROS is not installed, so unit tests
use controlled helper commands and precomputed artifacts; they are simulated
adapter tests, not evidence that a real ROS workspace passed.
Primary references: