Skip to content

Commit b594060

Browse files
committed
implement velocity factor
Signed-off-by: Maxime CLEMENT <maxime.clement@tier4.jp>
1 parent 1b578b7 commit b594060

File tree

6 files changed

+57
-16
lines changed

6 files changed

+57
-16
lines changed

common/motion_utils/include/motion_utils/factor/velocity_factor_interface.hpp

+13-4
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@
1616
#ifndef MOTION_UTILS__FACTOR__VELOCITY_FACTOR_INTERFACE_HPP_
1717
#define MOTION_UTILS__FACTOR__VELOCITY_FACTOR_INTERFACE_HPP_
1818

19+
#include <rclcpp/time.hpp>
20+
1921
#include <autoware_adapi_v1_msgs/msg/planning_behavior.hpp>
2022
#include <autoware_adapi_v1_msgs/msg/velocity_factor.hpp>
2123
#include <autoware_adapi_v1_msgs/msg/velocity_factor_array.hpp>
22-
#include <autoware_auto_planning_msgs/msg/path_point_with_lane_id.hpp>
2324
#include <geometry_msgs/msg/pose.hpp>
2425

2526
#include <string>
@@ -37,13 +38,21 @@ class VelocityFactorInterface
3738
{
3839
public:
3940
[[nodiscard]] VelocityFactor get() const { return velocity_factor_; }
41+
[[nodiscard]] autoware_adapi_v1_msgs::msg::VelocityFactorArray get_array(
42+
const rclcpp::Time & now) const
43+
{
44+
autoware_adapi_v1_msgs::msg::VelocityFactorArray array;
45+
array.header.stamp = now;
46+
array.factors.push_back(velocity_factor_);
47+
return array;
48+
}
4049
void init(const VelocityFactorBehavior & behavior) { behavior_ = behavior; }
4150
void reset() { velocity_factor_.behavior = PlanningBehavior::UNKNOWN; }
4251

52+
template <class PointType>
4353
void set(
44-
const std::vector<autoware_auto_planning_msgs::msg::PathPointWithLaneId> & points,
45-
const Pose & curr_pose, const Pose & stop_pose, const VelocityFactorStatus status,
46-
const std::string & detail = "");
54+
const std::vector<PointType> & points, const Pose & curr_pose, const Pose & stop_pose,
55+
const VelocityFactorStatus status, const std::string & detail = "");
4756

4857
private:
4958
VelocityFactorBehavior behavior_{VelocityFactor::UNKNOWN};

common/motion_utils/src/factor/velocity_factor_interface.cpp

+17-3
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,16 @@
1515
#include <motion_utils/factor/velocity_factor_interface.hpp>
1616
#include <motion_utils/trajectory/trajectory.hpp>
1717

18+
#include <autoware_auto_planning_msgs/msg/path_point.hpp>
19+
#include <autoware_auto_planning_msgs/msg/path_point_with_lane_id.hpp>
20+
#include <autoware_auto_planning_msgs/msg/trajectory_point.hpp>
21+
1822
namespace motion_utils
1923
{
24+
template <class PointType>
2025
void VelocityFactorInterface::set(
21-
const std::vector<autoware_auto_planning_msgs::msg::PathPointWithLaneId> & points,
22-
const Pose & curr_pose, const Pose & stop_pose, const VelocityFactorStatus status,
23-
const std::string & detail)
26+
const std::vector<PointType> & points, const Pose & curr_pose, const Pose & stop_pose,
27+
const VelocityFactorStatus status, const std::string & detail)
2428
{
2529
const auto & curr_point = curr_pose.position;
2630
const auto & stop_point = stop_pose.position;
@@ -32,4 +36,14 @@ void VelocityFactorInterface::set(
3236
velocity_factor_.detail = detail;
3337
}
3438

39+
template void VelocityFactorInterface::set<autoware_auto_planning_msgs::msg::PathPointWithLaneId>(
40+
const std::vector<autoware_auto_planning_msgs::msg::PathPointWithLaneId> &, const Pose &,
41+
const Pose &, const VelocityFactorStatus, const std::string &);
42+
template void VelocityFactorInterface::set<autoware_auto_planning_msgs::msg::PathPoint>(
43+
const std::vector<autoware_auto_planning_msgs::msg::PathPoint> &, const Pose &, const Pose &,
44+
const VelocityFactorStatus, const std::string &);
45+
template void VelocityFactorInterface::set<autoware_auto_planning_msgs::msg::TrajectoryPoint>(
46+
const std::vector<autoware_auto_planning_msgs::msg::TrajectoryPoint> &, const Pose &,
47+
const Pose &, const VelocityFactorStatus, const std::string &);
48+
3549
} // namespace motion_utils

planning/motion_velocity_planner/motion_velocity_out_of_lane_module/src/out_of_lane_module.cpp

+19-4
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,15 @@ void OutOfLaneModule::init(rclcpp::Node & node, const std::string & module_name)
5050
logger_ = node.get_logger();
5151
clock_ = node.get_clock();
5252
init_parameters(node);
53-
debug_publisher =
53+
velocity_factor_interface_.init(motion_utils::PlanningBehavior::ROUTE_OBSTACLE);
54+
55+
debug_publisher_ =
5456
node.create_publisher<visualization_msgs::msg::MarkerArray>("~/" + ns_ + "/debug_markers", 1);
55-
virtual_wall_publisher =
57+
virtual_wall_publisher_ =
5658
node.create_publisher<visualization_msgs::msg::MarkerArray>("~/" + ns_ + "/virtual_walls", 1);
59+
velocity_factor_publisher_ =
60+
node.create_publisher<autoware_adapi_v1_msgs::msg::VelocityFactorArray>(
61+
std::string("/planning/velocity_factors/") + ns_, 1);
5762
}
5863
void OutOfLaneModule::init_parameters(rclcpp::Node & node)
5964
{
@@ -258,6 +263,15 @@ VelocityPlanningResult OutOfLaneModule::plan(
258263
result.slowdown_intervals.emplace_back(
259264
point_to_insert->point.pose.position, point_to_insert->point.pose.position,
260265
point_to_insert->slowdown.velocity);
266+
267+
const auto is_approaching = motion_utils::calcSignedArcLength(
268+
ego_trajectory_points, ego_data.pose.position,
269+
point_to_insert->point.pose.position) > 0.1 &&
270+
ego_data.velocity > 0.1;
271+
const auto status = is_approaching ? motion_utils::VelocityFactor::APPROACHING
272+
: motion_utils::VelocityFactor::STOPPED;
273+
velocity_factor_interface_.set(
274+
ego_trajectory_points, ego_data.pose, point_to_insert->point.pose, status, "out_of_lane");
261275
} else if (!decisions.empty()) {
262276
RCLCPP_WARN(logger_, "Could not insert stop point (would violate max deceleration limits)");
263277
}
@@ -278,10 +292,11 @@ VelocityPlanningResult OutOfLaneModule::plan(
278292
total_time_us, calculate_lanelets_us, calculate_trajectory_footprints_us,
279293
calculate_overlapping_ranges_us, filter_predicted_objects_ms, calculate_decisions_us,
280294
calc_slowdown_points_us, insert_slowdown_points_us);
281-
debug_publisher->publish(out_of_lane::debug::create_debug_marker_array(debug_data_));
295+
debug_publisher_->publish(out_of_lane::debug::create_debug_marker_array(debug_data_));
282296
virtual_wall_marker_creator.add_virtual_walls(
283297
out_of_lane::debug::create_virtual_walls(debug_data_, params_));
284-
virtual_wall_publisher->publish(virtual_wall_marker_creator.create_markers(clock_->now()));
298+
virtual_wall_publisher_->publish(virtual_wall_marker_creator.create_markers(clock_->now()));
299+
velocity_factor_publisher_->publish(velocity_factor_interface_.get_array(clock_->now()));
285300
return result;
286301
}
287302

planning/motion_velocity_planner/motion_velocity_out_of_lane_module/src/out_of_lane_module.hpp

-4
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,7 @@ class OutOfLaneModule : public PluginModuleInterface
5252
std::string module_name_;
5353
std::optional<out_of_lane::SlowdownToInsert> prev_inserted_point_{};
5454
rclcpp::Clock::SharedPtr clock_{};
55-
rclcpp::Logger logger_ = rclcpp::get_logger("");
5655
rclcpp::Time prev_inserted_point_time_{};
57-
rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr debug_publisher;
58-
rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr virtual_wall_publisher;
59-
motion_utils::VirtualWallMarkerCreator virtual_wall_marker_creator{};
6056

6157
protected:
6258
// Debug

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

+8
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "planner_data.hpp"
1919
#include "velocity_planning_result.hpp"
2020

21+
#include <motion_utils/factor/velocity_factor_interface.hpp>
2122
#include <rclcpp/rclcpp.hpp>
2223

2324
#include <autoware_auto_planning_msgs/msg/trajectory_point.hpp>
@@ -39,6 +40,13 @@ class PluginModuleInterface
3940
const std::vector<autoware_auto_planning_msgs::msg::TrajectoryPoint> & ego_trajectory_points,
4041
const std::shared_ptr<const PlannerData> planner_data) = 0;
4142
virtual std::string get_module_name() const = 0;
43+
motion_utils::VelocityFactorInterface velocity_factor_interface_;
44+
rclcpp::Logger logger_ = rclcpp::get_logger("");
45+
rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr debug_publisher_;
46+
rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr virtual_wall_publisher_;
47+
rclcpp::Publisher<autoware_adapi_v1_msgs::msg::VelocityFactorArray>::SharedPtr
48+
velocity_factor_publisher_;
49+
motion_utils::VirtualWallMarkerCreator virtual_wall_marker_creator{};
4250
};
4351

4452
} // namespace motion_velocity_planner

planning/motion_velocity_planner/motion_velocity_planner_common/package.xml

-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
<depend>tier4_autoware_utils</depend>
3030
<depend>tier4_planning_msgs</depend>
3131
<depend>visualization_msgs</depend>
32-
<!-- TODO(Maxime): remove; only needed for VelocityFactorInterface -->
3332

3433
<test_depend>ament_cmake_ros</test_depend>
3534
<test_depend>ament_lint_auto</test_depend>

0 commit comments

Comments
 (0)