37 #include <gtest/gtest.h> 
   51 #include <rclcpp/rclcpp.hpp> 
   86     rclcpp::NodeOptions node_options;
 
   87     node_options.automatically_declare_parameters_from_overrides(
true);
 
   88     node_ = rclcpp::Node::make_shared(
"unittest_trajectory_generator_lin", node_options);
 
   91     rm_loader_ = std::make_unique<robot_model_loader::RobotModelLoader>(node_);
 
   92     robot_model_ = rm_loader_->getModel();
 
   93     ASSERT_TRUE(
bool(robot_model_)) << 
"Failed to load robot model";
 
   94     planning_scene_ = std::make_shared<planning_scene::PlanningScene>(robot_model_);
 
  111     tdp_ = std::make_unique<pilz_industrial_motion_planner_testutils::XmlTestdataLoader>(test_data_file_name_);
 
  112     ASSERT_NE(
nullptr, tdp_) << 
"Failed to load test data by provider.";
 
  114     tdp_->setRobotModel(robot_model_);
 
  127     planner_limits_.setCartesianLimits(cart_limits);
 
  130     lin_ = std::make_unique<TrajectoryGeneratorLIN>(robot_model_, planner_limits_, planning_group_);
 
  131     ASSERT_NE(
nullptr, lin_) << 
"Failed to create LIN trajectory generator.";
 
  136     robot_model_.reset();
 
  142     moveit_msgs::msg::MotionPlanResponse res_msg;
 
  150                                             pose_norm_tolerance_, rot_axis_norm_tolerance_))
 
  167   std::unique_ptr<robot_model_loader::RobotModelLoader> 
rm_loader_;
 
  171   std::unique_ptr<TrajectoryGenerator> 
lin_;
 
  173   std::unique_ptr<pilz_industrial_motion_planner_testutils::TestdataLoader> 
tdp_;
 
  190     std::shared_ptr<LinTrajectoryConversionFailure> ltcf_ex{ 
new LinTrajectoryConversionFailure(
"") };
 
  191     EXPECT_EQ(ltcf_ex->getErrorCode(), moveit_msgs::msg::MoveItErrorCodes::FAILURE);
 
  195     std::shared_ptr<JointNumberMismatch> jnm_ex{ 
new JointNumberMismatch(
"") };
 
  196     EXPECT_EQ(jnm_ex->getErrorCode(), moveit_msgs::msg::MoveItErrorCodes::INVALID_GOAL_CONSTRAINTS);
 
  200     std::shared_ptr<LinInverseForGoalIncalculable> lifgi_ex{ 
new LinInverseForGoalIncalculable(
"") };
 
  201     EXPECT_EQ(lifgi_ex->getErrorCode(), moveit_msgs::msg::MoveItErrorCodes::NO_IK_SOLUTION);
 
  214   req.start_state.joint_state.velocity.push_back(1.0);
 
  218   EXPECT_FALSE(lin_->generate(planning_scene_, req, res));
 
  219   EXPECT_EQ(res.
error_code_.val, moveit_msgs::msg::MoveItErrorCodes::INVALID_ROBOT_STATE);
 
  231   ASSERT_TRUE(lin_->generate(planning_scene_, lin_joint_req, res));
 
  232   EXPECT_TRUE(res.
error_code_.val == moveit_msgs::msg::MoveItErrorCodes::SUCCESS);
 
  235   EXPECT_TRUE(checkLinResponse(lin_joint_req, res));
 
  247   lin_joint_req.start_state.joint_state.velocity =
 
  248       std::vector<double>(lin_joint_req.start_state.joint_state.position.size(), 1e-16);
 
  252   ASSERT_TRUE(lin_->generate(planning_scene_, lin_joint_req, res));
 
  253   EXPECT_TRUE(res.
error_code_.val == moveit_msgs::msg::MoveItErrorCodes::SUCCESS);
 
  256   EXPECT_TRUE(checkLinResponse(lin_joint_req, res));
 
  269   ASSERT_TRUE(lin_->generate(planning_scene_, lin_cart_req, res));
 
  270   EXPECT_TRUE(res.
error_code_.val == moveit_msgs::msg::MoveItErrorCodes::SUCCESS);
 
  273   EXPECT_TRUE(checkLinResponse(lin_cart_req, res));
 
  293   ASSERT_TRUE(lin_->generate(planning_scene_, lin_joint_req, res, 0.01));
 
  294   EXPECT_EQ(res.
error_code_.val, moveit_msgs::msg::MoveItErrorCodes::SUCCESS);
 
  299   for (
size_t idx = 0; idx < res.
trajectory_->getLastWayPointPtr()->getVariableCount(); ++idx)
 
  301     EXPECT_NEAR(0.0, res.
trajectory_->getLastWayPointPtr()->getVariableVelocity(idx), other_tolerance_);
 
  302     EXPECT_NEAR(0.0, res.
trajectory_->getLastWayPointPtr()->getVariableAcceleration(idx), other_tolerance_);
 
  321   LinJoint lin{ tdp_->getLinJoint(
"lin2") };
 
  325   ASSERT_FALSE(lin_->generate(planning_scene_, lin.toRequest(), res));
 
  341   LinJoint lin{ tdp_->getLinJoint(
"lin2") };
 
  345   lin.getGoalConfiguration().setJoint(2, 0.96);
 
  346   lin.getGoalConfiguration().setJoint(4, -2.48);
 
  347   lin.setVelocityScale(1.0);
 
  348   lin.setAccelerationScale(1.0);
 
  351   ASSERT_FALSE(lin_->generate(planning_scene_, lin.toRequest(), res));
 
  371   for (
auto& joint_constraint : lin_joint_req.goal_constraints.at(0).joint_constraints)
 
  378   ASSERT_TRUE(lin_->generate(planning_scene_, lin_joint_req, res));
 
  379   EXPECT_TRUE(res.
error_code_.val == moveit_msgs::msg::MoveItErrorCodes::SUCCESS);
 
  382   EXPECT_TRUE(checkLinResponse(lin_joint_req, res));
 
  399                pilz_industrial_motion_planner::TrajectoryGeneratorInvalidLimitsException);
 
  418   lin_joint_req.goal_constraints.front().joint_constraints.pop_back();
 
  422   ASSERT_FALSE(lin_->generate(planning_scene_, lin_joint_req, res));
 
  423   EXPECT_TRUE(res.
error_code_.val == moveit_msgs::msg::MoveItErrorCodes::INVALID_GOAL_CONSTRAINTS);
 
  435   lin_cart_req.goal_constraints.front().position_constraints.front().header.frame_id = robot_model_->getModelFrame();
 
  436   lin_cart_req.goal_constraints.front().orientation_constraints.front().header.frame_id = robot_model_->getModelFrame();
 
  440   ASSERT_TRUE(lin_->generate(planning_scene_, lin_cart_req, res));
 
  441   EXPECT_TRUE(res.
error_code_.val == moveit_msgs::msg::MoveItErrorCodes::SUCCESS);
 
  444   EXPECT_TRUE(checkLinResponse(lin_cart_req, res));
 
  447 int main(
int argc, 
char** argv)
 
  449   rclcpp::init(argc, argv);
 
  450   testing::InitGoogleTest(&argc, argv);
 
  451   return RUN_ALL_TESTS();
 
Parameterized unittest of trajectory generator LIN to enable tests against different robot models....
 
double joint_position_tolerance_
 
bool checkLinResponse(const planning_interface::MotionPlanRequest &req, const planning_interface::MotionPlanResponse &res)
 
rclcpp::Node::SharedPtr node_
 
LimitsContainer planner_limits_
 
moveit::core::RobotModelConstPtr robot_model_
 
std::unique_ptr< pilz_industrial_motion_planner_testutils::TestdataLoader > tdp_
 
void SetUp() override
Create test scenario for lin trajectory generator.
 
std::string planning_group_
 
std::unique_ptr< TrajectoryGenerator > lin_
 
planning_scene::PlanningSceneConstPtr planning_scene_
 
std::unique_ptr< robot_model_loader::RobotModelLoader > rm_loader_
 
Representation of a robot's state. This includes position, velocity, acceleration and effort.
 
double getVariablePosition(const std::string &variable) const
Get the position of a particular variable. An exception is thrown if the variable is not known.
 
Set of cartesian limits, has values for velocity, acceleration and deceleration of both the translati...
 
void setMaxRotationalVelocity(double max_rot_vel)
Set the maximum rotational velocity.
 
void setMaxTranslationalVelocity(double max_trans_vel)
Set the maximal translational velocity.
 
void setMaxTranslationalAcceleration(double max_trans_acc)
Set the maximum translational acceleration.
 
void setMaxTranslationalDeceleration(double max_trans_dec)
Set the maximum translational deceleration.
 
static JointLimitsContainer getAggregatedLimits(const rclcpp::Node::SharedPtr &node, const std::string ¶m_namespace, const std::vector< const moveit::core::JointModel * > &joint_models)
Aggregates(combines) the joint limits from joint model and node parameters. The rules for the combina...
 
Container for JointLimits, essentially a map with convenience functions. Adds the ability to as for l...
 
This class combines CartesianLimit and JointLimits into on single class.
 
This class implements a linear trajectory generator in Cartesian space. The Cartesian trajetory are b...
 
GoalType & getGoalConfiguration()
 
Data class storing all information regarding a linear command.
 
void setAccelerationScale(double acceleration_scale)
 
bool jointStateToRobotState(const sensor_msgs::msg::JointState &joint_state, RobotState &state)
Convert a joint state to a MoveIt robot state.
 
TEST_F(GetSolverTipFrameIntegrationTest, TestHasSolverManipulator)
Check if hasSolver() can be called successfully for the manipulator group.
 
moveit_msgs::msg::MotionPlanRequest MotionPlanRequest
 
bool isGoalReached(const trajectory_msgs::msg::JointTrajectory &trajectory, const std::vector< moveit_msgs::msg::JointConstraint > &goal, const double joint_position_tolerance, const double joint_velocity_tolerance=1.0e-6)
check if the goal given in joint space is reached Only the last point in the trajectory is veryfied.
 
::testing::AssertionResult checkCartesianTranslationalPath(const robot_trajectory::RobotTrajectoryConstPtr &trajectory, const std::string &link_name, const double acc_tol=DEFAULT_ACCELERATION_EQUALITY_TOLERANCE)
Check that the translational path of a given trajectory has a trapezoid velocity profile.
 
bool checkJointTrajectory(const trajectory_msgs::msg::JointTrajectory &trajectory, const pilz_industrial_motion_planner::JointLimitsContainer &joint_limits)
check joint trajectory of consistency, position, velocity and acceleration limits
 
bool checkCartesianLinearity(const moveit::core::RobotModelConstPtr &robot_model, const trajectory_msgs::msg::JointTrajectory &trajectory, const planning_interface::MotionPlanRequest &req, const double translation_norm_tolerance, const double rot_axis_norm_tolerance, const double rot_angle_tolerance=10e-5)
Check that given trajectory is straight line.
 
void checkRobotModel(const moveit::core::RobotModelConstPtr &robot_model, const std::string &group_name, const std::string &link_name)
 
robot_trajectory::RobotTrajectoryPtr trajectory_
 
void getMessage(moveit_msgs::msg::MotionPlanResponse &msg) const
 
moveit_msgs::msg::MoveItErrorCodes error_code_
 
const std::string PARAM_NAMESPACE_LIMITS
 
const std::string PARAM_PLANNING_GROUP_NAME("planning_group")
 
const std::string RANDOM_TEST_TRIAL_NUM("random_trial_number")
 
const std::string ROTATION_AXIS_NORM_TOLERANCE("rot_axis_norm_tolerance")
 
const std::string JOINT_POSITION_TOLERANCE("joint_position_tolerance")
 
int main(int argc, char **argv)
 
const std::string TARGET_LINK_HCD("target_link_hand_computed_data")
 
const std::string VELOCITY_SCALING_FACTOR("velocity_scaling_factor")
 
const std::string POSE_TRANSFORM_MATRIX_NORM_TOLERANCE("pose_norm_tolerance")
 
const std::string TEST_DATA_FILE_NAME("testdata_file_name")
 
const std::string OTHER_TOLERANCE("other_tolerance")
 
const std::string JOINT_VELOCITY_TOLERANCE("joint_velocity_tolerance")