MotionLimiter_Test.cpp
Go to the documentation of this file.
00001 /*
00002  * JointMotionLimiter_Test.cpp
00003  *
00004  *  Created on: Sept 07, 2012
00005  *      Author: Ross Taylor
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     // add acceleration
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     // test reorder
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     // add acceleration
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     // test reorder
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 }


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