Skip to content

Commit

Permalink
feat(behavior_velocity,behavior_path,route_handler): use route handle…
Browse files Browse the repository at this point in the history
…r in behavior velocity (autowarefoundation#472)

* feat(route_handler): add getter for routing graphs

Signed-off-by: tanaka3 <[email protected]>

* chore(behavior_velocity): add pkg and remove unused

Signed-off-by: tanaka3 <[email protected]>

* feat(behavior_velocity): add route handler and repalce lanelet map

Signed-off-by: tanaka3 <[email protected]>

* feat(behavior_velocity): replace routing graph

Signed-off-by: tanaka3 <[email protected]>

* feat(behavior_velocity): replace overall graph to route handlers

Signed-off-by: tanaka3 <[email protected]>

* chore(behavior_velocity): remove remainings

Signed-off-by: tanaka3 <[email protected]>

* chore(behavior_velocity): refactor for readability

Signed-off-by: tanaka3 <[email protected]>

* chore(behavavior_path): refactor use safe return

Signed-off-by: tanaka3 <[email protected]>
  • Loading branch information
taikitanaka3 authored and satoshi-ota committed May 20, 2022
1 parent 8d34b61 commit 0dd2014
Show file tree
Hide file tree
Showing 23 changed files with 86 additions and 77 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -343,8 +343,9 @@ std::pair<bool, bool> LaneChangeModule::getSafePath(

// select valid path
valid_paths = lane_change_utils::selectValidPaths(
lane_change_paths, current_lanes, check_lanes, route_handler->getOverallGraph(), current_pose,
route_handler->isInGoalRouteSection(current_lanes.back()), route_handler->getGoalPose());
lane_change_paths, current_lanes, check_lanes, *route_handler->getOverallGraphPtr(),
current_pose, route_handler->isInGoalRouteSection(current_lanes.back()),
route_handler->getGoalPose());

if (valid_paths.empty()) {
return std::make_pair(false, false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,7 @@ std::pair<bool, bool> PullOutModule::getSafePath(

// select valid path
valid_paths = pull_out_utils::selectValidPaths(
pull_out_paths, road_lanes, check_lanes, route_handler->getOverallGraph(), current_pose,
pull_out_paths, road_lanes, check_lanes, *route_handler->getOverallGraphPtr(), current_pose,
route_handler->isInGoalRouteSection(road_lanes.back()), route_handler->getGoalPose());

if (valid_paths.empty()) {
Expand Down Expand Up @@ -502,7 +502,7 @@ std::pair<bool, bool> PullOutModule::getSafeRetreatPath(

// select valid path
valid_paths = pull_out_utils::selectValidPaths(
pull_out_paths, road_lanes, check_lanes, route_handler->getOverallGraph(), current_pose,
pull_out_paths, road_lanes, check_lanes, *route_handler->getOverallGraphPtr(), current_pose,
route_handler->isInGoalRouteSection(road_lanes.back()), route_handler->getGoalPose());

if (valid_paths.empty()) {
Expand Down Expand Up @@ -583,7 +583,7 @@ bool PullOutModule::getBackDistance(

// select valid path
valid_paths = pull_out_utils::selectValidPaths(
pull_out_paths, road_lanes, check_lanes, route_handler->getOverallGraph(), current_pose,
pull_out_paths, road_lanes, check_lanes, *route_handler->getOverallGraphPtr(), current_pose,
route_handler->isInGoalRouteSection(road_lanes.back()), route_handler->getGoalPose());

if (valid_paths.empty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -357,8 +357,9 @@ std::pair<bool, bool> PullOverModule::getSafePath(

// select valid path
valid_paths = pull_over_utils::selectValidPaths(
pull_over_paths, current_lanes, check_lanes, route_handler->getOverallGraph(), current_pose,
route_handler->isInGoalRouteSection(current_lanes.back()), route_handler->getGoalPose());
pull_over_paths, current_lanes, check_lanes, *route_handler->getOverallGraphPtr(),
current_pose, route_handler->isInGoalRouteSection(current_lanes.back()),
route_handler->getGoalPose());

if (valid_paths.empty()) {
return std::make_pair(false, false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
#ifndef BEHAVIOR_VELOCITY_PLANNER__PLANNER_DATA_HPP_
#define BEHAVIOR_VELOCITY_PLANNER__PLANNER_DATA_HPP_

#include "route_handler/route_handler.hpp"

#include <vehicle_info_util/vehicle_info_util.hpp>

#include <autoware_auto_mapping_msgs/msg/had_map_bin.hpp>
Expand Down Expand Up @@ -69,23 +71,20 @@ struct PlannerData
std::deque<geometry_msgs::msg::TwistStamped> velocity_buffer;
autoware_auto_perception_msgs::msg::PredictedObjects::ConstSharedPtr predicted_objects;
pcl::PointCloud<pcl::PointXYZ>::ConstPtr no_ground_pointcloud;
lanelet::LaneletMapPtr lanelet_map;
// occupancy grid
nav_msgs::msg::OccupancyGrid::ConstSharedPtr occupancy_grid;

// other internal data
std::map<int, autoware_auto_perception_msgs::msg::TrafficSignalStamped> traffic_light_id_map;
lanelet::traffic_rules::TrafficRulesPtr traffic_rules;
lanelet::routing::RoutingGraphPtr routing_graph;
std::shared_ptr<const lanelet::routing::RoutingGraphContainer> overall_graphs;

// external data
std::map<int, autoware_auto_perception_msgs::msg::TrafficSignalStamped>
external_traffic_light_id_map;
boost::optional<tier4_api_msgs::msg::CrosswalkStatus> external_crosswalk_status_input;
boost::optional<tier4_api_msgs::msg::IntersectionStatus> external_intersection_status_input;
tier4_v2x_msgs::msg::VirtualTrafficLightStateArray::ConstSharedPtr virtual_traffic_light_states;

// route handler
std::shared_ptr<route_handler::RouteHandler> route_handler_;
// parameters
vehicle_info_util::VehicleInfo vehicle_info_;

Expand Down
1 change: 1 addition & 0 deletions planning/behavior_velocity_planner/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
<depend>pcl_conversions</depend>
<depend>rclcpp</depend>
<depend>rclcpp_components</depend>
<depend>route_handler</depend>
<depend>sensor_msgs</depend>
<depend>tf2</depend>
<depend>tf2_eigen</depend>
Expand Down
32 changes: 5 additions & 27 deletions planning/behavior_velocity_planner/src/node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,10 @@ bool BehaviorVelocityPlannerNode::isDataReady()
if (!d.no_ground_pointcloud) {
return false;
}
if (!d.lanelet_map) {
if (!d.route_handler_) {
return false;
}
if (!d.route_handler_->isMapMsgReady()) {
return false;
}

Expand Down Expand Up @@ -252,32 +255,7 @@ void BehaviorVelocityPlannerNode::onLaneletMap(
const autoware_auto_mapping_msgs::msg::HADMapBin::ConstSharedPtr msg)
{
// Load map
planner_data_.lanelet_map = std::make_shared<lanelet::LaneletMap>();
lanelet::utils::conversion::fromBinMsg(
*msg, planner_data_.lanelet_map, &planner_data_.traffic_rules, &planner_data_.routing_graph);

// Build graph
{
using lanelet::Locations;
using lanelet::Participants;
using lanelet::routing::RoutingGraph;
using lanelet::routing::RoutingGraphConstPtr;
using lanelet::routing::RoutingGraphContainer;
using lanelet::traffic_rules::TrafficRulesFactory;

const auto traffic_rules =
TrafficRulesFactory::create(Locations::Germany, Participants::Vehicle);
const auto pedestrian_rules =
TrafficRulesFactory::create(Locations::Germany, Participants::Pedestrian);

RoutingGraphConstPtr vehicle_graph =
RoutingGraph::build(*planner_data_.lanelet_map, *traffic_rules);
RoutingGraphConstPtr pedestrian_graph =
RoutingGraph::build(*planner_data_.lanelet_map, *pedestrian_rules);
RoutingGraphContainer overall_graphs({vehicle_graph, pedestrian_graph});

planner_data_.overall_graphs = std::make_shared<const RoutingGraphContainer>(overall_graphs);
}
planner_data_.route_handler_ = std::make_shared<route_handler::RouteHandler>(*msg);
}

void BehaviorVelocityPlannerNode::onTrafficSignals(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ BlindSpotModuleManager::BlindSpotModuleManager(rclcpp::Node & node)
void BlindSpotModuleManager::launchNewModules(
const autoware_auto_planning_msgs::msg::PathWithLaneId & path)
{
for (const auto & ll : getLaneletsOnPath(path, planner_data_->lanelet_map)) {
for (const auto & ll :
getLaneletsOnPath(path, planner_data_->route_handler_->getLaneletMapPtr())) {
const auto lane_id = ll.id();
const auto module_id = lane_id;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ BlindSpotModule::BlindSpotModule(
turn_direction_(TurnDirection::INVALID)
{
planner_param_ = planner_param;
const auto & assigned_lanelet = planner_data->lanelet_map->laneletLayer.get(lane_id);
const auto & assigned_lanelet =
planner_data->route_handler_->getLaneletMapPtr()->laneletLayer.get(lane_id);
const std::string turn_direction = assigned_lanelet.attributeOr("turn_direction", "else");
if (!turn_direction.compare("left")) {
turn_direction_ = TurnDirection::LEFT;
Expand Down Expand Up @@ -74,8 +75,8 @@ bool BlindSpotModule::modifyPathVelocity(
geometry_msgs::msg::PoseStamped current_pose = planner_data_->current_pose;

/* get lanelet map */
const auto lanelet_map_ptr = planner_data_->lanelet_map;
const auto routing_graph_ptr = planner_data_->routing_graph;
const auto lanelet_map_ptr = planner_data_->route_handler_->getLaneletMapPtr();
const auto routing_graph_ptr = planner_data_->route_handler_->getRoutingGraphPtr();

/* set stop-line and stop-judgement-line for base_link */
int stop_line_idx = -1;
Expand Down Expand Up @@ -518,7 +519,8 @@ bool BlindSpotModule::isTargetObjectType(
boost::optional<geometry_msgs::msg::Point> BlindSpotModule::getStartPointFromLaneLet(
const int lane_id) const
{
lanelet::ConstLanelet lanelet = planner_data_->lanelet_map->laneletLayer.get(lane_id);
lanelet::ConstLanelet lanelet =
planner_data_->route_handler_->getLaneletMapPtr()->laneletLayer.get(lane_id);
if (lanelet.centerline().empty()) {
return boost::none;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,9 @@ CrosswalkModuleManager::CrosswalkModuleManager(rclcpp::Node & node)
void CrosswalkModuleManager::launchNewModules(
const autoware_auto_planning_msgs::msg::PathWithLaneId & path)
{
const auto rh = planner_data_->route_handler_;
for (const auto & crosswalk :
getCrosswalksOnPath(path, planner_data_->lanelet_map, planner_data_->overall_graphs)) {
getCrosswalksOnPath(path, rh->getLaneletMapPtr(), rh->getOverallGraphPtr())) {
const auto module_id = crosswalk.id();
if (!isModuleRegistered(module_id)) {
registerModule(std::make_shared<CrosswalkModule>(
Expand All @@ -112,8 +113,9 @@ std::function<bool(const std::shared_ptr<SceneModuleInterface> &)>
CrosswalkModuleManager::getModuleExpiredFunction(
const autoware_auto_planning_msgs::msg::PathWithLaneId & path)
{
const auto rh = planner_data_->route_handler_;
const auto crosswalk_id_set =
getCrosswalkIdSetOnPath(path, planner_data_->lanelet_map, planner_data_->overall_graphs);
getCrosswalkIdSetOnPath(path, rh->getLaneletMapPtr(), rh->getOverallGraphPtr());

return [crosswalk_id_set](const std::shared_ptr<SceneModuleInterface> & scene_module) {
return crosswalk_id_set.count(scene_module->getModuleId()) == 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,8 @@ lanelet::Optional<lanelet::ConstLineString3d> getStopLineFromMap(
const int lane_id, const std::shared_ptr<const PlannerData> & planner_data,
const std::string & attribute_name)
{
lanelet::ConstLanelet lanelet = planner_data->lanelet_map->laneletLayer.get(lane_id);
lanelet::ConstLanelet lanelet =
planner_data->route_handler_->getLaneletMapPtr()->laneletLayer.get(lane_id);
const auto road_markings = lanelet.regulatoryElementsAs<lanelet::autoware::RoadMarking>();
lanelet::ConstLineStrings3d stop_line;
for (const auto & road_marking : road_markings) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ void DetectionAreaModuleManager::launchNewModules(
const autoware_auto_planning_msgs::msg::PathWithLaneId & path)
{
for (const auto & detection_area :
getDetectionAreaRegElemsOnPath(path, planner_data_->lanelet_map)) {
getDetectionAreaRegElemsOnPath(path, planner_data_->route_handler_->getLaneletMapPtr())) {
// Use lanelet_id to unregister module when the route is changed
const auto module_id = detection_area->id();
if (!isModuleRegistered(module_id)) {
Expand All @@ -88,7 +88,8 @@ std::function<bool(const std::shared_ptr<SceneModuleInterface> &)>
DetectionAreaModuleManager::getModuleExpiredFunction(
const autoware_auto_planning_msgs::msg::PathWithLaneId & path)
{
const auto detection_area_id_set = getDetectionAreaIdSetOnPath(path, planner_data_->lanelet_map);
const auto detection_area_id_set =
getDetectionAreaIdSetOnPath(path, planner_data_->route_handler_->getLaneletMapPtr());

return [detection_area_id_set](const std::shared_ptr<SceneModuleInterface> & scene_module) {
return detection_area_id_set.count(scene_module->getModuleId()) == 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ MergeFromPrivateModuleManager::MergeFromPrivateModuleManager(rclcpp::Node & node
void IntersectionModuleManager::launchNewModules(
const autoware_auto_planning_msgs::msg::PathWithLaneId & path)
{
const auto lanelets = getLaneletsOnPath(path, planner_data_->lanelet_map);
const auto lanelets = getLaneletsOnPath(path, planner_data_->route_handler_->getLaneletMapPtr());
for (size_t i = 0; i < lanelets.size(); i++) {
const auto ll = lanelets.at(i);
const auto lane_id = ll.id();
Expand All @@ -126,7 +126,7 @@ void IntersectionModuleManager::launchNewModules(
void MergeFromPrivateModuleManager::launchNewModules(
const autoware_auto_planning_msgs::msg::PathWithLaneId & path)
{
const auto lanelets = getLaneletsOnPath(path, planner_data_->lanelet_map);
const auto lanelets = getLaneletsOnPath(path, planner_data_->route_handler_->getLaneletMapPtr());
for (size_t i = 0; i < lanelets.size(); i++) {
const auto ll = lanelets.at(i);
const auto lane_id = ll.id();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@ IntersectionModule::IntersectionModule(
: SceneModuleInterface(module_id, logger, clock), lane_id_(lane_id)
{
planner_param_ = planner_param;
const auto & assigned_lanelet = planner_data->lanelet_map->laneletLayer.get(lane_id);
const auto & assigned_lanelet =
planner_data->route_handler_->getLaneletMapPtr()->laneletLayer.get(lane_id);
turn_direction_ = assigned_lanelet.attributeOr("turn_direction", "else");
has_traffic_light_ =
!(assigned_lanelet.regulatoryElementsAs<const lanelet::TrafficLight>().empty());
Expand Down Expand Up @@ -85,8 +86,8 @@ bool IntersectionModule::modifyPathVelocity(
geometry_msgs::msg::PoseStamped current_pose = planner_data_->current_pose;

/* get lanelet map */
const auto lanelet_map_ptr = planner_data_->lanelet_map;
const auto routing_graph_ptr = planner_data_->routing_graph;
const auto lanelet_map_ptr = planner_data_->route_handler_->getLaneletMapPtr();
const auto routing_graph_ptr = planner_data_->route_handler_->getRoutingGraphPtr();

/* get detection area and conflicting area */
std::vector<lanelet::ConstLanelets> detection_area_lanelets;
Expand Down Expand Up @@ -603,7 +604,7 @@ bool IntersectionModule::checkAngleForTargetLanelets(
const geometry_msgs::msg::Pose & pose, const std::vector<int> & target_lanelet_ids)
{
for (const int lanelet_id : target_lanelet_ids) {
const auto ll = planner_data_->lanelet_map->laneletLayer.get(lanelet_id);
const auto ll = planner_data_->route_handler_->getLaneletMapPtr()->laneletLayer.get(lanelet_id);
if (!lanelet::utils::isInLanelet(pose, ll, planner_param_.detection_area_margin)) {
continue;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@ bool MergeFromPrivateRoadModule::modifyPathVelocity(
geometry_msgs::msg::PoseStamped current_pose = planner_data_->current_pose;

/* get lanelet map */
const auto lanelet_map_ptr = planner_data_->lanelet_map;
const auto routing_graph_ptr = planner_data_->routing_graph;
const auto lanelet_map_ptr = planner_data_->route_handler_->getLaneletMapPtr();
const auto routing_graph_ptr = planner_data_->route_handler_->getRoutingGraphPtr();

/* get detection area */
std::vector<lanelet::ConstLanelets> detection_area_lanelets;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,8 @@ bool getStopPoseIndexFromMap(
const std::shared_ptr<const PlannerData> & planner_data, int & stop_idx_ip, int dist_thr,
const rclcpp::Logger logger)
{
lanelet::ConstLanelet lanelet = planner_data->lanelet_map->laneletLayer.get(lane_id);
lanelet::ConstLanelet lanelet =
planner_data->route_handler_->getLaneletMapPtr()->laneletLayer.get(lane_id);
const auto road_markings = lanelet.regulatoryElementsAs<lanelet::autoware::RoadMarking>();
lanelet::ConstLineStrings3d stop_line;
for (const auto & road_marking : road_markings) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ void NoStoppingAreaModuleManager::launchNewModules(
const autoware_auto_planning_msgs::msg::PathWithLaneId & path)
{
for (const auto & no_stopping_area :
getNoStoppingAreaRegElemsOnPath(path, planner_data_->lanelet_map)) {
getNoStoppingAreaRegElemsOnPath(path, planner_data_->route_handler_->getLaneletMapPtr())) {
// Use lanelet_id to unregister module when the route is changed
const auto module_id = no_stopping_area->id();
if (!isModuleRegistered(module_id)) {
Expand All @@ -97,7 +97,7 @@ NoStoppingAreaModuleManager::getModuleExpiredFunction(
const autoware_auto_planning_msgs::msg::PathWithLaneId & path)
{
const auto no_stopping_area_id_set =
getNoStoppingAreaIdSetOnPath(path, planner_data_->lanelet_map);
getNoStoppingAreaIdSetOnPath(path, planner_data_->route_handler_->getLaneletMapPtr());

return [no_stopping_area_id_set](const std::shared_ptr<SceneModuleInterface> & scene_module) {
return no_stopping_area_id_set.count(scene_module->getModuleId()) == 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,8 @@ bool OcclusionSpotModule::modifyPathVelocity(
0.0);
}
const geometry_msgs::msg::Pose ego_pose = planner_data_->current_pose.pose;
const auto & lanelet_map_ptr = planner_data_->lanelet_map;
const auto & traffic_rules_ptr = planner_data_->traffic_rules;
const auto & occ_grid_ptr = planner_data_->occupancy_grid;
if (!lanelet_map_ptr || !traffic_rules_ptr || !occ_grid_ptr) {
if (!occ_grid_ptr) {
return true;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,9 @@ bool OcclusionSpotInPublicModule::modifyPathVelocity(
0.0);
}
const geometry_msgs::msg::Pose ego_pose = planner_data_->current_pose.pose;
const auto & lanelet_map_ptr = planner_data_->lanelet_map;
const auto & routing_graph_ptr = planner_data_->routing_graph;
const auto & traffic_rules_ptr = planner_data_->traffic_rules;
const auto & dynamic_obj_arr_ptr = planner_data_->predicted_objects;

if (!lanelet_map_ptr || !traffic_rules_ptr || !dynamic_obj_arr_ptr || !routing_graph_ptr) {
if (!dynamic_obj_arr_ptr) {
return true;
}
PathWithLaneId clipped_path;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,8 @@ StopLineModuleManager::StopLineModuleManager(rclcpp::Node & node)
void StopLineModuleManager::launchNewModules(
const autoware_auto_planning_msgs::msg::PathWithLaneId & path)
{
for (const auto & stop_line : getStopLinesOnPath(path, planner_data_->lanelet_map)) {
for (const auto & stop_line :
getStopLinesOnPath(path, planner_data_->route_handler_->getLaneletMapPtr())) {
const auto module_id = stop_line.id();
if (!isModuleRegistered(module_id)) {
registerModule(std::make_shared<StopLineModule>(
Expand All @@ -107,7 +108,8 @@ std::function<bool(const std::shared_ptr<SceneModuleInterface> &)>
StopLineModuleManager::getModuleExpiredFunction(
const autoware_auto_planning_msgs::msg::PathWithLaneId & path)
{
const auto stop_line_id_set = getStopLineIdSetOnPath(path, planner_data_->lanelet_map);
const auto stop_line_id_set =
getStopLineIdSetOnPath(path, planner_data_->route_handler_->getLaneletMapPtr());

return [stop_line_id_set](const std::shared_ptr<SceneModuleInterface> & scene_module) {
return stop_line_id_set.count(scene_module->getModuleId()) == 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ void TrafficLightModuleManager::launchNewModules(
const autoware_auto_planning_msgs::msg::PathWithLaneId & path)
{
for (const auto & traffic_light_reg_elem :
getTrafficLightRegElemsOnPath(path, planner_data_->lanelet_map)) {
getTrafficLightRegElemsOnPath(path, planner_data_->route_handler_->getLaneletMapPtr())) {
const auto stop_line = traffic_light_reg_elem.first->stopLine();

if (!stop_line) {
Expand All @@ -147,7 +147,8 @@ std::function<bool(const std::shared_ptr<SceneModuleInterface> &)>
TrafficLightModuleManager::getModuleExpiredFunction(
const autoware_auto_planning_msgs::msg::PathWithLaneId & path)
{
const auto lanelet_id_set = getLaneletIdSetOnPath(path, planner_data_->lanelet_map);
const auto lanelet_id_set =
getLaneletIdSetOnPath(path, planner_data_->route_handler_->getLaneletMapPtr());

return [lanelet_id_set](const std::shared_ptr<SceneModuleInterface> & scene_module) {
return lanelet_id_set.count(scene_module->getModuleId()) == 0;
Expand Down
Loading

0 comments on commit 0dd2014

Please sign in to comment.