Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 #include <iostream>
00010 #include <gtest/gtest.h>
00011 #include "robodyn_controllers/MotionLimiter.h"
00012 #include <tf/tf.h>
00013
00014 class JointMotionLimiterTest : public ::testing::Test
00015 {
00016 protected:
00017 virtual void SetUp()
00018 {
00019 limiter.reset(new JointMotionLimiter);
00020 nameLimiter.setJointMotionLimiter(limiter);
00021 posLimiter.reset(new JointPositionLimiter);
00022 namePosLimiter.setJointPositionLimiter(posLimiter);
00023 }
00024
00025 virtual void TearDown()
00026 {
00027 }
00028
00029 boost::shared_ptr<JointMotionLimiter> limiter;
00030 JointNameMotionLimiter nameLimiter;
00031 boost::shared_ptr<JointPositionLimiter> posLimiter;
00032 JointNamePositionLimiter namePosLimiter;
00033 };
00034
00035 TEST_F(JointMotionLimiterTest, basicTest)
00036 {
00037 std::vector<double> jLims1(3);
00038 std::vector<double> jLims2(3);
00039 jLims1.at(0) = 1.2;
00040 jLims1.at(1) = 2.7;
00041 jLims1.at(2) = 0.34;
00042 jLims2 = jLims1;
00043 jLims2.at(2) = 8.6;
00044 limiter->setLimits(jLims1, jLims2);
00045 EXPECT_EQ(limiter->getVelocityLimit(2), 0.34);
00046 EXPECT_EQ(limiter->getAccelerationLimit(2), 8.6);
00047 }
00048
00049 TEST_F(JointMotionLimiterTest, nameTest)
00050 {
00051 std::vector<std::string> jointNames;
00052 jointNames.push_back("test1");
00053 jointNames.push_back("test2");
00054 jointNames.push_back("test3");
00055
00056 std::vector<double> jLims(3);
00057 jLims.at(0) = 1.2;
00058 jLims.at(1) = 2.7;
00059 jLims.at(2) = 0.34;
00060
00061 std::vector<double> aLims(3);
00062 aLims.at(0) = 2.2;
00063 aLims.at(1) = 1.7;
00064 aLims.at(2) = 3.2;
00065 nameLimiter.setLimits(jointNames, jLims, aLims);
00066
00067 EXPECT_EQ(nameLimiter.getVelocityLimit("test1"), jLims.at(0));
00068 EXPECT_EQ(nameLimiter.getVelocityLimit("test2"), jLims.at(1));
00069 EXPECT_EQ(nameLimiter.getVelocityLimit("test3"), jLims.at(2));
00070 EXPECT_ANY_THROW(nameLimiter.getVelocityLimit("test4"));
00071
00072 EXPECT_EQ(nameLimiter.getAccelerationLimit("test1"), aLims.at(0));
00073 EXPECT_EQ(nameLimiter.getAccelerationLimit("test2"), aLims.at(1));
00074 EXPECT_EQ(nameLimiter.getAccelerationLimit("test3"), aLims.at(2));
00075 EXPECT_ANY_THROW(nameLimiter.getAccelerationLimit("test4"));
00076
00077
00078 jointNames[0] = "test3";
00079 jointNames[2] = "test1";
00080
00081 nameLimiter.reorderLimits(jointNames);
00082 std::vector<double> vLims = limiter->getVelocityLimits();
00083 EXPECT_EQ(jLims.at(0), vLims.at(2));
00084 EXPECT_EQ(jLims.at(1), vLims.at(1));
00085 EXPECT_EQ(jLims.at(2), vLims.at(0));
00086
00087 jointNames[2] = "test5";
00088 EXPECT_ANY_THROW(nameLimiter.reorderLimits(jointNames));
00089 }
00090
00091 TEST_F(JointMotionLimiterTest, posTest)
00092 {
00093 std::vector<double> jLims1(3);
00094 std::vector<double> jLims2(3);
00095 jLims1.at(0) = 1.2;
00096 jLims1.at(1) = 2.7;
00097 jLims1.at(2) = 0.34;
00098 jLims2 = jLims1;
00099 jLims2.at(2) = 8.6;
00100 posLimiter->setLimits(jLims1, jLims2);
00101 EXPECT_EQ(posLimiter->getMinPosition(2), 0.34);
00102 EXPECT_EQ(posLimiter->getMaxPosition(2), 8.6);
00103 }
00104
00105 TEST_F(JointMotionLimiterTest, namePosTest)
00106 {
00107 std::vector<std::string> jointNames;
00108 jointNames.push_back("test1");
00109 jointNames.push_back("test2");
00110 jointNames.push_back("test3");
00111
00112 std::vector<double> jLims(3);
00113 jLims.at(0) = 1.2;
00114 jLims.at(1) = 2.7;
00115 jLims.at(2) = 0.34;
00116
00117 std::vector<double> aLims(3);
00118 aLims.at(0) = 2.2;
00119 aLims.at(1) = 1.7;
00120 aLims.at(2) = 3.2;
00121 namePosLimiter.setLimits(jointNames, jLims, aLims, jLims);
00122
00123 EXPECT_EQ(namePosLimiter.getMinPosition("test1"), jLims.at(0));
00124 EXPECT_EQ(namePosLimiter.getMinPosition("test2"), jLims.at(1));
00125 EXPECT_EQ(namePosLimiter.getMinPosition("test3"), jLims.at(2));
00126 EXPECT_ANY_THROW(namePosLimiter.getMinPosition("test4"));
00127
00128 EXPECT_EQ(namePosLimiter.getMaxPosition("test1"), aLims.at(0));
00129 EXPECT_EQ(namePosLimiter.getMaxPosition("test2"), aLims.at(1));
00130 EXPECT_EQ(namePosLimiter.getMaxPosition("test3"), aLims.at(2));
00131 EXPECT_ANY_THROW(namePosLimiter.getMaxPosition("test4"));
00132
00133 double lim;
00134 EXPECT_TRUE(namePosLimiter.getMaxVelocity("test1", lim));
00135 EXPECT_EQ(lim, jLims.at(0));
00136 EXPECT_TRUE(namePosLimiter.getMaxVelocity("test2", lim));
00137 EXPECT_EQ(lim, jLims.at(1));
00138 EXPECT_TRUE(namePosLimiter.getMaxVelocity("test3", lim));
00139 EXPECT_EQ(lim, jLims.at(2));
00140 EXPECT_FALSE(namePosLimiter.getMaxVelocity("test4", lim));
00141
00142
00143 jointNames[0] = "test3";
00144 jointNames[2] = "test1";
00145
00146 namePosLimiter.reorderLimits(jointNames);
00147 std::vector<double> vLims = posLimiter->getMinPositions();
00148 EXPECT_EQ(jLims.at(0), vLims.at(2));
00149 EXPECT_EQ(jLims.at(1), vLims.at(1));
00150 EXPECT_EQ(jLims.at(2), vLims.at(0));
00151
00152 jointNames[2] = "test5";
00153 EXPECT_ANY_THROW(namePosLimiter.reorderLimits(jointNames));
00154 }
00155
00156 int main(int argc, char** argv)
00157 {
00158 testing::InitGoogleTest(&argc, argv);
00159 return RUN_ALL_TESTS();
00160 }