Skip to content

Commit 3b1ce63

Browse files
committed
fix(tier4_autoware_utils): impl class inheritance
Signed-off-by: satoshi-ota <satoshi.ota928@gmail.com>
1 parent d554e76 commit 3b1ce63

File tree

2 files changed

+18
-89
lines changed

2 files changed

+18
-89
lines changed

common/tier4_autoware_utils/include/tier4_autoware_utils/vehicle/vehicle_state_checker.hpp

+12-21
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ namespace tier4_autoware_utils
2828
{
2929

3030
using autoware_auto_planning_msgs::msg::Trajectory;
31+
using geometry_msgs::msg::TwistStamped;
32+
using nav_msgs::msg::Odometry;
3133

3234
class VehicleStopChecker
3335
{
@@ -38,46 +40,35 @@ class VehicleStopChecker
3840

3941
rclcpp::Logger getLogger() { return logger_; }
4042

41-
private:
42-
rclcpp::Subscription<nav_msgs::msg::Odometry>::SharedPtr sub_odom_;
43-
43+
protected:
44+
rclcpp::Subscription<Odometry>::SharedPtr sub_odom_;
4445
rclcpp::Clock::SharedPtr clock_;
4546
rclcpp::Logger logger_;
4647

47-
std::deque<geometry_msgs::msg::TwistStamped> twist_buffer_;
48+
Odometry::SharedPtr odometry_ptr_;
49+
50+
std::deque<TwistStamped> twist_buffer_;
4851

52+
private:
4953
static constexpr double velocity_buffer_time_sec = 10.0;
5054

51-
void onOdom(const nav_msgs::msg::Odometry::SharedPtr msg);
55+
void onOdom(const Odometry::SharedPtr msg);
5256
};
5357

54-
class VehicleArrivalChecker
58+
class VehicleArrivalChecker : public VehicleStopChecker
5559
{
5660
public:
5761
explicit VehicleArrivalChecker(rclcpp::Node * node);
5862

59-
bool isVehicleStopped(const double stop_duration) const;
60-
6163
bool isVehicleStoppedAtStopPoint(const double stop_duration) const;
6264

63-
rclcpp::Logger getLogger() { return logger_; }
64-
6565
private:
66-
rclcpp::Subscription<nav_msgs::msg::Odometry>::SharedPtr sub_odom_;
67-
rclcpp::Subscription<Trajectory>::SharedPtr sub_trajectory_;
66+
static constexpr double th_arrived_distance_m = 1.0;
6867

69-
rclcpp::Clock::SharedPtr clock_;
70-
rclcpp::Logger logger_;
68+
rclcpp::Subscription<Trajectory>::SharedPtr sub_trajectory_;
7169

72-
nav_msgs::msg::Odometry::SharedPtr odometry_ptr_;
7370
Trajectory::SharedPtr trajectory_ptr_;
7471

75-
std::deque<geometry_msgs::msg::TwistStamped> twist_buffer_;
76-
77-
static constexpr double velocity_buffer_time_sec = 10.0;
78-
static constexpr double th_arrived_distance_m = 1.0;
79-
80-
void onOdom(const nav_msgs::msg::Odometry::SharedPtr msg);
8172
void onTrajectory(const Trajectory::SharedPtr msg);
8273
};
8374
} // namespace tier4_autoware_utils

common/tier4_autoware_utils/src/vehicle/vehicle_state_checker.cpp

+6-68
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ VehicleStopChecker::VehicleStopChecker(rclcpp::Node * node)
2525
{
2626
using std::placeholders::_1;
2727

28-
sub_odom_ = node->create_subscription<nav_msgs::msg::Odometry>(
28+
sub_odom_ = node->create_subscription<Odometry>(
2929
"/localization/kinematic_state", rclcpp::QoS(1),
3030
std::bind(&VehicleStopChecker::onOdom, this, _1));
3131
}
@@ -64,9 +64,11 @@ bool VehicleStopChecker::isVehicleStopped(const double stop_duration = 0.0) cons
6464
return true;
6565
}
6666

67-
void VehicleStopChecker::onOdom(const nav_msgs::msg::Odometry::SharedPtr msg)
67+
void VehicleStopChecker::onOdom(const Odometry::SharedPtr msg)
6868
{
69-
auto current_velocity = std::make_shared<geometry_msgs::msg::TwistStamped>();
69+
odometry_ptr_ = msg;
70+
71+
auto current_velocity = std::make_shared<TwistStamped>();
7072
current_velocity->header = msg->header;
7173
current_velocity->twist = msg->twist.twist;
7274

@@ -87,54 +89,15 @@ void VehicleStopChecker::onOdom(const nav_msgs::msg::Odometry::SharedPtr msg)
8789
}
8890
}
8991

90-
VehicleArrivalChecker::VehicleArrivalChecker(rclcpp::Node * node)
91-
: clock_(node->get_clock()), logger_(node->get_logger())
92+
VehicleArrivalChecker::VehicleArrivalChecker(rclcpp::Node * node) : VehicleStopChecker(node)
9293
{
9394
using std::placeholders::_1;
9495

95-
sub_odom_ = node->create_subscription<nav_msgs::msg::Odometry>(
96-
"/localization/kinematic_state", rclcpp::QoS(1),
97-
std::bind(&VehicleArrivalChecker::onOdom, this, _1));
98-
9996
sub_trajectory_ = node->create_subscription<Trajectory>(
10097
"/planning/scenario_planning/trajectory", rclcpp::QoS(1),
10198
std::bind(&VehicleArrivalChecker::onTrajectory, this, _1));
10299
}
103100

104-
bool VehicleArrivalChecker::isVehicleStopped(const double stop_duration = 0.0) const
105-
{
106-
if (twist_buffer_.empty()) {
107-
return false;
108-
}
109-
110-
const auto now = clock_->now();
111-
const auto time_buffer = now - twist_buffer_.back().header.stamp;
112-
if (time_buffer.seconds() < stop_duration) {
113-
return false;
114-
}
115-
116-
// Get velocities within stop_duration
117-
std::vector<double> vs;
118-
for (const auto & velocity : twist_buffer_) {
119-
vs.push_back(velocity.twist.linear.x);
120-
121-
const auto time_diff = now - velocity.header.stamp;
122-
if (time_diff.seconds() >= stop_duration) {
123-
break;
124-
}
125-
}
126-
127-
// Check all velocities
128-
constexpr double stop_velocity = 1e-3;
129-
for (const auto & v : vs) {
130-
if (v >= stop_velocity) {
131-
return false;
132-
}
133-
}
134-
135-
return true;
136-
}
137-
138101
bool VehicleArrivalChecker::isVehicleStoppedAtStopPoint(const double stop_duration = 0.0) const
139102
{
140103
if (!odometry_ptr_ || !trajectory_ptr_) {
@@ -156,30 +119,5 @@ bool VehicleArrivalChecker::isVehicleStoppedAtStopPoint(const double stop_durati
156119
th_arrived_distance_m;
157120
}
158121

159-
void VehicleArrivalChecker::onOdom(const nav_msgs::msg::Odometry::SharedPtr msg)
160-
{
161-
odometry_ptr_ = msg;
162-
163-
auto current_velocity = std::make_shared<geometry_msgs::msg::TwistStamped>();
164-
current_velocity->header = msg->header;
165-
current_velocity->twist = msg->twist.twist;
166-
167-
twist_buffer_.push_front(*current_velocity);
168-
169-
const auto now = clock_->now();
170-
while (true) {
171-
// Check oldest data time
172-
const auto time_diff = now - twist_buffer_.back().header.stamp;
173-
174-
// Finish when oldest data is newer than threshold
175-
if (time_diff.seconds() <= velocity_buffer_time_sec) {
176-
break;
177-
}
178-
179-
// Remove old data
180-
twist_buffer_.pop_back();
181-
}
182-
}
183-
184122
void VehicleArrivalChecker::onTrajectory(const Trajectory::SharedPtr msg) { trajectory_ptr_ = msg; }
185123
} // namespace tier4_autoware_utils

0 commit comments

Comments
 (0)