KdlTreeFkTest.cpp
Go to the documentation of this file.
00001 #include <gtest/gtest.h>
00002 #include "robodyn_controllers/KdlTreeFk.h"
00003 
00004 #include <kdl/treefksolverpos_recursive.hpp>
00005 #include <kdl/chainfksolvervel_recursive.hpp>
00006 #include <ros/package.h>
00007 
00008 class KdlTreeFkTest : public ::testing::Test
00009 {
00010 protected:
00011     virtual void SetUp()
00012     {
00013         std::string packagePath = ros::package::getPath("robodyn_controllers");
00014         fk.loadFromFile(packagePath + "/test/urdf/BranchingTestRobot.xml");
00015         tree = fk.getTree();
00016         srand(time(NULL));
00017     }
00018 
00019     virtual void TearDown()
00020     {
00021     }
00022 
00023     KdlTreeFk fk;
00024     KDL::Tree tree;
00025 };
00026 
00027 TEST_F(KdlTreeFkTest, poseTest)
00028 {
00029     KDL::TreeFkSolverPos_recursive kdlSolver(tree);
00030     KDL::JntArray joints(tree.getNrOfJoints());
00031 
00032     for (unsigned int i = 0; i < joints.rows(); ++i)
00033     {
00034         joints(i) = ((double)(rand() % 314)) / 100. - 1.57;
00035     }
00036 
00037     std::map<std::string, KDL::Frame> frames;
00038     fk.getPoses(joints, frames);
00039 
00040     EXPECT_EQ(tree.getSegments().size(), frames.size());
00041 
00042     KDL::Frame testFrame;
00043 
00044     for (std::map<std::string, KDL::Frame>::const_iterator it = frames.begin(); it != frames.end(); ++it)
00045     {
00046         kdlSolver.JntToCart(joints, testFrame, it->first);
00047         EXPECT_TRUE(Equal(testFrame, it->second));
00048     }
00049 }
00050 
00051 TEST_F(KdlTreeFkTest, velTest)
00052 {
00053     KDL::Chain               chain;
00054     KDL::JntArrayVel         joints(tree.getNrOfJoints());
00055     std::vector<std::string> jointNames;
00056     fk.getJointNames(jointNames);
00057     ASSERT_EQ(joints.q.rows(), jointNames.size());
00058 
00059     for (unsigned int i = 0; i < joints.q.rows(); ++i)
00060     {
00061         joints.q(i)    = ((double)(rand() % 314)) / 100. - 1.57;
00062         joints.qdot(i) = ((double)(rand() % 200)) / 2000. - .1;
00063     }
00064 
00065     std::map<std::string, KDL::FrameVel> frames;
00066     fk.getVelocities(joints, frames);
00067 
00068     EXPECT_EQ(tree.getSegments().size(), frames.size());
00069 
00070     KDL::FrameVel testFrame;
00071 
00072     for (std::map<std::string, KDL::FrameVel>::const_iterator it = frames.begin(); it != frames.end(); ++it)
00073     {
00074         // get chain
00075         fk.getChain(fk.getBaseName(), it->first, chain);
00076         // make solver
00077         KDL::ChainFkSolverVel_recursive kdlSolver(chain);
00078         // get joints
00079         KDL::JntArrayVel chainJoints(chain.getNrOfJoints());
00080         std::vector<std::string> chainJointNames;
00081         fk.getChainJointNames(it->first, chainJointNames);
00082         ASSERT_EQ(chainJoints.q.rows(), chainJointNames.size());
00083 
00084         for (unsigned int i = 0; i < chainJoints.q.rows(); ++i)
00085         {
00086             std::vector<std::string>::const_iterator nit = std::find(jointNames.begin(), jointNames.end(), chainJointNames[i]);
00087 
00088             if (nit != jointNames.end())
00089             {
00090                 chainJoints.q(i)    = joints.q(nit - jointNames.begin());
00091                 chainJoints.qdot(i) = joints.qdot(nit - jointNames.begin());
00092             }
00093         }
00094 
00095         kdlSolver.JntToCart(chainJoints, testFrame);
00096         EXPECT_TRUE(Equal(testFrame, it->second));
00097     }
00098 }
00099 
00100 int main(int argc, char** argv)
00101 {
00102     ::testing::InitGoogleTest(&argc, argv);
00103     return RUN_ALL_TESTS();
00104 }


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