Skip to content

Commit 6b83181

Browse files
christophfroehlichmergify[bot]
authored andcommitted
[JTC] Invalidate empty trajectory messages (#902)
(cherry picked from commit 99fadce)
1 parent 7a06b1b commit 6b83181

File tree

2 files changed

+46
-2
lines changed

2 files changed

+46
-2
lines changed

joint_trajectory_controller/src/joint_trajectory_controller.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1396,6 +1396,12 @@ bool JointTrajectoryController::validate_trajectory_msg(
13961396
}
13971397
}
13981398

1399+
if (trajectory.points.empty())
1400+
{
1401+
RCLCPP_ERROR(get_node()->get_logger(), "Empty trajectory received.");
1402+
return false;
1403+
}
1404+
13991405
if (!params_.allow_nonzero_velocity_at_trajectory_end)
14001406
{
14011407
for (size_t i = 0; i < trajectory.points.back().velocities.size(); ++i)

joint_trajectory_controller/test/test_trajectory_controller.cpp

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1211,6 +1211,11 @@ TEST_P(TrajectoryControllerTestParameterized, invalid_message)
12111211
traj_msg.joint_names = {"bad_name"};
12121212
EXPECT_FALSE(traj_controller_->validate_trajectory_msg(traj_msg));
12131213

1214+
// empty message
1215+
traj_msg = good_traj_msg;
1216+
traj_msg.points.clear();
1217+
EXPECT_FALSE(traj_controller_->validate_trajectory_msg(traj_msg));
1218+
12141219
// No position data
12151220
traj_msg = good_traj_msg;
12161221
traj_msg.points[0].positions.clear();
@@ -1247,8 +1252,41 @@ TEST_P(TrajectoryControllerTestParameterized, invalid_message)
12471252
EXPECT_FALSE(traj_controller_->validate_trajectory_msg(traj_msg));
12481253
}
12491254

1250-
/// With allow_integration_in_goal_trajectories parameter trajectory missing position or
1251-
/// velocities are accepted
1255+
/**
1256+
* @brief Test invalid velocity at trajectory end with parameter set to false
1257+
*/
1258+
TEST_P(
1259+
TrajectoryControllerTestParameterized,
1260+
expect_invalid_when_message_with_nonzero_end_velocity_and_when_param_false)
1261+
{
1262+
rclcpp::Parameter nonzero_vel_parameters("allow_nonzero_velocity_at_trajectory_end", false);
1263+
rclcpp::executors::SingleThreadedExecutor executor;
1264+
SetUpAndActivateTrajectoryController(executor, {nonzero_vel_parameters});
1265+
1266+
trajectory_msgs::msg::JointTrajectory traj_msg;
1267+
traj_msg.joint_names = joint_names_;
1268+
traj_msg.header.stamp = rclcpp::Time(0);
1269+
1270+
// empty message (no throw!)
1271+
ASSERT_NO_THROW(traj_controller_->validate_trajectory_msg(traj_msg));
1272+
EXPECT_FALSE(traj_controller_->validate_trajectory_msg(traj_msg));
1273+
1274+
// Nonzero velocity at trajectory end!
1275+
traj_msg.points.resize(1);
1276+
traj_msg.points[0].time_from_start = rclcpp::Duration::from_seconds(0.25);
1277+
traj_msg.points[0].positions.resize(1);
1278+
traj_msg.points[0].positions = {1.0, 2.0, 3.0};
1279+
traj_msg.points[0].velocities.resize(1);
1280+
traj_msg.points[0].velocities = {-1.0, -2.0, -3.0};
1281+
EXPECT_FALSE(traj_controller_->validate_trajectory_msg(traj_msg));
1282+
}
1283+
1284+
/**
1285+
* @brief missing_positions_message_accepted Test mismatched joint and reference vector sizes
1286+
*
1287+
* @note With allow_integration_in_goal_trajectories parameter trajectory missing position or
1288+
* velocities are accepted
1289+
*/
12521290
TEST_P(TrajectoryControllerTestParameterized, missing_positions_message_accepted)
12531291
{
12541292
rclcpp::Parameter allow_integration_parameters("allow_integration_in_goal_trajectories", true);

0 commit comments

Comments
 (0)