@@ -31,9 +31,26 @@ namespace autoware::trajectory
31
31
32
32
using PointType = autoware_planning_msgs::msg::TrajectoryPoint;
33
33
34
+ void Trajectory<PointType>::add_base_addition_callback()
35
+ {
36
+ longitudinal_velocity_mps_->connect_base_addition_callback (
37
+ [&](const double s) { return this ->update_bases (s); });
38
+ lateral_velocity_mps_->connect_base_addition_callback (
39
+ [&](const double s) { return this ->update_bases (s); });
40
+ heading_rate_rps_->connect_base_addition_callback (
41
+ [&](const double s) { return this ->update_bases (s); });
42
+ acceleration_mps2_->connect_base_addition_callback (
43
+ [&](const double s) { return this ->update_bases (s); });
44
+ front_wheel_angle_rad_->connect_base_addition_callback (
45
+ [&](const double s) { return this ->update_bases (s); });
46
+ rear_wheel_angle_rad_->connect_base_addition_callback (
47
+ [&](const double s) { return this ->update_bases (s); });
48
+ }
49
+
34
50
Trajectory<PointType>::Trajectory()
35
51
{
36
52
Builder::defaults (this );
53
+ add_base_addition_callback ();
37
54
}
38
55
39
56
Trajectory<PointType>::Trajectory(const Trajectory & rhs)
@@ -49,6 +66,7 @@ Trajectory<PointType>::Trajectory(const Trajectory & rhs)
49
66
rear_wheel_angle_rad_(
50
67
std::make_shared<detail::InterpolatedArray<double >>(*rhs.rear_wheel_angle_rad_))
51
68
{
69
+ add_base_addition_callback ();
52
70
}
53
71
54
72
Trajectory<PointType> & Trajectory<PointType>::operator =(const Trajectory & rhs)
@@ -62,6 +80,7 @@ Trajectory<PointType> & Trajectory<PointType>::operator=(const Trajectory & rhs)
62
80
*front_wheel_angle_rad_ = *rhs.front_wheel_angle_rad_ ;
63
81
*rear_wheel_angle_rad_ = *rhs.rear_wheel_angle_rad_ ;
64
82
}
83
+ add_base_addition_callback ();
65
84
return *this ;
66
85
}
67
86
@@ -141,17 +160,7 @@ interpolator::InterpolationResult Trajectory<PointType>::build(
141
160
142
161
std::vector<double > Trajectory<PointType>::get_underlying_bases() const
143
162
{
144
- auto get_bases = [](const auto & interpolated_array) {
145
- auto [bases, values] = interpolated_array.get_data ();
146
- return bases;
147
- };
148
-
149
- auto bases = detail::merge_vectors (
150
- bases_, get_bases (this ->longitudinal_velocity_mps ()), get_bases (this ->lateral_velocity_mps ()),
151
- get_bases (this ->heading_rate_rps ()), get_bases (this ->acceleration_mps2 ()),
152
- get_bases (this ->front_wheel_angle_rad ()), get_bases (this ->rear_wheel_angle_rad ()));
153
-
154
- bases = detail::crop_bases (bases, start_, end_);
163
+ auto bases = detail::crop_bases (bases_, start_, end_);
155
164
std::transform (
156
165
bases.begin (), bases.end (), bases.begin (), [this ](const double & s) { return s - start_; });
157
166
return bases;
0 commit comments