Skip to content

Commit 2ffe399

Browse files
authored
Merge branch 'main' into feat/lidar_centerpoint/remove_deprecated_files
2 parents c05675d + 4b784b4 commit 2ffe399

File tree

10 files changed

+107
-33
lines changed

10 files changed

+107
-33
lines changed

planning/behavior_path_avoidance_module/include/behavior_path_avoidance_module/data_structs.hpp

-3
Original file line numberDiff line numberDiff line change
@@ -443,9 +443,6 @@ struct AvoidLine : public ShiftLine
443443
// Distance from ego to end point in Frenet
444444
double end_longitudinal = 0.0;
445445

446-
// for unique_id
447-
UUID id{};
448-
449446
// for the case the point is created by merge other points
450447
std::vector<UUID> parent_ids{};
451448

planning/behavior_path_avoidance_module/include/behavior_path_avoidance_module/scene.hpp

+2
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,8 @@ class AvoidanceModule : public SceneModuleInterface
404404

405405
bool safe_{true};
406406

407+
std::optional<UUID> ignore_signal_{std::nullopt};
408+
407409
std::shared_ptr<AvoidanceHelper> helper_;
408410

409411
std::shared_ptr<AvoidanceParameters> parameters_;

planning/behavior_path_avoidance_module/include/behavior_path_avoidance_module/utils.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ double calcDistanceToAvoidStartLine(
176176
const std::shared_ptr<const PlannerData> & planner_data,
177177
const std::shared_ptr<AvoidanceParameters> & parameters);
178178

179-
TurnSignalInfo calcTurnSignalInfo(
179+
std::pair<TurnSignalInfo, bool> calcTurnSignalInfo(
180180
const ShiftedPath & path, const ShiftLine & shift_line, const double current_shift_length,
181181
const AvoidancePlanningData & data, const std::shared_ptr<const PlannerData> & planner_data);
182182
} // namespace behavior_path_planner::utils::avoidance

planning/behavior_path_avoidance_module/src/scene.cpp

+16-1
Original file line numberDiff line numberDiff line change
@@ -918,19 +918,34 @@ BehaviorModuleOutput AvoidanceModule::plan()
918918

919919
BehaviorModuleOutput output;
920920

921+
const auto is_ignore_signal = [this](const UUID & uuid) {
922+
if (!ignore_signal_.has_value()) {
923+
return false;
924+
}
925+
926+
return ignore_signal_.value() == uuid;
927+
};
928+
929+
const auto update_ignore_signal = [this](const UUID & uuid, const bool is_ignore) {
930+
ignore_signal_ = is_ignore ? std::make_optional(uuid) : std::nullopt;
931+
};
932+
921933
// turn signal info
922934
if (path_shifter_.getShiftLines().empty()) {
923935
output.turn_signal_info = getPreviousModuleOutput().turn_signal_info;
936+
} else if (is_ignore_signal(path_shifter_.getShiftLines().front().id)) {
937+
output.turn_signal_info = getPreviousModuleOutput().turn_signal_info;
924938
} else {
925939
const auto original_signal = getPreviousModuleOutput().turn_signal_info;
926-
const auto new_signal = utils::avoidance::calcTurnSignalInfo(
940+
const auto [new_signal, is_ignore] = utils::avoidance::calcTurnSignalInfo(
927941
linear_shift_path, path_shifter_.getShiftLines().front(), helper_->getEgoShift(), avoid_data_,
928942
planner_data_);
929943
const auto current_seg_idx = planner_data_->findEgoSegmentIndex(spline_shift_path.path.points);
930944
output.turn_signal_info = planner_data_->turn_signal_decider.use_prior_turn_signal(
931945
spline_shift_path.path, getEgoPose(), current_seg_idx, original_signal, new_signal,
932946
planner_data_->parameters.ego_nearest_dist_threshold,
933947
planner_data_->parameters.ego_nearest_yaw_threshold);
948+
update_ignore_signal(path_shifter_.getShiftLines().front().id, is_ignore);
934949
}
935950

936951
// sparse resampling for computational cost

planning/behavior_path_avoidance_module/src/utils.cpp

+71-26
Original file line numberDiff line numberDiff line change
@@ -250,16 +250,37 @@ void pushUniqueVector(T & base_vector, const T & additional_vector)
250250
base_vector.insert(base_vector.end(), additional_vector.begin(), additional_vector.end());
251251
}
252252

253+
bool isAvoidShift(
254+
const double start_shift_length, const double end_shift_length, const double threshold)
255+
{
256+
return std::abs(start_shift_length) < threshold && std::abs(end_shift_length) > threshold;
257+
}
258+
259+
bool isReturnShift(
260+
const double start_shift_length, const double end_shift_length, const double threshold)
261+
{
262+
return std::abs(start_shift_length) > threshold && std::abs(end_shift_length) < threshold;
263+
}
264+
265+
bool isLeftMiddleShift(
266+
const double start_shift_length, const double end_shift_length, const double threshold)
267+
{
268+
return start_shift_length > threshold && end_shift_length > threshold;
269+
}
270+
271+
bool isRightMiddleShift(
272+
const double start_shift_length, const double end_shift_length, const double threshold)
273+
{
274+
return start_shift_length < threshold && end_shift_length < threshold;
275+
}
276+
253277
bool existShiftSideLane(
254278
const double start_shift_length, const double end_shift_length, const bool no_left_lanes,
255-
const bool no_right_lanes)
279+
const bool no_right_lanes, const double threshold)
256280
{
257-
constexpr double THRESHOLD = 0.1;
258281
const auto relative_shift_length = end_shift_length - start_shift_length;
259282

260-
const auto avoid_shift =
261-
std::abs(start_shift_length) < THRESHOLD && std::abs(end_shift_length) > THRESHOLD;
262-
if (avoid_shift) {
283+
if (isAvoidShift(start_shift_length, end_shift_length, threshold)) {
263284
// Left avoid. But there is no adjacent lane. No need blinker.
264285
if (relative_shift_length > 0.0 && no_left_lanes) {
265286
return false;
@@ -271,9 +292,7 @@ bool existShiftSideLane(
271292
}
272293
}
273294

274-
const auto return_shift =
275-
std::abs(start_shift_length) > THRESHOLD && std::abs(end_shift_length) < THRESHOLD;
276-
if (return_shift) {
295+
if (isReturnShift(start_shift_length, end_shift_length, threshold)) {
277296
// Right return. But there is no adjacent lane. No need blinker.
278297
if (relative_shift_length > 0.0 && no_right_lanes) {
279298
return false;
@@ -285,8 +304,7 @@ bool existShiftSideLane(
285304
}
286305
}
287306

288-
const auto left_middle_shift = start_shift_length > THRESHOLD && end_shift_length > THRESHOLD;
289-
if (left_middle_shift) {
307+
if (isLeftMiddleShift(start_shift_length, end_shift_length, threshold)) {
290308
// Left avoid. But there is no adjacent lane. No need blinker.
291309
if (relative_shift_length > 0.0 && no_left_lanes) {
292310
return false;
@@ -298,8 +316,7 @@ bool existShiftSideLane(
298316
}
299317
}
300318

301-
const auto right_middle_shift = start_shift_length < THRESHOLD && end_shift_length < THRESHOLD;
302-
if (right_middle_shift) {
319+
if (isRightMiddleShift(start_shift_length, end_shift_length, threshold)) {
303320
// Right avoid. But there is no adjacent lane. No need blinker.
304321
if (relative_shift_length < 0.0 && no_right_lanes) {
305322
return false;
@@ -314,6 +331,23 @@ bool existShiftSideLane(
314331
return true;
315332
}
316333

334+
bool isNearEndOfShift(
335+
const double start_shift_length, const double end_shift_length, const Point & ego_pos,
336+
const lanelet::ConstLanelets & original_lanes, const double threshold)
337+
{
338+
using boost::geometry::within;
339+
using lanelet::utils::to2D;
340+
using lanelet::utils::conversion::toLaneletPoint;
341+
342+
if (!isReturnShift(start_shift_length, end_shift_length, threshold)) {
343+
return false;
344+
}
345+
346+
return std::any_of(original_lanes.begin(), original_lanes.end(), [&ego_pos](const auto & lane) {
347+
return within(to2D(toLaneletPoint(ego_pos)), lane.polygon2d().basicPolygon());
348+
});
349+
}
350+
317351
bool straddleRoadBound(
318352
const ShiftedPath & path, const ShiftLine & shift_line, const lanelet::ConstLanelets & lanes,
319353
const vehicle_info_util::VehicleInfo & vehicle_info)
@@ -2323,7 +2357,7 @@ double calcDistanceToReturnDeadLine(
23232357
return distance_to_return_dead_line;
23242358
}
23252359

2326-
TurnSignalInfo calcTurnSignalInfo(
2360+
std::pair<TurnSignalInfo, bool> calcTurnSignalInfo(
23272361
const ShiftedPath & path, const ShiftLine & shift_line, const double current_shift_length,
23282362
const AvoidancePlanningData & data, const std::shared_ptr<const PlannerData> & planner_data)
23292363
{
@@ -2335,22 +2369,22 @@ TurnSignalInfo calcTurnSignalInfo(
23352369

23362370
if (shift_line.start_idx + 1 > path.shift_length.size()) {
23372371
RCLCPP_WARN(rclcpp::get_logger(__func__), "index inconsistency.");
2338-
return {};
2372+
return std::make_pair(TurnSignalInfo{}, true);
23392373
}
23402374

23412375
if (shift_line.start_idx + 1 > path.path.points.size()) {
23422376
RCLCPP_WARN(rclcpp::get_logger(__func__), "index inconsistency.");
2343-
return {};
2377+
return std::make_pair(TurnSignalInfo{}, true);
23442378
}
23452379

23462380
if (shift_line.end_idx + 1 > path.shift_length.size()) {
23472381
RCLCPP_WARN(rclcpp::get_logger(__func__), "index inconsistency.");
2348-
return {};
2382+
return std::make_pair(TurnSignalInfo{}, true);
23492383
}
23502384

23512385
if (shift_line.end_idx + 1 > path.path.points.size()) {
23522386
RCLCPP_WARN(rclcpp::get_logger(__func__), "index inconsistency.");
2353-
return {};
2387+
return std::make_pair(TurnSignalInfo{}, true);
23542388
}
23552389

23562390
const auto start_shift_length = path.shift_length.at(shift_line.start_idx);
@@ -2359,12 +2393,12 @@ TurnSignalInfo calcTurnSignalInfo(
23592393

23602394
// If shift length is shorter than the threshold, it does not need to turn on blinkers
23612395
if (std::fabs(relative_shift_length) < p.turn_signal_shift_length_threshold) {
2362-
return {};
2396+
return std::make_pair(TurnSignalInfo{}, true);
23632397
}
23642398

23652399
// If the vehicle does not shift anymore, we turn off the blinker
23662400
if (std::fabs(path.shift_length.at(shift_line.end_idx) - current_shift_length) < THRESHOLD) {
2367-
return {};
2401+
return std::make_pair(TurnSignalInfo{}, true);
23682402
}
23692403

23702404
const auto get_command = [](const auto & shift_length) {
@@ -2379,7 +2413,7 @@ TurnSignalInfo calcTurnSignalInfo(
23792413
p.vehicle_info.max_longitudinal_offset_m;
23802414

23812415
if (signal_prepare_distance < ego_front_to_shift_start) {
2382-
return {};
2416+
return std::make_pair(TurnSignalInfo{}, false);
23832417
}
23842418

23852419
const auto blinker_start_pose = path.path.points.at(shift_line.start_idx).point.pose;
@@ -2396,12 +2430,12 @@ TurnSignalInfo calcTurnSignalInfo(
23962430
turn_signal_info.turn_signal.command = get_command(relative_shift_length);
23972431

23982432
if (!p.turn_signal_on_swerving) {
2399-
return turn_signal_info;
2433+
return std::make_pair(turn_signal_info, false);
24002434
}
24012435

24022436
lanelet::ConstLanelet lanelet;
24032437
if (!rh->getClosestLaneletWithinRoute(shift_line.end, &lanelet)) {
2404-
return {};
2438+
return std::make_pair(TurnSignalInfo{}, true);
24052439
}
24062440

24072441
const auto left_same_direction_lane = rh->getLeftLanelet(lanelet, true, true);
@@ -2412,14 +2446,25 @@ TurnSignalInfo calcTurnSignalInfo(
24122446
const auto has_right_lane =
24132447
right_same_direction_lane.has_value() || !right_opposite_lanes.empty();
24142448

2415-
if (!existShiftSideLane(start_shift_length, end_shift_length, !has_left_lane, !has_right_lane)) {
2416-
return {};
2449+
if (!existShiftSideLane(
2450+
start_shift_length, end_shift_length, !has_left_lane, !has_right_lane,
2451+
p.turn_signal_shift_length_threshold)) {
2452+
return std::make_pair(TurnSignalInfo{}, true);
24172453
}
24182454

24192455
if (!straddleRoadBound(path, shift_line, data.current_lanelets, p.vehicle_info)) {
2420-
return {};
2456+
return std::make_pair(TurnSignalInfo{}, true);
2457+
}
2458+
2459+
constexpr double STOPPED_THRESHOLD = 0.1; // [m/s]
2460+
if (ego_speed < STOPPED_THRESHOLD) {
2461+
if (isNearEndOfShift(
2462+
start_shift_length, end_shift_length, ego_pose.position, data.current_lanelets,
2463+
p.turn_signal_shift_length_threshold)) {
2464+
return std::make_pair(TurnSignalInfo{}, true);
2465+
}
24212466
}
24222467

2423-
return turn_signal_info;
2468+
return std::make_pair(turn_signal_info, false);
24242469
}
24252470
} // namespace behavior_path_planner::utils::avoidance

planning/behavior_path_planner_common/include/behavior_path_planner_common/utils/path_shifter/path_shifter.hpp

+9
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717

1818
#include <rclcpp/clock.hpp>
1919
#include <rclcpp/logging.hpp>
20+
#include <tier4_autoware_utils/ros/uuid_helper.hpp>
2021

2122
#include <autoware_auto_planning_msgs/msg/path_with_lane_id.hpp>
2223
#include <geometry_msgs/msg/point.hpp>
24+
#include <unique_identifier_msgs/msg/uuid.hpp>
2325

2426
#include <optional>
2527
#include <string>
@@ -31,9 +33,13 @@ using autoware_auto_planning_msgs::msg::PathPointWithLaneId;
3133
using autoware_auto_planning_msgs::msg::PathWithLaneId;
3234
using geometry_msgs::msg::Point;
3335
using geometry_msgs::msg::Pose;
36+
using tier4_autoware_utils::generateUUID;
37+
using unique_identifier_msgs::msg::UUID;
3438

3539
struct ShiftLine
3640
{
41+
ShiftLine() : id(generateUUID()) {}
42+
3743
Pose start{}; // shift start point in absolute coordinate
3844
Pose end{}; // shift start point in absolute coordinate
3945

@@ -45,6 +51,9 @@ struct ShiftLine
4551

4652
size_t start_idx{}; // associated start-point index for the reference path
4753
size_t end_idx{}; // associated end-point index for the reference path
54+
55+
// for unique_id
56+
UUID id{};
4857
};
4958
using ShiftLineArray = std::vector<ShiftLine>;
5059

planning/route_handler/include/route_handler/route_handler.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,7 @@ class RouteHandler
327327
lanelet::ConstLanelets getShoulderLanelets() const;
328328
bool isShoulderLanelet(const lanelet::ConstLanelet & lanelet) const;
329329
bool isRouteLanelet(const lanelet::ConstLanelet & lanelet) const;
330+
lanelet::ConstLanelets getPreferredLanelets() const;
330331

331332
// for path
332333
PathWithLaneId getCenterLinePath(

planning/route_handler/src/route_handler.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,11 @@ lanelet::ConstLanelets RouteHandler::getRouteLanelets() const
433433
return route_lanelets_;
434434
}
435435

436+
lanelet::ConstLanelets RouteHandler::getPreferredLanelets() const
437+
{
438+
return preferred_lanelets_;
439+
}
440+
436441
Pose RouteHandler::getStartPose() const
437442
{
438443
if (!route_ptr_) {

system/default_ad_api/src/interface.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ InterfaceNode::InterfaceNode(const rclcpp::NodeOptions & options) : Node("interf
2121
{
2222
const auto on_interface_version = [](auto, auto res) {
2323
res->major = 1;
24-
res->minor = 0;
24+
res->minor = 1;
2525
res->patch = 0;
2626
};
2727

system/default_ad_api/test/node/interface_version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
if response.major != 1:
3232
exit(1)
33-
if response.minor != 0:
33+
if response.minor != 1:
3434
exit(1)
3535
if response.patch != 0:
3636
exit(1)

0 commit comments

Comments
 (0)