Repository navigation
Description
Checklist
- I've read the contribution guidelines.
- I've searched other issues and no duplicate issues were found.
- I'm convinced that this is not my fault but a bug.
Description
blind_spot never stops the ego for a cyclist on the inside of a right turn (right-hand traffic), even when the cyclist is perceived as BICYCLE with correct velocity and predicted paths and rides inside the attention area.
The ego's passage time interval is computed between two lines whose order is mirrored by turn direction:
https://github.com/autowarefoundation/autoware_universe/blob/f81a3bf089/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/scene.cpp#L184-L192
https://github.com/autowarefoundation/autoware_universe/blob/f81a3bf089/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/experimental/scene.cpp#L237-L245
const auto & first_line = (turn_direction_ == TurnDirection::Left)
? virtual_ego_straight_path_after_turning
: virtual_blind_lane_boundary_after_turning;
const auto & second_line = (turn_direction_ == TurnDirection::Left)
? virtual_blind_lane_boundary_after_turning
: virtual_ego_straight_path_after_turning;Both lines are built relative to the turn (the ego's straight-on edge, and the blind side's road edge carried through the junction), so the ego always crosses virtual_ego_straight_path_after_turning first and virtual_blind_lane_boundary_after_turning second, for either turn direction. Swapping them for a right turn makes "entry" the later crossing, so the interval comes out reversed (exit before entry), e.g. the debug marker ego_passage_interval reads [5.57, 5.52] every frame. The collision check against the object's passage interval then never overlaps, and the decision stays Safe until OverPassJudge.
The mirroring is correct for the object side (ego_path_lanelet.leftBound() / rightBound(), L373-L378), only the ego side is wrong.
The same code is present in 0.47.0, 0.48.0, 0.49.0 and main (f81a3bf).
Expected behavior
On a right turn with a bicycle approaching on the right (inside), the ego passage interval is [entry, exit] with entry < exit, the module reports Unsafe, and the ego stops before the turn.
Actual behavior
ego_passage_interval is reversed ([5.57, 5.52]), the module stays Safe and the ego turns across the cyclist (contact in 2/2 runs).
With the ego lines taken in the left-turn order for both directions (no other change), the same scenario gives ego_passage_interval [5.13, 11.14], the decision goes Unsafe (time to collision 4.0 -> 1.4 s), and the ego stops ~4 m before the turn and yields: 3/3 runs without contact.
Steps to reproduce
- Autoware 1.5.0 (blind_spot 0.48.0, experimental plugin),
lidar_detection_model:=centerpointso the cyclist is classifiedBICYCLE. - CARLA 0.9.16 Town01, ego at ~4 m/s turning right at a T junction; a bicycle at 5-6.6 m/s riding straight on, in the same lane, ~1.4 m right of the lane centre, starting ~7 m behind the ego.
- Watch
/planning/.../blind_spotdebug markers (ego_passage_interval) and the cooperate status.
The scenario (OpenSCENARIO, run through scenario_simulator_v2 with a CARLA backend) is public: https://github.com/NEWSLabNTU/carla-scenario-bridge/blob/main/scenarios/demo/town01_i6_cyclist_inside.xosc
Versions
- OS: Ubuntu 22.04
- ROS 2: Humble
- Autoware: 1.5.0 (autoware_behavior_velocity_blind_spot_module 0.48.0); code unchanged on main f81a3bf
Possible causes
Ego-side line order mirrored by turn direction (see above); likely carried over from left-hand-traffic use, where the blind spot is on the left and the bug does not show.
Additional context
Proposed fix: use virtual_ego_straight_path_after_turning as the first line and virtual_blind_lane_boundary_after_turning as the second for both turn directions, in scene.cpp and experimental/scene.cpp. Happy to open a PR.
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsTo Triage
Activity
test(blind_spot): reproduce the reversed ego passage interval on righ…
fix(blind_spot): take the ego passage lines in the same order for rig…
jerry73204 commentedon Oct 18, 2026
I pushed a fix with a unit test to our fork:
NEWSLabNTU/autoware_universe@main...fix/blind-spot-right-turn-ego-passage
(branch
fix/blind-spot-right-turn-ego-passage, onmainf81a3bf).test/test_ego_passage_interval.cppchecks a right turn against its mirrored left turn. On the current line order it fails (left[3.08, 5.60]s, mirrored right[4.56, 4.40]s); with the fix both give[3.08, 5.60]s.I'll open the PR from that branch if the approach looks right.
This comment, the issue analysis and the fix were written by Claude (Anthropic's AI assistant) via Claude Code, working on behalf of @jerry73204, who reviewed them before posting.
jerry73204 commentedon Oct 18, 2026
Opened #13511 with the fix and the unit test from the branch above (unchanged apart from the test file's copyright header).
Disclosure: this comment, PR #13511, the issue analysis and the fix were written by Claude (Anthropic's AI assistant) via Claude Code, working on behalf of @jerry73204, who reviewed them before posting.