test_joint_position_integrator.cpp
Go to the documentation of this file.
1 #include <gtest/gtest.h>
2 #include <ros/ros.h>
4 
5 bool assertMatrixEquality(const Eigen::MatrixXd &m1, const Eigen::MatrixXd &m2)
6 {
7  for (int j = 0; j < m1.cols(); ++j)
8  {
9  for (int i = 0; i < m1.rows(); ++i)
10  {
11  EXPECT_NEAR(m2(i, j), m1(i, j), 1e-7);
12  }
13  }
14 }
15 
16 TEST(TestJointPositionIntegrator, TestParameterLoading)
17 {
18  ros::NodeHandle nh("~");
19  ASSERT_NO_THROW(
21 }
22 
23 TEST(TestJointPositionIntegrator, TestIntegrationSingleValue)
24 {
25  ros::NodeHandle nh("~");
27  KDL::JntArray q(1), q_dot(1), q_up(1);
28  float dt = 0.1;
29  q_dot.data << 1.0;
30  q_up = integrator.update(q_dot, q, dt);
31  assertMatrixEquality(q_up.data, q.data + q_dot.data * dt);
32 }
33 
34 TEST(TestJointPositionIntegrator, TestIntegrationMultipleValues)
35 {
36  ros::NodeHandle nh("~");
38  KDL::JntArray q(14), q_dot(14), q_up(14);
39  q_dot.data << 0.01 * Eigen::VectorXd::Ones(14);
40  float dt = 0.1;
41  int num_integration = 10;
42  for (unsigned int i = 0; i < num_integration; i++)
43  {
44  q_up = integrator.update(q_dot, q, dt);
45  }
46  assertMatrixEquality(q_up.data, q.data + num_integration * q_dot.data * dt);
47 }
48 
49 TEST(TestJointPositionIntegrator, TestReset)
50 {
51  ros::NodeHandle nh("~");
53  KDL::JntArray q(14), q_prev(14), q_dot(14), q_up(14);
54  q_dot.data << Eigen::VectorXd::Ones(14);
55  float dt = 0.1;
56  q_up = integrator.update(q_dot, q, dt);
57  assertMatrixEquality(q_up.data, q.data + q_dot.data * dt);
58  q_prev = q;
59  q = q_up;
60  integrator.reset();
61  q_up = integrator.update(q_dot, q_prev, dt);
62  assertMatrixEquality(q_up.data, q_prev.data + q_dot.data * dt);
63  integrator.reset();
64  q_up = integrator.update(q_dot, q, dt); // after a reset, we take q
65  assertMatrixEquality(q_up.data, q.data + q_dot.data * dt);
66 }
67 
68 TEST(TestJointPositionIntegrator, TestSaturatedIntegration)
69 {
70  ros::NodeHandle nh("~");
71  double max_error = 0;
72  float dt = 0.1;
74  ASSERT_TRUE(nh.getParam("max_joint_error", max_error));
75  KDL::JntArray q(1), q_dot(1), q_up(1);
76  q_dot.data << (max_error + 0.0001) / dt;
77  q_up = integrator.update(q_dot, q, dt);
78  assertMatrixEquality(q_up.data, q.data);
79 }
80 
81 int main(int argc, char **argv)
82 {
83  ros::init(argc, argv, "my_test_node");
84  ::testing::InitGoogleTest(&argc, argv);
85  return RUN_ALL_TESTS();
86 }
KDL::JntArray update(const KDL::JntArray &q_dot, const KDL::JntArray &q, float dt)
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
bool assertMatrixEquality(const Eigen::MatrixXd &m1, const Eigen::MatrixXd &m2)
Eigen::VectorXd data
int main(int argc, char **argv)
bool getParam(const std::string &key, std::string &s) const
TEST(TestJointPositionIntegrator, TestParameterLoading)


generic_control_toolbox
Author(s): diogo
autogenerated on Wed Apr 28 2021 03:01:15