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
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
00076
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
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
00134 jd.jointTorqueCommandMap["joint1"] = 1.0;
00135 jd.jointTorqueCommandMap["joint2"] = 2.0;
00136 jd.jointTorqueCommandMap["joint3"] = 3.0;
00137
00138
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
00175 jd.jointTorqueCommandMap["joint1"] = 1.0;
00176 jd.jointTorqueCommandMap["joint2"] = 2.0;
00177 jd.jointTorqueCommandMap["joint3"] = 3.0;
00178
00179
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
00195 jd.jointInertiaMap["joint1"] = 1.0;
00196 jd.jointInertiaMap["joint2"] = 2.0;
00197 jd.jointInertiaMap["joint3"] = 3.0;
00198
00199
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