Skip to content

Commit 2aced4d

Browse files
feat(autoware_motion_velocity_planner)!: only wait for the required subscriptions (#505)
Signed-off-by: Ryohsuke Mitsudome <[email protected]> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent bb61e98 commit 2aced4d

File tree

6 files changed

+48
-4
lines changed

6 files changed

+48
-4
lines changed

planning/motion_velocity_planner/autoware_motion_velocity_obstacle_stop_module/src/obstacle_stop_module.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,14 @@ class ObstacleStopModule : public PluginModuleInterface
6060
const std::vector<autoware_planning_msgs::msg::TrajectoryPoint> & smoothed_trajectory_points,
6161
const std::shared_ptr<const PlannerData> planner_data) override;
6262

63+
RequiredSubscriptionInfo getRequiredSubscriptions() const override
64+
{
65+
RequiredSubscriptionInfo required_subscription_info;
66+
required_subscription_info.predicted_objects = true;
67+
required_subscription_info.no_ground_pointcloud = true;
68+
return required_subscription_info;
69+
}
70+
6371
private:
6472
std::string module_name_{};
6573
rclcpp::Clock::SharedPtr clock_{};

planning/motion_velocity_planner/autoware_motion_velocity_planner/src/node.cpp

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,11 @@ bool MotionVelocityPlannerNode::update_planner_data(
137137
{
138138
auto clock = *get_clock();
139139
auto is_ready = true;
140-
const auto check_with_log = [&](const auto ptr, const auto & log) {
140+
const auto check_with_log = [&](const auto ptr, const auto & log, const bool is_required = true) {
141+
if (!is_required) {
142+
return false;
143+
}
144+
141145
constexpr auto throttle_duration = 3000; // [ms]
142146
if (!ptr) {
143147
RCLCPP_INFO_THROTTLE(get_logger(), clock, throttle_duration, "%s", log);
@@ -147,6 +151,8 @@ bool MotionVelocityPlannerNode::update_planner_data(
147151
return true;
148152
};
149153

154+
const auto required_subscriptions = planner_manager_.getRequiredSubscriptions();
155+
150156
autoware_utils_system::StopWatch<std::chrono::milliseconds> sw;
151157
const auto ego_state_ptr = sub_vehicle_odometry_.take_data();
152158
if (check_with_log(ego_state_ptr, "Waiting for current odometry"))
@@ -159,12 +165,16 @@ bool MotionVelocityPlannerNode::update_planner_data(
159165
processing_times["update_planner_data.accel"] = sw.toc(true);
160166

161167
const auto predicted_objects_ptr = sub_predicted_objects_.take_data();
162-
if (check_with_log(predicted_objects_ptr, "Waiting for predicted objects"))
168+
if (check_with_log(
169+
predicted_objects_ptr, "Waiting for predicted objects",
170+
required_subscriptions.predicted_objects))
163171
planner_data_.process_predicted_objects(*predicted_objects_ptr);
164172
processing_times["update_planner_data.pred_obj"] = sw.toc(true);
165173

166174
const auto no_ground_pointcloud_ptr = sub_no_ground_pointcloud_.take_data();
167-
if (check_with_log(no_ground_pointcloud_ptr, "Waiting for pointcloud")) {
175+
if (check_with_log(
176+
no_ground_pointcloud_ptr, "Waiting for pointcloud",
177+
required_subscriptions.no_ground_pointcloud)) {
168178
auto no_ground_pointcloud = process_no_ground_pointcloud(no_ground_pointcloud_ptr);
169179
processing_times["update_planner_data.pcl.process_no_ground_pointcloud"] = sw.toc(true);
170180
if (no_ground_pointcloud) {
@@ -173,7 +183,9 @@ bool MotionVelocityPlannerNode::update_planner_data(
173183
}
174184

175185
const auto occupancy_grid_ptr = sub_occupancy_grid_.take_data();
176-
if (check_with_log(occupancy_grid_ptr, "Waiting for the occupancy grid"))
186+
if (check_with_log(
187+
occupancy_grid_ptr, "Waiting for the occupancy grid",
188+
required_subscriptions.occupancy_grid_map))
177189
planner_data_.occupancy_grid = *occupancy_grid_ptr;
178190
processing_times["update_planner_data.occ_grid"] = sw.toc(true);
179191

@@ -194,6 +206,7 @@ bool MotionVelocityPlannerNode::update_planner_data(
194206

195207
// optional data
196208
const auto traffic_signals_ptr = sub_traffic_signals_.take_data();
209+
// NOTE: required_subscriptions.traffic_signals is not used since is_ready is not updated here.
197210
if (traffic_signals_ptr) process_traffic_signals(traffic_signals_ptr);
198211
processing_times["update_planner_data.traffic_lights"] = sw.toc(true);
199212

planning/motion_velocity_planner/autoware_motion_velocity_planner/src/planner_manager.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ void MotionVelocityPlannerManager::load_module_plugin(rclcpp::Node & node, const
4343
// register
4444
loaded_plugins_.push_back(plugin);
4545
RCLCPP_DEBUG_STREAM(node.get_logger(), "The scene plugin '" << name << "' is loaded.");
46+
47+
// update the subscription
48+
const auto required_subscriptions = plugin->getRequiredSubscriptions();
49+
required_subscriptions_.update(required_subscriptions);
4650
} else {
4751
RCLCPP_ERROR_STREAM(node.get_logger(), "The scene plugin '" << name << "' is not available.");
4852
}

planning/motion_velocity_planner/autoware_motion_velocity_planner/src/planner_manager.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,12 @@ class MotionVelocityPlannerManager
4848
const std::vector<autoware_planning_msgs::msg::TrajectoryPoint> & smoothed_trajectory_points,
4949
const std::shared_ptr<const PlannerData> planner_data);
5050

51+
RequiredSubscriptionInfo getRequiredSubscriptions() const { return required_subscriptions_; }
52+
5153
private:
5254
pluginlib::ClassLoader<PluginModuleInterface> plugin_loader_;
5355
std::vector<std::shared_ptr<PluginModuleInterface>> loaded_plugins_;
56+
RequiredSubscriptionInfo required_subscriptions_;
5457
};
5558
} // namespace autoware::motion_velocity_planner
5659

planning/motion_velocity_planner/autoware_motion_velocity_planner_common/include/autoware/motion_velocity_planner_common/planner_data.hpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,21 @@ struct PlannerData
243243
traj_points, pose, ego_nearest_dist_threshold, ego_nearest_yaw_threshold);
244244
}
245245
};
246+
struct RequiredSubscriptionInfo
247+
{
248+
bool traffic_signals{false};
249+
bool predicted_objects{false};
250+
bool occupancy_grid_map{false};
251+
bool no_ground_pointcloud{false};
252+
253+
void update(const RequiredSubscriptionInfo & required_subscriptions)
254+
{
255+
traffic_signals |= required_subscriptions.traffic_signals;
256+
predicted_objects |= required_subscriptions.predicted_objects;
257+
occupancy_grid_map |= required_subscriptions.occupancy_grid_map;
258+
no_ground_pointcloud |= required_subscriptions.no_ground_pointcloud;
259+
}
260+
};
246261
} // namespace autoware::motion_velocity_planner
247262

248263
#endif // AUTOWARE__MOTION_VELOCITY_PLANNER_COMMON__PLANNER_DATA_HPP_

planning/motion_velocity_planner/autoware_motion_velocity_planner_common/include/autoware/motion_velocity_planner_common/plugin_module_interface.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class PluginModuleInterface
4141
public:
4242
virtual ~PluginModuleInterface() = default;
4343
virtual void init(rclcpp::Node & node, const std::string & module_name) = 0;
44+
virtual RequiredSubscriptionInfo getRequiredSubscriptions() const = 0;
4445
virtual void update_parameters(const std::vector<rclcpp::Parameter> & parameters) = 0;
4546
virtual VelocityPlanningResult plan(
4647
const std::vector<autoware_planning_msgs::msg::TrajectoryPoint> & raw_trajectory_points,

0 commit comments

Comments
 (0)