Skip to content

Commit f64c964

Browse files
authored
JTC: sum periods (ros-controls#1395)
1 parent d8b30f8 commit f64c964

File tree

3 files changed

+16
-6
lines changed

3 files changed

+16
-6
lines changed

joint_trajectory_controller/include/joint_trajectory_controller/joint_trajectory_controller.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ class JointTrajectoryController : public controller_interface::ControllerInterfa
127127
Params params_;
128128
rclcpp::Duration update_period_{0, 0};
129129

130+
rclcpp::Time traj_time_;
131+
130132
trajectory_msgs::msg::JointTrajectoryPoint last_commanded_state_;
131133
/// Specify interpolation method. Default to splines.
132134
interpolation_methods::InterpolationMethod interpolation_method_{

joint_trajectory_controller/src/joint_trajectory_controller.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,15 +196,20 @@ controller_interface::return_type JointTrajectoryController::update(
196196
traj_external_point_ptr_->set_point_before_trajectory_msg(
197197
time, state_current_, joints_angle_wraparound_);
198198
}
199+
traj_time_ = time;
200+
}
201+
else
202+
{
203+
traj_time_ += period;
199204
}
200205

201206
// Sample expected state from the trajectory
202207
traj_external_point_ptr_->sample(
203-
time, interpolation_method_, state_desired_, start_segment_itr, end_segment_itr);
208+
traj_time_, interpolation_method_, state_desired_, start_segment_itr, end_segment_itr);
204209

205210
// Sample setpoint for next control cycle
206211
const bool valid_point = traj_external_point_ptr_->sample(
207-
time + update_period_, interpolation_method_, command_next_, start_segment_itr,
212+
traj_time_ + update_period_, interpolation_method_, command_next_, start_segment_itr,
208213
end_segment_itr, false);
209214

210215
if (valid_point)
@@ -217,7 +222,7 @@ controller_interface::return_type JointTrajectoryController::update(
217222
// time_difference is
218223
// - negative until first point is reached
219224
// - counting from zero to time_from_start of next point
220-
double time_difference = time.seconds() - segment_time_from_start.seconds();
225+
double time_difference = traj_time_.seconds() - segment_time_from_start.seconds();
221226
bool tolerance_violated_while_moving = false;
222227
bool outside_goal_tolerance = false;
223228
bool within_goal_time = true;

joint_trajectory_controller/test/test_trajectory_actions.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,15 @@ class TestTrajectoryActions : public TrajectoryControllerTest
8383
{
8484
// controller hardware cycle update loop
8585
auto clock = rclcpp::Clock(RCL_STEADY_TIME);
86-
auto start_time = clock.now();
86+
auto now_time = clock.now();
87+
auto last_time = now_time;
8788
rclcpp::Duration wait = rclcpp::Duration::from_seconds(2.0);
88-
auto end_time = start_time + wait;
89+
auto end_time = last_time + wait;
8990
while (clock.now() < end_time)
9091
{
91-
traj_controller_->update(clock.now(), clock.now() - start_time);
92+
now_time = clock.now();
93+
traj_controller_->update(now_time, now_time - last_time);
94+
last_time = now_time;
9295
}
9396
});
9497

0 commit comments

Comments
 (0)