7 #include <gtest/gtest.h> 8 #include <gtest/gtest-spi.h> 9 #include <geometry_msgs/WrenchStamped.h> 10 #include <geometry_msgs/Wrench.h> 12 #include <rokubimini_msgs/ResetWrench.h> 13 #include <Eigen/Dense> 15 using namespace Eigen;
33 double fx_, fy_, fz_, tx_, ty_,
tz_;
62 std::uint32_t lpos = msgCount_;
64 fxSamples_.conservativeResize(msgCount_);
65 fySamples_.conservativeResize(msgCount_);
66 fzSamples_.conservativeResize(msgCount_);
67 txSamples_.conservativeResize(msgCount_);
68 tySamples_.conservativeResize(msgCount_);
69 tzSamples_.conservativeResize(msgCount_);
71 fxSamples_(lpos) = msg->wrench.force.x;
72 fySamples_(lpos) = msg->wrench.force.y;
73 fzSamples_(lpos) = msg->wrench.force.z;
74 txSamples_(lpos) = msg->wrench.torque.x;
75 tySamples_(lpos) = msg->wrench.torque.y;
76 tzSamples_(lpos) = msg->wrench.torque.z;
82 SCOPED_TRACE(
"TestResetServiceCustomWrench");
85 double starting_offset = 18.0;
87 ASSERT_EQ(nh_.getParam(
"topic_name", topicName_),
true);
88 ASSERT_EQ(nh_.getParam(
"service_name", serviceName_),
true);
89 ASSERT_EQ(nh_.getParam(
"fx", fx_),
true);
90 ASSERT_EQ(nh_.getParam(
"fy", fy_),
true);
91 ASSERT_EQ(nh_.getParam(
"fz", fz_),
true);
92 ASSERT_EQ(nh_.getParam(
"tx", tx_),
true);
93 ASSERT_EQ(nh_.getParam(
"ty", ty_),
true);
94 ASSERT_EQ(nh_.getParam(
"tz", tz_),
true);
95 ASSERT_EQ(nh_.getParam(
"test_duration", test_duration),
true);
96 ASSERT_GE(test_duration, starting_offset + 10.0);
107 if (HasFatalFailure())
109 FAIL() <<
"Fatal errors occurred.\n";
120 rokubimini_msgs::ResetWrench::Request req;
121 rokubimini_msgs::ResetWrench::Response res;
122 req.desired_wrench = geometry_msgs::Wrench();
123 req.desired_wrench.force.x = fx_;
124 req.desired_wrench.force.y = fy_;
125 req.desired_wrench.force.z = fz_;
126 req.desired_wrench.torque.x = tx_;
127 req.desired_wrench.torque.y = ty_;
128 req.desired_wrench.torque.z = tz_;
130 EXPECT_EQ(res.success,
true);
137 sub_ = nh_.subscribe(topicName_, 1000, &BotaDriverTestResetService::resetWrenchCallback,
143 if (HasFatalFailure())
145 FAIL() <<
"Fatal errors occurred.\n";
149 meanWrenchOffset_.force.x = fxSamples_.mean();
150 meanWrenchOffset_.force.y = fySamples_.mean();
151 meanWrenchOffset_.force.z = fzSamples_.mean();
152 meanWrenchOffset_.torque.x = txSamples_.mean();
153 meanWrenchOffset_.torque.y = tySamples_.mean();
154 meanWrenchOffset_.torque.z = tzSamples_.mean();
155 ASSERT_GT(msgCount_, 0U);
156 EXPECT_NEAR(meanWrenchOffset_.force.x, fx_, 0.2);
157 EXPECT_NEAR(meanWrenchOffset_.force.y, fy_, 0.2);
158 EXPECT_NEAR(meanWrenchOffset_.force.z, fz_, 0.2);
159 EXPECT_NEAR(meanWrenchOffset_.torque.x, tx_, 0.01);
160 EXPECT_NEAR(meanWrenchOffset_.torque.y, ty_, 0.01);
161 EXPECT_NEAR(meanWrenchOffset_.torque.z, tz_, 0.01);
~BotaDriverTestResetService() override
bool call(const std::string &service_name, MReq &req, MRes &res)
TEST_F(BotaDriverTestResetService, CustomWrench)
BotaDriverTestResetService()
geometry_msgs::Wrench meanWrenchOffset_
void resetWrenchCallback(const geometry_msgs::WrenchStamped::ConstPtr &msg)
ROSCPP_DECL void spinOnce()
ROSCPP_DECL bool waitForService(const std::string &service_name, int32_t timeout)