Repository navigation
chore: sync humble to main for 0.53.2 - #13567
Merged
Merged
Conversation
…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>
Signed-off-by: ujinf74 <ujin@tukorea.ac.kr>
…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
requested review from
KSeangTan,
Kotakku,
Motsu-san,
PanConChicharron,
SakodaShintaro,
Shin-kyoto,
Sugar-98,
TaikiYamada4,
TakaHoribe,
YamatoAndo,
a-maumau,
dan-dnn,
danielsanchezaran,
go-sakayori,
ktro2828,
manato,
mkquda,
ogrex,
shmpwk,
soblin,
takayuki5168,
tkimura4,
tzhong518,
yhisaki,
yuki-takagi-66 and
zulfaqar-azmi-t4
as code owners
October 31, 2026 21:45
Codecov Report❌ Patch coverage is 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
*This pull request uses carry forward flags. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
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.
Description
This syncs the
humblebranch to a7b9d4b in themainbranch. That commit is the merge of the PR below, which moves the CUDA base packages toautoware_cuda.After this PR merges, the tag
0.53.2goes onhumble. As with0.53.1, the versions inpackage.xmlandCHANGELOG.rststay at0.53.0.The merge had one conflict, in
build_depends_stable.repos. The resolution keeps both sides: thecore/autoware_core1.10.0 pin ofhumble, and thecore/cuda/autoware_cudaandcore/cuda/cuda_blackboardentries ofmain.After the merge,
humblediffers frommainin these files only, as before:build_depends_stable.repos: thecore/autoware_corepin.github/workflows/build-and-test-reusable.yamland.github/workflows/check-build-depends.yaml: theoverlay_build_dependsinputPlease merge this PR with a merge commit, not a squash. The next changelog generation needs the
mainhistory inhumble.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_utilsandautoware_tensorrt_commonmoved toautoware_cuda.autoware_image_diagnostics,autoware_component_monitor,autoware_pose2twistandautoware_bluetooth_monitormoved 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
mainintohumblehad one conflict. After the resolution, the branch differs frommainonly in the threehumble-only files. Nothing was built.Merge
git merge --no-ff --no-commit origin/mainonorigin/humble(815d3f1b5c, tag0.53.1) reportedCONFLICT (content): Merge conflict in build_depends_stable.reposand no other conflict.git diff --cached origin/main --statlisted 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.reposholds no entry atuniverse/external/cuda_blackboard.humble.Search for users of the moved Index packages
git grepinautoware_launchat0.53.0and atmain, and inautoware_universemain, found no reference to the four packages that moved to the Autoware Index.