21
21
#include < rclcpp/timer.hpp>
22
22
#include < tier4_autoware_utils/geometry/geometry.hpp>
23
23
24
+ #include < tier4_planning_msgs/msg/velocity_limit.hpp>
25
+
24
26
#include < chrono>
25
27
#include < functional>
26
28
#include < memory>
@@ -34,7 +36,8 @@ RemainingDistanceTimeCalculatorNode::RemainingDistanceTimeCalculatorNode(
34
36
const rclcpp::NodeOptions & options)
35
37
: Node(" remaining_distance_time_calculator" , options),
36
38
is_graph_ready_{false },
37
- has_received_route_{false }
39
+ has_received_route_{false },
40
+ velocity_limit_{99.99 }
38
41
{
39
42
using std::placeholders::_1;
40
43
@@ -49,6 +52,9 @@ RemainingDistanceTimeCalculatorNode::RemainingDistanceTimeCalculatorNode(
49
52
sub_route_ = create_subscription<LaneletRoute>(
50
53
" ~/input/route" , qos_transient_local,
51
54
std::bind (&RemainingDistanceTimeCalculatorNode::on_route, this , _1));
55
+ sub_planning_velocity_ = create_subscription<tier4_planning_msgs::msg::VelocityLimit>(
56
+ " /planning/scenario_planning/current_max_velocity" , qos_transient_local,
57
+ std::bind (&RemainingDistanceTimeCalculatorNode::on_velocity_limit, this , _1));
52
58
53
59
pub_mission_remaining_distance_time_ = create_publisher<MissionRemainingDistanceTime>(
54
60
" ~/output/mission_remaining_distance_time" ,
@@ -84,6 +90,15 @@ void RemainingDistanceTimeCalculatorNode::on_route(const LaneletRoute::ConstShar
84
90
has_received_route_ = true ;
85
91
}
86
92
93
+ void RemainingDistanceTimeCalculatorNode::on_velocity_limit (
94
+ const VelocityLimit::ConstSharedPtr& msg)
95
+ {
96
+ // store the velocity for releasing the stop
97
+ if (msg->max_velocity > 1e-5 ) {
98
+ velocity_limit_ = msg->max_velocity ;
99
+ }
100
+ }
101
+
87
102
void RemainingDistanceTimeCalculatorNode::on_timer ()
88
103
{
89
104
if (is_graph_ready_ && has_received_route_) {
@@ -121,6 +136,7 @@ double RemainingDistanceTimeCalculatorNode::calculate_remaining_distance() const
121
136
lanelet::ArcCoordinates arc_coord =
122
137
lanelet::utils::getArcCoordinates ({llt}, current_vehicle_pose_);
123
138
double this_lanelet_length = lanelet::utils::getLaneletLength2d (llt);
139
+
124
140
remaining_distance += this_lanelet_length - arc_coord.length ;
125
141
} else if (index == (remaining_shortest_path.size () - 1 )) {
126
142
lanelet::ArcCoordinates arc_coord = lanelet::utils::getArcCoordinates ({llt}, goal_pose_);
@@ -138,17 +154,7 @@ double RemainingDistanceTimeCalculatorNode::calculate_remaining_distance() const
138
154
double RemainingDistanceTimeCalculatorNode::calculate_remaining_time (
139
155
const double remaining_distance) const
140
156
{
141
- double current_velocity_norm = std::sqrt (
142
- current_vehicle_velocity_.x * current_vehicle_velocity_.x +
143
- current_vehicle_velocity_.y * current_vehicle_velocity_.y );
144
-
145
- if (remaining_distance < 0.01 || current_velocity_norm < 0.01 ) {
146
- return 0.0 ;
147
- }
148
-
149
- double remaining_time = remaining_distance / current_velocity_norm;
150
-
151
- return remaining_time;
157
+ return remaining_distance / velocity_limit_;
152
158
}
153
159
154
160
void RemainingDistanceTimeCalculatorNode::publish_mission_remaining_distance_time (
0 commit comments