Skip to content

chore: sync humble to main for 0.53.2 - #13567

Merged
xmfcx merged 91 commits into
humblefrom
chore/release-humble-0.53.2
Oct 31, 2026
Merged

xmfcx merged 91 commits into
humblefrom
chore/release-humble-0.53.2

Conversation

@xmfcx

@xmfcx xmfcx commented Oct 31, 2026

Copy link
Copy Markdown
Contributor

Description

This syncs the humble branch to a7b9d4b in the main branch. That commit is the merge of the PR below, which moves the CUDA base packages to autoware_cuda.

After this PR merges, the tag 0.53.2 goes on humble. As with 0.53.1, the versions in package.xml and CHANGELOG.rst stay at 0.53.0.

The merge had one conflict, in build_depends_stable.repos. The resolution keeps both sides: the core/autoware_core 1.10.0 pin of humble, and the core/cuda/autoware_cuda and core/cuda/cuda_blackboard entries of main.

After the merge, humble differs from main in these files only, as before:

  • build_depends_stable.repos: the core/autoware_core pin
  • .github/workflows/build-and-test-reusable.yaml and .github/workflows/check-build-depends.yaml: the overlay_build_depends input

Please merge this PR with a merge commit, not a squash. The next changelog generation needs the main history in humble.

Related links

Parent Issue:

How was this PR tested?

See the verification block below.

Notes for reviewers

This release removes packages from autoware_universe, although it is a patch release:

  • autoware_cuda_dependency_meta, autoware_cuda_utils and autoware_tensorrt_common moved to autoware_cuda.
  • autoware_image_diagnostics, autoware_component_monitor, autoware_pose2twist and autoware_bluetooth_monitor moved to the Autoware Index.

Interface changes

None.

Effects on system behavior

None.

AI usage

AI usage: Claude Code made the merge, resolved the conflict, and wrote this description.

Self-review: Not reviewed yet.

Verification: The local merge of main into humble had one conflict. After the resolution, the branch differs from main only in the three humble-only files. Nothing was built.

Merge

  • git merge --no-ff --no-commit origin/main on origin/humble (815d3f1b5c, tag 0.53.1) reported CONFLICT (content): Merge conflict in build_depends_stable.repos and no other conflict.
  • After the resolution, git diff --cached origin/main --stat listed 3 files: build_depends_stable.repos (+4), .github/workflows/build-and-test-reusable.yaml (+13 -2), .github/workflows/check-build-depends.yaml (+1).
  • build_depends_stable.repos holds no entry at universe/external/cuda_blackboard.
  • Not run: a build of this branch. The CI of this PR builds the changed packages on humble.

Search for users of the moved Index packages

  • git grep in autoware_launch at 0.53.0 and at main, and in autoware_universe main, found no reference to the four packages that moved to the Autoware Index.

Koichi98 and others added 30 commits October 1, 2026 10:28
…to blockage_diag (#13074)

* feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to blockage_diag

Signed-off-by: Koichi Imai <koichi.imai.2@tier4.jp>

* refactor(autoware_pointcloud_preprocessor): drop the redundant agnocastlib declarations

autoware_agnocast_wrapper already does ament_export_dependencies(agnocastlib)
when ENABLE_AGNOCAST=1, so depending on autoware_agnocast_wrapper pulls
agnocastlib in transitively. The explicit find_package, ament_target_dependencies
and package.xml depend are not needed; autoware_topic_state_monitor has none of
them either.

Signed-off-by: Koichi Imai <kotty.0704@gmail.com>

---------

Signed-off-by: Koichi Imai <koichi.imai.2@tier4.jp>
Signed-off-by: Koichi Imai <kotty.0704@gmail.com>
…nsor.camera.rgb (#13409)

The spawn path accepts any sensor.camera.* blueprint and the publisher
lookup matches the same prefix, but publisher creation and the publish
dispatch compared the type exactly against sensor.camera.rgb. A mapping
naming CARLA's depth or semantic segmentation camera therefore spawned
the sensor, got a "Unknown sensor type" warning instead of publishers,
and then dropped every frame it produced into a debug log.

These cameras deliver the same BGRA frame through the same callback and
want the same pair of image/camera_info publishers, so match the prefix
in both places, as the other two paths already do.

Claude-Session: https://claude.ai/code/session_011TMdPd8VUDxUrFtckxg2AQ

Signed-off-by: ujinf74 <ujin@tukorea.ac.kr>
…is off (#13450)

`no_rendering_mode` turns the scene rendering off, yet the camera sensors in the sensor
mapping were still spawned in CARLA, where they can only ever return an empty image.

Worse, the same flag describes the case that matters: a CARLA server started without a
renderer (`CarlaUnreal.sh -nullrhi`) **segfaults as soon as a camera sensor is spawned on
it**. Every call the bridge makes afterwards fails with an opaque
`RuntimeError: std::exception`, so the logs point at whatever RPC came next rather than at
the camera. The ray-cast LiDAR needs no renderer and keeps producing points, which makes
such a server otherwise useful for headless LiDAR-only closed-loop runs.

A client cannot detect a renderer-less server: its world settings, blueprint library and
sensor attributes are byte-for-byte identical to a rendering one (verified by diffing a full
client-side dump of both), and probing by spawning a test camera is what kills it.

So follow `no_rendering_mode` and leave the cameras out of the CARLA spawn list, naming the
skipped sensors once in a warning. Every sensor that works without rendering is spawned as
before, the same sensor mapping now works with and without rendering, and the behaviour with
rendering on is unchanged.

Verified on CARLA 0.10 `-nullrhi` with the full 9-sensor mapping (6 RGB cameras) and
`no_rendering_mode:=True`: all six cameras are named in the warning and skipped, the ego
spawns, LiDAR publishes at 10.0 Hz, the camera topics stay silent, and the CARLA server
stays up - where previously it segfaulted (exit 139).

Signed-off-by: Masaya Kataoka <cld-masaya.kataoka@tier4.jp>
Co-authored-by: Masaya Kataoka <cld-masaya.kataoka@tier4.jp>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Max-Bin <vborisw@gmail.com>
…ed before startup (#13433)

A publisher that latches its initial pose on /initialpose and sends it once
normally does so long before this node has a CARLA world to place an ego in.
The node's volatile subscription is compatible with a TRANSIENT_LOCAL
publisher, so the two connect, but a volatile reader is never given the sample
that was latched before it arrived. The pose was silently lost and the ego
stayed wherever spawn_point had put it -- which defaults to a random point on
the map, so the run started somewhere else entirely.

Subscribe a second time asking for TRANSIENT_LOCAL, which is given that sample
on connection. The volatile subscription stays: RViz's "2D Pose Estimate"
publishes volatile, and a TRANSIENT_LOCAL reader is incompatible with it.

Signed-off-by: Masaya Kataoka <cld-masaya.kataoka@tier4.jp>
Co-authored-by: Masaya Kataoka <cld-masaya.kataoka@tier4.jp>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ead of the vehicle center (#13372)

* fix(autoware_carla_interface): publish the ego pose at base_link instead of the vehicle center

The sensor kit loader spawns sensors wheelbase/2 ahead of their base_link
calibration, so base_link is the rear axle and the CARLA actor origin is
the vehicle center. The GNSS pose, the ground-truth localization
(kinematic_state and map->base_link) and the RViz initial pose still used
the actor origin as base_link, which put the ego wheelbase/2 (1.4 m with
the default wheelbase) ahead of the sensors and of the other actors.
Apply the same wheelbase offset in those three places.

Signed-off-by: Tomoki Cho <tomoki225255@gmail.com>

* docs(autoware_carla_interface): describe the base_link offset in the README and the pose conversions

Note in the README that the sensor mapping's wheelbase also places base_link
wheelbase/2 behind the actor origin for the published poses, and that
spawn_point places the actor origin. Comment the reverse conversion of the RViz
initial pose and shorten the helper docstring to the line length. No behavior
change.

Signed-off-by: Tomoki Cho <tomoki225255@gmail.com>

* fix(autoware_carla_interface): move the ground truth twist to base_link

The ground truth odometry places the pose at base_link, but the twist was
still CARLA's velocity, so while turning twist.linear.y described a point
about 1.8 m ahead of the pose. Move the linear velocity to base_link as
v + omega x r, with the same wheelbase/2 offset as the pose, before the
CARLA-to-ROS conversion.

CARLA reports the velocity of the physics body's center of mass, whose
position the Python API does not expose, so the offset between it and the
actor origin (about 0.4 m on the Prius) remains as before.

Signed-off-by: Tomoki Cho <tomoki225255@gmail.com>

* docs(autoware_carla_interface): say the ground truth twist is shifted with the pose

CARLA reports the velocity of the center of mass, so shifting it by
wheelbase/2 leaves the twist about 0.4 m ahead of base_link rather than
at it. Describe the shift instead of claiming it reaches base_link. No
behavior change.

Signed-off-by: Tomoki Cho <tomoki225255@gmail.com>

---------

Signed-off-by: Tomoki Cho <tomoki225255@gmail.com>
…ing from the node (#13434)

* refactor(autoware_traffic_light_visualization): rename the ROI visualizer internals to snake_case

The functions inside traffic_light_roi_visualizer were camelCase, against
the Autoware naming convention. Rename them before the drawing logic is
separated from the node, so that the separation diff is a move and not a
move mixed with renames.

The two createRect() overloads, which were told apart by the type of
their second argument although they draw different things, become
draw_roi_with_id() and draw_roi_with_label(). Now the call sites say
which of the two they mean.

Nothing else changes: the characterization tests pass untouched, apart
from the function names quoted in their comments.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>

* refactor(autoware_traffic_light_visualization): pass the shape image directory into the drawing

load_shape_image() looked the directory up itself, through
ament_index_cpp, and cached it in a function-local static. That put a
package lookup and hidden state inside the code that is about to become
the ROS-free drawing logic.

The node now resolves the directory once in its constructor and passes
it down, so shape_draw.* no longer depends on ament_index_cpp and holds
no state. The value is the same, so nothing about the output changes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>

* refactor(autoware_traffic_light_visualization): look up the label words without mutating the node

`state2label_` is read with `operator[]`, which inserts a default-constructed entry for any code
the table does not list. The lookup writes. That is harmless where it sits today - the empty entry
is never read again - but it decides the shape of the separation that follows. The drawing is what
performs the lookup, so once the drawing moves out of the node it would have to be a non-const
object with non-const entry points, and the node would hold it as mutable state. Fixing it after
the move would mean changing that interface a second time.

So do it first. The table becomes a free function in the source file, with a function-local
`static const std::map` and `find()`, which answers with the same empty string for an unlisted code
without inserting anything. Nothing observable changes; what changes is that the code the next PR
moves no longer has a reason to be mutable.

Also drops the member and the `<map>` the header no longer needs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>

* refactor(autoware_traffic_light_visualization): separate the ROI drawing from the node

Everything the node did between receiving a synchronized set of messages and publishing the result
was drawing, and none of it needed rclcpp: the label lookup, the label-to-color parsing, matching a
ROI and a signal to a traffic light id, and the two loops that decide what gets a frame, an id and
a label box. Move it all into TrafficLightRoiVisualizer, which takes the input image and the
messages and hands back the image to publish, knowing nothing about topics or where the package is
installed. The node keeps what is ROS: parameters, the synchronizers, the lazy subscription and the
two publishers, so each callback is one call, one publish and a log line if the image cannot be
converted.

The visualizer holds nothing but the shape image directory and both of its entry points are const,
which is what the previous PR's lookup change bought: a drawing that inserted into a map while
reading it could not have been either.

The conversion to RGB8 goes with the drawing rather than staying behind, so the visualizer owns the
image it produces instead of writing into a buffer the node half-built, and hands back a message
rather than a cv_bridge pointer. That also means the node no longer holds a pointer that is null
when the conversion throws and dereferences it anyway on the way out - the publish now sits inside
the try, so that crash is not something to remember to avoid.

The split follows traffic_light_map_visualizer in this package: logic beside node, helpers in the
source file's anonymous namespace rather than the header, one library for both. The two entry
points stay separate because they are different algorithms, and which one runs is a property of the
synchronizer the node picked, not of the drawing.

Behavior is unchanged, and the characterization test is not edited at all. roi_visualizer.{hpp,cpp}
include no rclcpp, image_transport, ament_index_cpp or message_filters; cv_bridge is used, but only
in the source file, and its header pulls in sensor_msgs and OpenCV rather than rclcpp.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>

* refactor(autoware_traffic_light_visualization): name the node file after the node

Every other traffic light package pairs <logic>.cpp with <logic>_node.cpp - the classifier, the
fine detector, the map based detector, the selector, the arbiter, the multi camera fusion, and
traffic_light_map_visualizer in this very package. This one had roi_visualizer.cpp beside a
node.cpp, which reads fine on its own and not at all next to the others.

A rename and nothing else: the include guard, the include of the header, the path in
CMakeLists.txt and the include in the test. The component plugin name is untouched.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>

---------

Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
…es through autoware_node (#13453)

HeartbeatNode, DiagnosticsNode and FailSafeNode are agnocast_wrapper::Node,
so with ENABLE_AGNOCAST=1 the component_container_mt that
sub_default_adapi.launch.py loaded them into died. Rewrite the launch in
XML with <autoware_node>: loaded into the same container with
ENABLE_AGNOCAST=0, standalone with the heaphook with ENABLE_AGNOCAST=1.
Node names and parameters are unchanged.

Signed-off-by: Koichi Imai <kotty.0704@gmail.com>
…alculateSteeringAngles (#13459)

* fix(obstacle_velocity_limiter): normalize heading difference when calculating steering angles

Signed-off-by: Autumn60 <harada.akiro@gmail.com>

* add test for fix

Signed-off-by: Autumn60 <harada.akiro@gmail.com>

* fix(obstacle_velocity_limiter): use arc length instead of velocity when calculating steering angles

Signed-off-by: Autumn60 <harada.akiro@gmail.com>

* add test for fix

Signed-off-by: Autumn60 <harada.akiro@gmail.com>

* fix(obstacle_velocity_limiter): handle zero-length segments when calculating steering angles

Signed-off-by: Autumn60 <harada.akiro@gmail.com>

* add test for fix

Signed-off-by: Autumn60 <harada.akiro@gmail.com>

---------

Signed-off-by: Autumn60 <harada.akiro@gmail.com>
…cle projection (#13460)

* fix(obstacle_velocity_limiter): follow the turning circle in bicycleProjectionLine

Signed-off-by: Autumn60 <harada.akiro@gmail.com>

* style(pre-commit): autofix

---------

Signed-off-by: Autumn60 <harada.akiro@gmail.com>
Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
* feat(autoware_carla_interface): handle gear commands

The bridge never subscribed to /control/command/gear_cmd and reported
GearReport.DRIVE unconditionally, so the ego vehicle could not be put
into reverse and the gear status never reflected what Autoware asked
for. Reverse is required by anything that has to back up, freespace
parking in particular.

Subscribe to the gear command, map REVERSE and REVERSE_2 onto
carla.VehicleControl.reverse, hold the brake in NONE, NEUTRAL and PARK
so the vehicle never pulls away in a gear it should not move in, and
report the selected gear on /vehicle/status/gear_status instead of a
constant.

Until a gear command arrives the reported gear stays DRIVE, which is
what the bridge did before this change.

Signed-off-by: inf <ujin@tukorea.ac.kr>

* fix(autoware_carla_interface): select reverse gear explicitly

The control this bridge builds shifts manually and pins gear 1, so the
direction comes from the gear number, not from the reverse flag alone: a
REVERSE command set the flag and left the vehicle in forward gear 1. Set
the gear alongside the flag, in both directions, so the standing control
does not keep a stale reverse gear after shifting out of REVERSE either.

Signed-off-by: inf <ujin@tukorea.ac.kr>

---------

Signed-off-by: inf <ujin@tukorea.ac.kr>
Co-authored-by: Masaya Kataoka <ms.kataoka@gmail.com>
* feat(autoware_evaluation_adapter): apply agnocast_wrapper::Node

Make AutowareEngage and VelocityLimit autoware::agnocast_wrapper::Nodes and launch them through autoware_node, so they run on Agnocast with ENABLE_AGNOCAST=1 and the container is only started without Agnocast.

Signed-off-by: Koichi Imai <kotty.0704@gmail.com>

* style(autoware_evaluation_adapter): use equals substitution

Signed-off-by: Koichi Imai <kotty.0704@gmail.com>

---------

Signed-off-by: Koichi Imai <kotty.0704@gmail.com>
Signed-off-by: Mete Fatih Cırıt <mfc@autoware.org>
…adarObjectsAdapter conversion (#13445)

* test(autoware_radar_objects_adapter): mark the phases of the existing characterization cases

The five cases from #13405 get the same arrange / act / assert
comments as the conversion cases that follow, and prepare their
messages before the node is started, so that the whole file reads as
variations of one shape. No case changes what it checks.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>

* test(autoware_radar_objects_adapter): pin the detected object conversion

One radar object goes in under an ARS548-like radar info and the
detected object that comes out is compared with it: the fields copied
when the radar info declares them and filled from the default_*
parameters when it does not, the orientation quaternion, the constant
kinematics flags, the velocity and its covariance rotated into the
object frame, the position covariance copied unrotated, and the masking
of INVALID_COV_VALUE. The rotation cases use a quarter turn so that the
expected values follow by hand. An empty radar objects message giving
empty outputs is pinned first, as the smallest observable conversion.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>

* test(autoware_radar_objects_adapter): pin the classification remap

Each radar classification becomes one perception classification with
the label looked up in the classification_remap table and the
probability copied. Pinned: the built-in table (identity except HAZARD
to UNKNOWN), the shipped remap of MOTORCYCLE and BICYCLE to CAR with
the duplicate CAR entries it produces and the other labels left alone,
radar labels the table has no entry for (BUS, TRAILER, OVER_DRIVABLE,
UNDER_DRIVABLE) becoming UNKNOWN, and a parameter value that is not a
perception label name mapping to UNKNOWN.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>

* test(autoware_radar_objects_adapter): pin the tracked object conversion

The tracked object made of a radar object shares pose, twist, shape and
classification with the detected object and adds identity, acceleration
and the stationary flag. Pinned: the UUID layout (object id, then 8
bytes of the input topic name's hash, then zeros), only
MOVEMENT_STATUS_DYNAMIC counting as moving, the acceleration and its
covariance rotated like the velocity, and the shared fields matching
the detected object exactly.

acceleration.z is left unpinned on purpose: the availability flag it
depends on is never set by the node, so its value is not defined today.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>

---------

Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* feat(surround_obstacle_stop): add height filter for pointcloud

Replace the hard-coded z range (-10.0, 10.0) of the surround obstacle
stop pointcloud filter with pointcloud.min_height and
vehicle_height + pointcloud.height_buffer, same as obstacle_stop, so
that low obstacle points such as curbs do not cause unnecessary stops.

Applied to both autoware_trajectory_modifier and
autoware_minimum_rule_based_planner, with parameter definitions,
schema, config and integration tests updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: yoshiri <yoshiyoshidetteiu@gmail.com>

* refactor params

Signed-off-by: mohammad alqudah <mohammad.alqudah.dev@gmail.com>

* use correct param

Signed-off-by: mohammad alqudah <mohammad.alqudah.dev@gmail.com>

* fix test

Signed-off-by: mohammad alqudah <mohammad.alqudah.dev@gmail.com>

---------

Signed-off-by: yoshiri <yoshiyoshidetteiu@gmail.com>
Signed-off-by: mohammad alqudah <mohammad.alqudah.dev@gmail.com>
Co-authored-by: yoshiri <yoshiyoshidetteiu@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… both vehicles brake (#13437)

* fix(autonomous_emergency_braking): account for closest approach while both vehicles brake

The RSS distance subtracted the lead's full braking distance, which underestimates the required gap when the ego decelerates faster than the lead. Check the minimum separation during the braking phase and clamp the distance at zero.

Signed-off-by: Benjamin Przybocki <benjamin.przybocki@gmail.com>

* refactor(autonomous_emergency_braking): use early returns and descriptive names in RSS calculation

Signed-off-by: Benjamin Przybocki <benjamin.przybocki@gmail.com>

* test(autonomous_emergency_braking): add closest-approach unit tests and document RSS calculation

Signed-off-by: Benjamin Przybocki <benjamin.przybocki@gmail.com>

---------

Signed-off-by: Benjamin Przybocki <benjamin.przybocki@gmail.com>
include yaw direction for route search

Signed-off-by: Go Sakayori <go.sakayori@tier4.jp>
…dencies in package.xml (#13466)

* fix(autoware_motion_velocity_dynamic_obstacle_stop_module): fix dependencies in package.xml

- Add lanelet2_core. src/footprint.cpp and test/test_object_filtering.cpp include lanelet2_core headers.
- Remove autoware_route_handler. No source, test, CMake, or config file uses it.

Signed-off-by: Mete Fatih Cırıt <mfc@autoware.org>

* fix(autoware_motion_velocity_dynamic_obstacle_stop_module): remove unused lanelet2_core includes

src/footprint.cpp and test/test_object_filtering.cpp include lanelet2_core headers, but they use no symbol from them. Remove the two includes and the lanelet2_core dependency.

Signed-off-by: Mete Fatih Cırıt <mfc@autoware.org>

---------

Signed-off-by: Mete Fatih Cırıt <mfc@autoware.org>
…dependencies (#13467)

* fix(autoware_motion_velocity_road_user_stop_module): add missing dependencies to package.xml

The code uses these packages directly, but package.xml did not declare them. The build worked only because other dependencies brought them in.

- autoware_internal_planning_msgs (PlanningFactor, SafetyFactor, SafetyFactorArray)
- autoware_lanelet2_utils (autoware/lanelet2_utils/intersection.hpp)
- autoware_planning_factor_interface (PlanningFactorInterface)
- autoware_utils_debug (TimeKeeper, ScopedTimeTrack, ProcessingTimeDetail)
- autoware_utils_rclcpp (get_or_declare_parameter)
- lanelet2_core (lanelet2_core headers and geometry functions)
- lanelet2_routing (RoutingGraph, RoutingGraphContainer)
- nav_msgs (Odometry)
- std_msgs (ColorRGBA)
- unique_identifier_msgs (UUID)

No declared dependency was removed. All of them are in use.

Signed-off-by: Mete Fatih Cırıt <mfc@autoware.org>

* fix(autoware_motion_velocity_road_user_stop_module): declare eigen and remove unused includes

The module uses Eigen::Vector2d but did not declare eigen. Add eigen and eigen3_cmake_module, and include Eigen/Core directly.

Remove three includes that the code does not use: autoware/lanelet2_utils/intersection.hpp, autoware_utils_system/stop_watch.hpp and nav_msgs/msg/odometry.hpp with its unused Odometry alias. Remove the autoware_lanelet2_utils, autoware_utils_system and nav_msgs dependencies that only these includes needed.

Signed-off-by: Mete Fatih Cırıt <mfc@autoware.org>

* fix(autoware_motion_velocity_road_user_stop_module): include time_keeper.hpp directly

The module header uses autoware_utils_debug::TimeKeeper, but the type came in only through the includes of autoware_velocity_smoother. Include the header that declares it.

Signed-off-by: Mete Fatih Cırıt <mfc@autoware.org>

---------

Signed-off-by: Mete Fatih Cırıt <mfc@autoware.org>
…terminal poses (#13461)

Signed-off-by: Max-Bin <vborisw@gmail.com>
…gic separation (#13465)

* docs(autoware_radar_objects_adapter): list both output topics in the README

The node has published detections and tracks since #10556, but the
README still described a single ~/output/objects topic.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>

* refactor(autoware_radar_objects_adapter): remove an unused flag and fix the field names in warnings

The warnings for a missing size field said shape_x/y/z; the fields are
called size_x/y/z. orientation_rate_available_ was computed and never
read. The comment on the classification remap described a type the
member does not have.

No behavior changes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>

* fix(autoware_radar_objects_adapter): decide acceleration.z from the radar info like the other z fields

acceleration_z_available_ was declared but never assigned: the flag
that selects between the radar object's acceleration.z and the
default_acceleration_z parameter was read uninitialized, so the z
component of a tracked object's acceleration was undefined. It is now
set from the radar info's acceleration_z field, with the same warning
the other optional fields get when it is missing, and all availability
flags are initialized to false.

On an ARS548, which does not declare acceleration_z, the tracked
acceleration.z is now always default_acceleration_z (0.0 in the shipped
configuration).

Two characterization cases pin the declared and the undeclared path.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>

---------

Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…variance arrays (#13468)

`pose_covariance` and `twist_covariance` of `types::DynamicObject` had no initializer.
The object is default-initialized in the processor and tracker base, each motion model
writes only the entries it estimates (8-12 of 36), and `toTrackedObjectMsg()` copies all
36 into the published message, so the unwritten entries carried stack garbage that
differed between processes. Value-initialize both arrays so those entries are 0.

Signed-off-by: lei.gu <lei.gu@tier4.jp>
… reduce the characterization suite (#13454)

* test(autoware_traffic_light_visualization): unit test the ROI drawing on its own

Now that the drawing is a class of its own, it can be tested by calling it: an image message and
the detection messages in, the drawn image out, pixels read off the result. No executor, no
topics, no waiting - 26 cases run in 28 ms, where the characterization tests spend seconds each
waiting for discovery and delivery.

That budget buys the cases the characterization tests left out on purpose, because reaching them
through topics was not worth it: the two places drawing gives up quietly (a ROI at the origin, and
a ROI so close to the top edge that its label box would not fit), an encoding cv_bridge cannot
convert, a color code no message defines, and unknown-unknown, which is how an invalid recognition
actually reaches this node.

The probes are placed to fail when they should. A label box is only as wide as the icon and the
confidence it holds, so a point chosen to clear a full one sits outside a narrow one - a test
asserting the box is absent would then pass while it is drawn. Probing near the box's top left
instead covers every width, and the top rows are also the only ones the id text cannot reach.
Checked by mutation: drawing nothing fails 21 of the 26, and drawing a label box where there
should be none fails exactly the two tests that deny it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>

* test(autoware_traffic_light_visualization): reduce the characterization suite to a node test

The drawing now has unit tests that call it directly, so the cases that drove the node over topics
to check a pixel are paying for an executor, discovery and delivery to learn what a 1 ms unit test
already says. Fourteen of the twenty-five go.

What stays is what a unit test cannot answer, because it is a property of the node and not of the
drawing: that the node refuses to start without its parameters, that it subscribes to its inputs
only while something watches its output and picks the fourth input from a parameter, that the
synchronizer will not fire while one of its topics is missing, and that both publisher paths
deliver. Two drawing cases remain, one per synchronizer, to show that the callback reached the
drawing at all - they check that something was drawn in the signal color, not what.

No test that stays is edited. The constants and helpers the removed cases were the only users of
go with them, and the file header and one section comment are rewritten to describe what the file
is now.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>

* test(autoware_traffic_light_visualization): turn what is left into the node's own test

The characterization suite existed to catch a fatal regression while the drawing was moved out of
the node, and that move is done. The eleven cases it still holds are not characterizing anything
any more - they are the node's integration test, and the file should say so.

Rename it to test_roi_visualizer_node.cpp, next to the test_roi_visualizer.cpp that covers the
drawing, which is the pair traffic_light_map_visualizer already has in this package. The fixture
and the CMake target follow the file. The two cases that drive the node end to end are renamed
from Visualization_ to Pipeline_: they are not pinning what is drawn, which the unit tests do now,
but that a synchronized set of messages reaches the drawing and comes back out.

No case is added, removed or rewritten. The file header says what the file is for now.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>

* test(autoware_traffic_light_visualization): make the node test's phases explicit

Arrange, Act and Assert, labelled, as @interimadd suggested on #13445. The eleven cases that came
through the move unedited are relabelled here rather than in the move itself, so that the move
stays a move and this stays a restyle.

Where the line falls is the interesting part, and it is not the same for every case:

- the two that construct a node put the options in Arrange and the throw in Act and Assert
- the one that checks nothing is subscribed acts by pumping the executor, which is what gives the
  lazy subscription timer a chance to run
- the two that check what gets subscribed act by subscribing to the output, because that is the
  event the node reacts to; `start_node()` alone is Arrange
- the rest subscribe during Arrange and act by publishing, either a subset of the inputs or a
  complete set

No case changes what it does. The unit tests added earlier in this PR are written this way from
the start.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>

* test(autoware_traffic_light_visualization): drop the articles from the unit test names

@interimadd pointed out on the review that "A", "An" and "The" are uncommon in this repository's
test names and make the word boundaries harder to read. Twenty-five of the twenty-six are
renamed; the three the review named are renamed exactly as suggested, and the rest follow the same
rule.

Two of them lose more than an article, because removing it left the name clumsy:
AColorCodeNoOneDefinesFallsBackToTheOffWhite is UndefinedColorCodeFallsBackToOffWhite, as
suggested, and AnInvalidRecognitionIsWhiteLikeAnArrow is InvalidRecognitionIsWhiteLikeArrow.

AnyConvertibleEncodingComesBackAsRgb8 keeps its first word: "Any" is not an article there, it is
the point of the case.

Names only; no case changes what it does.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>

* test(autoware_traffic_light_visualization): stop the node test from checking what the unit tests draw

The two cases that drive the node end to end asserted the same pixels as their
unit test counterparts, so they read as copies of RoiWithSignalGetsFrameAndLabelBox
and RoughAndFineWithSignalDrawBothFramesAndOneLabel. Raised by @sasakisasaki in
review on #13454.

What they add is not the drawing but that a synchronized set of messages reaches
it and comes back out on the output topic, one case per synchronizer. The file
header already said the drawing is not their subject; the assertions had not
followed.

Each now asserts what the two publisher cases beside them already asserted: the
output is RGB8, and one pixel carries the signal color. For the four input
synchronizer that pixel is the rough ROI's corner, which only
visualize_with_rough_rois() ever paints, so it still tells the two callbacks
apart. The label box probes go with the assertions that used them.

Checked by mutation: skipping the rough frame fails exactly the two cases that
drive the four input synchronizer, and drawing nothing in visualize() fails
exactly the two that drive the three input one.

The note above the fourth case was stale as well. It said each callback carries
its own copy of the publisher branch, which has not been true since the node and
the drawing were separated - both publish through one helper.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>

* test(autoware_traffic_light_visualization): cover every edge the label box can cross

draw_shape() refuses to draw the label box when it would fall outside the
image, and it tests all four of its edges in one if. Only the top one had a
case. Raised by @a-maumau in review on #13454.

The three added here are the right edge, the bottom edge and the left edge. The
left one cannot be reached by a ROI as the message stands - x_offset is uint32,
so it cannot state a negative x - but the guard belongs to the drawing, not to
the type that feeds it today, and a negative offset does reach draw_shape(): it
wraps into the uint32 field and wraps back when cv::Point holds it as an int.

These are not lines to color in. Without the guard, the box is cut from the
image by a rectangle that reaches outside it and OpenCV raises rather than
clipping, so three of the four cases turn into a throw out of visualize().
Checked by mutation: disabling the guard fails exactly these four and nothing
else.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>

---------

Signed-off-by: Kentaro NAGATOMO <kentaro.nagatomo@tier4.jp>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
…zer (#13163)

* move package

Signed-off-by: Takagi, Isamu <isamu.takagi@tier4.jp>

* use localization interface

Signed-off-by: Takagi, Isamu <isamu.takagi@tier4.jp>

* update design file

Signed-off-by: Takagi, Isamu <isamu.takagi@tier4.jp>

---------

Signed-off-by: Takagi, Isamu <isamu.takagi@tier4.jp>
Co-authored-by: Junya Sasaki <junya.sasaki@tier4.jp>
…llback-isolated agnocast executor (#13478)

Signed-off-by: atsushi421 <atsushi.yano.2@tier4.jp>
…mmands on the callback-isolated agnocast executor (#13479)

Signed-off-by: atsushi421 <atsushi.yano.2@tier4.jp>
…lback-isolated agnocast executor (#13477)

Signed-off-by: atsushi421 <atsushi.yano.2@tier4.jp>
…lated agnocast executor (#13480)

Signed-off-by: atsushi421 <atsushi.yano.2@tier4.jp>
…k-isolated agnocast executor (#13481)

Signed-off-by: atsushi421 <atsushi.yano.2@tier4.jp>
…nce_status (#13388)

Keep the original TensorRT/ONNX load exception on inference_status instead of
replacing it with a generic message on each planning tick. Add model path
key-values for easier Foxglove and diagnostics triage.

Migrated from tier4#3391 (diffusion planner scope only).

Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@xmfcx
xmfcx merged commit 62a5739 into humble Oct 31, 2026
37 of 42 checks passed
@xmfcx
xmfcx deleted the chore/release-humble-0.53.2 branch October 31, 2026 21:46
@github-project-automation github-project-automation Bot moved this from To Triage to Done in Software Working Group Oct 31, 2026
@codecov

codecov Bot commented Oct 31, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 66.80851% with 312 lines in your changes missing coverage. Please review.
✅ Project coverage is 38.29%. Comparing base (16af04f) to head (ea772b0).
⚠️ Report is 94 commits behind head on humble.

Files with missing lines Patch % Lines
...ediction/lib/predictor_vehicle/path_processing.cpp 43.05% 123 Missing ⚠️
...e_diffusion_planner/src/diffusion_planner_node.cpp 0.00% 35 Missing ⚠️
.../autoware_pure_pursuit_lateral_controller_node.cpp 51.11% 22 Missing ⚠️
...based_prediction/src/map_based_prediction_node.cpp 0.00% 22 Missing ⚠️
perception/autoware_ptv3/lib/ptv3_trt.cpp 0.00% 20 Missing ⚠️
...rsuit/src/autoware_pure_pursuit/ros_log_writer.cpp 0.00% 13 Missing ⚠️
..._lateral_controller/src/mpc_lateral_controller.cpp 85.88% 12 Missing ⚠️
...ral_controller/src/mpc_lateral_controller_node.cpp 93.37% 12 Missing ⚠️
...on/src/traffic_light_roi_visualizer/shape_draw.hpp 27.27% 8 Missing ⚠️
...ontrol/autoware_mpc_lateral_controller/src/mpc.cpp 62.50% 6 Missing ⚠️
... and 16 more
Additional details and impacted files
@@            Coverage Diff             @@
##           humble   #13567      +/-   ##
==========================================
+ Coverage   37.43%   38.29%   +0.85%     
==========================================
  Files        2030     2030              
  Lines      142123   141807     -316     
  Branches    52334        0   -52334     
==========================================
+ Hits        53206    54301    +1095     
+ Misses      88917    87506    -1411     
Flag Coverage Δ *Carryforward flag
full-suite 38.29% <66.80%> (+17.52%) ⬆️ Carriedforward from 1a411ff

*This pull request uses carry forward flags. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

component:common Common packages from the autoware-common repository. (auto-assigned) component:control Vehicle control algorithms and mechanisms. (auto-assigned) component:evaluator Evaluation tools for planning, localization etc. (auto-assigned) component:localization Vehicle's position determination in its environment. (auto-assigned) component:perception Advanced sensor data processing and environment understanding. (auto-assigned) component:planning Route planning, decision-making, and navigation. (auto-assigned) component:sensing Data acquisition from sensors, drivers, preprocessing. (auto-assigned) component:simulation Virtual environment setups and simulations. (auto-assigned) component:system System design and integration. (auto-assigned) run:build-and-test-differential Mark to enable build-and-test-differential workflow. (used-by-ci) type:ci Continuous Integration (CI) processes and testing. (auto-assigned) type:documentation Creating or refining documentation. (auto-assigned)

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.