31 #include <planner_cspace_msgs/PlannerStatus.h> 32 #include <sensor_msgs/JointState.h> 33 #include <trajectory_msgs/JointTrajectory.h> 35 #include <gtest/gtest.h> 37 TEST(Planner2DOFSerialJoints, Plan)
43 trajectory_msgs::JointTrajectory::ConstPtr planned;
44 const auto cb_plan = [&planned](
const trajectory_msgs::JointTrajectory::ConstPtr&
msg)
50 planner_cspace_msgs::PlannerStatus::ConstPtr status;
51 const auto cb_status = [&status](
const planner_cspace_msgs::PlannerStatus::ConstPtr&
msg)
56 "/planner_2dof_serial_joints/group0/status", 1, cb_status);
58 sensor_msgs::JointState
s;
59 s.name.push_back(
"front");
60 s.position.push_back(-1.57);
61 s.name.push_back(
"rear");
62 s.position.push_back(0.0);
64 trajectory_msgs::JointTrajectory
cmd;
65 cmd.joint_names.push_back(
"front");
66 cmd.joint_names.push_back(
"rear");
67 trajectory_msgs::JointTrajectoryPoint p;
68 p.positions.push_back(-4.71);
69 p.positions.push_back(0.0);
70 cmd.points.push_back(p);
87 if (planned && status)
98 ASSERT_EQ(planner_cspace_msgs::PlannerStatus::DOING, status->status);
99 ASSERT_EQ(planner_cspace_msgs::PlannerStatus::GOING_WELL, status->error);
101 ASSERT_EQ(2u, planned->joint_names.size());
102 ASSERT_EQ(
"front", planned->joint_names[0]);
103 ASSERT_EQ(
"rear", planned->joint_names[1]);
106 const float fc = -3.14;
107 const float rc = 0.0;
108 for (
int i = 1; i < static_cast<int>(planned->points.size()); ++i)
110 const trajectory_msgs::JointTrajectoryPoint& p0 = planned->points[i - 1];
111 const trajectory_msgs::JointTrajectoryPoint& p1 = planned->points[i];
112 ASSERT_EQ(2u, p0.positions.size());
113 ASSERT_EQ(2u, p1.positions.size());
115 const float f0 = p0.positions[0];
116 const float r0 = p0.positions[1];
117 const float f1 = p1.positions[0];
118 const float r1 = p1.positions[1];
120 ASSERT_LT(-6.28, f0);
122 ASSERT_LT(-3.14, r0);
124 ASSERT_LT(-6.28, f1);
126 ASSERT_LT(-3.14, r1);
129 const float front_diff = f1 - f0;
130 const float rear_diff = r1 - r0;
138 std::hypot(front_diff, rear_diff);
142 ASSERT_EQ(planner_cspace_msgs::PlannerStatus::DOING, status->status);
143 ASSERT_EQ(planner_cspace_msgs::PlannerStatus::GOING_WELL, status->error);
147 TEST(Planner2DOFSerialJoints, NoPath)
153 planner_cspace_msgs::PlannerStatus::ConstPtr status;
154 const auto cb_status = [&status](
const planner_cspace_msgs::PlannerStatus::ConstPtr&
msg)
159 "/planner_2dof_serial_joints/group0/status", 1, cb_status);
161 sensor_msgs::JointState
s;
162 s.name.push_back(
"front");
163 s.position.push_back(-1.57);
164 s.name.push_back(
"rear");
165 s.position.push_back(0.0);
167 trajectory_msgs::JointTrajectory
cmd;
168 cmd.joint_names.push_back(
"front");
169 cmd.joint_names.push_back(
"rear");
170 trajectory_msgs::JointTrajectoryPoint p;
171 p.positions.push_back(3.14);
172 p.positions.push_back(0.0);
173 cmd.points.push_back(p);
186 pub_cmd.publish(cmd);
201 ASSERT_EQ(planner_cspace_msgs::PlannerStatus::DOING, status->status);
202 ASSERT_EQ(planner_cspace_msgs::PlannerStatus::PATH_NOT_FOUND, status->error);
205 int main(
int argc,
char** argv)
207 testing::InitGoogleTest(&argc, argv);
208 ros::init(argc, argv,
"test_planner_2dof_serial_joints");
210 return RUN_ALL_TESTS();
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
void publish(const boost::shared_ptr< M > &message) const
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
int main(int argc, char **argv)
ROSCPP_DECL void spinOnce()
TEST(Planner2DOFSerialJoints, Plan)