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 "robodyn_controllers/KdlTreeTr.h"
00013 #include <tf/tf.h>
00014
00015 class KdlTreeTrTest : public ::testing::Test
00016 {
00017 protected:
00018 virtual void SetUp()
00019 {
00020 posLimiter.reset(new JointPositionLimiter);
00021 namePosLimiter.reset(new JointNamePositionLimiter);
00022 namePosLimiter->setJointPositionLimiter(posLimiter);
00023
00024 std::string packagePath = ros::package::getPath("robodyn_controllers");
00025 treeTr.loadFromFile(packagePath + "/test/urdf/BranchingTestRobot.xml");
00026
00027 treeTr.initialize();
00028 treeTr.setPositionLimiter(namePosLimiter);
00029 }
00030
00031 virtual void TearDown()
00032 {
00033 }
00034
00035 boost::shared_ptr<JointPositionLimiter> posLimiter;
00036 boost::shared_ptr<JointNamePositionLimiter> namePosLimiter;
00037 KdlTreeTr treeTr;
00038 };
00039
00040 TEST_F(KdlTreeTrTest, limitTest)
00041 {
00042 std::vector<std::string> jointNames;
00043 jointNames.push_back("joint0");
00044 jointNames.push_back("joint1");
00045
00046 std::vector<double> minPosLims(2), maxPosLims(2), velLims(2);
00047 minPosLims.at(0) = 0;
00048 minPosLims.at(1) = 0.5;
00049 maxPosLims.at(0) = 1.0;
00050 maxPosLims.at(1) = 2.0;
00051 velLims.at(0) = 2.5;
00052 velLims.at(1) = 1.0;
00053 namePosLimiter->setLimits(jointNames, minPosLims, maxPosLims, velLims);
00054
00055 KDL::JntArray jIn(2), jOut(2), dJoint(2);
00056 jIn(0) = 0.9; jOut(0) = 0.92; dJoint(0) = 0.0;
00057 jIn(1) = 0.55; jOut(1) = 0.56; dJoint(1) = 0.0;
00058
00059 EXPECT_TRUE(treeTr.limitJoints(jIn, jOut, dJoint));
00060 EXPECT_GT(0.000001, std::abs(dJoint(0)) - 0.004);
00061 EXPECT_GT(0.000001, std::abs(dJoint(1)) - 0.002);
00062
00063 jIn(0) = 0.92; jOut(0) = 0.9; dJoint(0) = 0.0;
00064 dJoint(1) = 0.0;
00065
00066 EXPECT_FALSE(treeTr.limitJoints(jIn, jOut, dJoint));
00067 EXPECT_GT(1e-06, std::abs(dJoint(0)) - 0.02);
00068 EXPECT_GT(1e-06, std::abs(dJoint(1)) - 0.01);
00069
00070 jIn(0) = 0.5; jOut(0) = 0.53; dJoint(0) = 0.0;
00071
00072 EXPECT_TRUE(treeTr.limitJoints(jIn, jOut, dJoint));
00073 EXPECT_GT(1e-06, std::abs(dJoint(0)) - 0.0235);
00074 EXPECT_GT(1e-06, std::abs(dJoint(1)) - 0.007833333);
00075
00076 jIn(0) = 0.8; jOut(0) = 0.79; dJoint(0) = 0.0;
00077 jOut(1) = 0.57; dJoint(1) = 0.0;
00078
00079 EXPECT_TRUE(treeTr.limitJoints(jIn, jOut, dJoint));
00080 EXPECT_GT(1e-06, std::abs(dJoint(0)) - 0.005);
00081 EXPECT_GT(1e-06, std::abs(dJoint(1)) - 0.01);
00082
00083 }
00084
00085 int main(int argc, char** argv)
00086 {
00087 testing::InitGoogleTest(&argc, argv);
00088 return RUN_ALL_TESTS();
00089 }