RosMsgTreeIdTest.cpp
Go to the documentation of this file.
00001 #include <gtest/gtest.h>
00002 #include "robodyn_controllers/KdlTreeId.h"
00003 #include "robodyn_controllers/RosMsgTreeId.h"
00004 #include <ros/package.h>
00005 
00006 class RosMsgTreeIdTest : public ::testing::Test
00007 {
00008 protected:
00009     virtual void SetUp()
00010     {
00011         std::string packagePath = ros::package::getPath("robodyn_controllers");
00012         id.loadFromFile(packagePath + "/test/urdf/SimpleTestRobot.xml");
00013         tree = id.getTree();
00014         jd.InitializeMaps(tree);
00015         ros::Time::init();
00016     }
00017 
00018     virtual void TearDown()
00019     {
00020     }
00021 
00022     KdlTreeId         id;
00023     KDL::Tree         tree;
00024     JointDynamicsData jd;
00025     JntDynData        data;
00026     RosMsgTreeId      rmt;
00027 };
00028 
00029 TEST_F(RosMsgTreeIdTest, SetJointDataTest)
00030 {
00031     sensor_msgs::JointState          actualState;
00032     sensor_msgs::JointState          traj1;
00033     r2_msgs::WrenchState wrenchState;
00034 
00035     actualState.name.push_back("joint1");
00036     actualState.name.push_back("joint2");
00037     actualState.name.push_back("joint3");
00038 
00039     actualState.position.push_back(5.0);
00040     actualState.position.push_back(5.0);
00041     actualState.position.push_back(5.0);
00042 
00043     actualState.velocity.push_back(5.0);
00044     actualState.velocity.push_back(5.0);
00045     actualState.velocity.push_back(5.0);
00046 
00047     actualState.effort.push_back(5.0);
00048     actualState.effort.push_back(5.0);
00049     actualState.effort.push_back(5.0);
00050 
00051     // Empty traj message
00052     rmt.setJointData(actualState, traj1, wrenchState, jd);
00053     data = jd.jointDataMap["joint1"];
00054     EXPECT_EQ(5.0, data.pos);
00055     EXPECT_EQ(0.0, data.vel);
00056     EXPECT_EQ(0.0, data.acc);
00057 
00058     traj1.name.push_back("joint1");
00059     traj1.position.push_back(1.0);
00060     traj1.velocity.push_back(1.0);
00061     traj1.effort.push_back(1.0);
00062 
00063     traj1.name.push_back("joint2");
00064     traj1.name.push_back("joint3");
00065 
00066     traj1.position.push_back(2.0);
00067     traj1.position.push_back(2.0);
00068 
00069     traj1.velocity.push_back(2.0);
00070     traj1.velocity.push_back(2.0);
00071 
00072     traj1.effort.push_back(2.0);
00073     traj1.effort.push_back(2.0);
00074 
00075     // Finally start the test
00076     // Actual state populated only
00077     rmt.setJointData(actualState, traj1, wrenchState, jd);
00078 
00079     data = jd.jointDataMap["joint1"];
00080     EXPECT_EQ(5.0, data.pos);
00081     EXPECT_EQ(1.0, data.vel);
00082     EXPECT_EQ(1.0, data.acc);
00083 
00084     data = jd.jointDataMap["joint3"];
00085     EXPECT_EQ(5.0, data.pos);
00086 
00087     EXPECT_EQ(0.0, jd.extForceMap["link2"].force(0));
00088 
00089     data = jd.jointDataMap["joint2"];
00090     EXPECT_EQ(5.0, data.pos);
00091     EXPECT_EQ(2.0, data.vel);
00092     EXPECT_EQ(2.0, data.acc);
00093 
00094     // trajectory and force
00095     wrenchState.name.push_back("link2");
00096     geometry_msgs::Vector3 init;
00097     init.x = 3.0;
00098     init.y = 3.0;
00099     init.z = 3.0;
00100     geometry_msgs::Wrench initW;
00101     initW.force  = init;
00102     initW.torque = init;
00103     wrenchState.wrench.push_back(initW);
00104 
00105     rmt.setJointData(actualState, traj1, wrenchState, jd);
00106 
00107     data = jd.jointDataMap["joint1"];
00108     EXPECT_EQ(5.0, data.pos);
00109     EXPECT_EQ(1.0, data.vel);
00110     EXPECT_EQ(1.0, data.acc);
00111 
00112     data = jd.jointDataMap["joint2"];
00113     EXPECT_EQ(5.0, data.pos);
00114     EXPECT_EQ(2.0, data.vel);
00115     EXPECT_EQ(2.0, data.acc);
00116 
00117     data = jd.jointDataMap["joint3"];
00118     EXPECT_EQ(5.0, data.pos);
00119     EXPECT_EQ(2.0, data.vel);
00120     EXPECT_EQ(2.0, data.acc);
00121 
00122     EXPECT_EQ(0.0,  jd.extForceMap["link1"].force(0));
00123     EXPECT_EQ(-3.0, jd.extForceMap["link2"].force(0));
00124     EXPECT_EQ(-3.0, jd.extForceMap["link2"].force(1));
00125     EXPECT_EQ(-3.0, jd.extForceMap["link2"].force(2));
00126     EXPECT_EQ(-3.0, jd.extForceMap["link2"].torque(0));
00127     EXPECT_EQ(-3.0, jd.extForceMap["link2"].torque(1));
00128     EXPECT_EQ(-3.0, jd.extForceMap["link2"].torque(2));
00129 }
00130 
00131 TEST_F(RosMsgTreeIdTest, GetJointCommandTest)
00132 {
00133     // Set up map
00134     jd.jointTorqueCommandMap["joint1"] = 1.0;
00135     jd.jointTorqueCommandMap["joint2"] = 2.0;
00136     jd.jointTorqueCommandMap["joint3"] = 3.0;
00137 
00138     // Set up message
00139     sensor_msgs::JointState tauFF;
00140 
00141     rmt.getJointCommand(jd, tauFF);
00142 
00143     ASSERT_EQ(3,        tauFF.name.size());
00144     EXPECT_EQ(-1.0,     tauFF.effort[0]);
00145     EXPECT_EQ("joint2", tauFF.name[1]);
00146     EXPECT_EQ(-3.0,     tauFF.effort[2]);
00147     EXPECT_EQ(0,        tauFF.position.size());
00148 
00149 }
00150 
00151 TEST_F(RosMsgTreeIdTest, GetSegmentForcesTest)
00152 {
00153     KDL::Vector force(1.0, 0.0, 0.0), torque(0.0, 2.0, 1.0);
00154     KDL::Wrench testW(force, torque);
00155     jd.segForceMap["link1"] =  testW;
00156     jd.segForceMap["link2"] = KDL::Wrench::Zero();
00157     KDL::Wrench testW2 = testW ;
00158     testW2.force.y(17);
00159     jd.segForceMap["link3"] = testW2;
00160 
00161     r2_msgs::WrenchState segF;
00162 
00163     rmt.getSegmentForces(jd, segF);
00164 
00165     ASSERT_EQ(4,   segF.name.size());
00166     EXPECT_EQ(1.0, segF.wrench[0].force.x);
00167     EXPECT_EQ(0.0, segF.wrench[1].force.y);
00168     EXPECT_EQ(1.0, segF.wrench[2].torque.z);
00169 
00170 }
00171 
00172 TEST_F(RosMsgTreeIdTest, SetEmptyTorqueMsgTest)
00173 {
00174     // Set up map
00175     jd.jointTorqueCommandMap["joint1"] = 1.0;
00176     jd.jointTorqueCommandMap["joint2"] = 2.0;
00177     jd.jointTorqueCommandMap["joint3"] = 3.0;
00178 
00179     // Set up message
00180     sensor_msgs::JointState tauFF;
00181 
00182     rmt.setEmptyTorqueMsg(jd, tauFF);
00183 
00184     ASSERT_EQ(3,        tauFF.name.size());
00185     EXPECT_EQ(0.0,      tauFF.effort[0]);
00186     EXPECT_EQ("joint2", tauFF.name[1]);
00187     EXPECT_EQ(0.0,      tauFF.effort[2]);
00188     EXPECT_EQ(0,        tauFF.position.size());
00189 
00190 }
00191 
00192 TEST_F(RosMsgTreeIdTest, GetJointInertiasTest)
00193 {
00194     // Set up map
00195     jd.jointInertiaMap["joint1"] = 1.0;
00196     jd.jointInertiaMap["joint2"] = 2.0;
00197     jd.jointInertiaMap["joint3"] = 3.0;
00198 
00199     // Set up message
00200     sensor_msgs::JointState Hv;
00201 
00202     rmt.getJointInertias(jd, Hv);
00203 
00204     ASSERT_EQ(3,        Hv.name.size());
00205     EXPECT_EQ(1.0,      Hv.position[0]);
00206     EXPECT_EQ("joint2", Hv.name[1]);
00207     EXPECT_EQ(3.0,      Hv.position[2]);
00208     EXPECT_EQ(0,        Hv.velocity.size());
00209 
00210 }
00211 
00212 int main(int argc, char** argv)
00213 {
00214     ::testing::InitGoogleTest(&argc, argv);
00215     return RUN_ALL_TESTS();
00216 }
00217 


robodyn_controllers
Author(s):
autogenerated on Sat Jun 8 2019 20:20:53