KdlTreeIkTest.cpp
Go to the documentation of this file.
00001 #include <gtest/gtest.h>
00002 #include "robodyn_controllers/KdlTreeIk.h"
00003 #include <ros/package.h>
00004 #include "robodyn_controllers/MinJerkTrajectoryFactory.h"
00005 
00006 bool outputFlag = false;
00007 
00008 class KdlTreeIkTest : public ::testing::Test
00009 {
00010 protected:
00011     virtual void SetUp()
00012     {
00013         std::string packagePath = ros::package::getPath("robodyn_controllers");
00014         ik.loadFromFile(packagePath + "/test/urdf/r2c_legs_control.urdf.xml");
00015         fk.loadFromFile(packagePath + "/test/urdf/r2c_legs_control.urdf.xml");
00016 
00017         const double TORAD = 3.14159 / 180.;
00018         jointsInMap.insert(std::make_pair("/r2/left_leg/joint3", 147 * TORAD));
00019         jointsInMap.insert(std::make_pair("/r2/left_leg/joint5", 147 * TORAD));
00020         jointsInMap.insert(std::make_pair("/r2/right_leg/joint3", 147 * TORAD));
00021         jointsInMap.insert(std::make_pair("/r2/right_leg/joint5", 147 * TORAD));
00022 
00023         jointsOutMap.insert(std::make_pair("/r2/left_leg/joint3", 145 * TORAD));
00024         jointsOutMap.insert(std::make_pair("/r2/left_leg/joint5", 145 * TORAD));
00025         jointsOutMap.insert(std::make_pair("/r2/right_leg/joint3", 145 * TORAD));
00026         jointsOutMap.insert(std::make_pair("/r2/right_leg/joint5", 145 * TORAD));
00027 
00028         ik.getJointNames(jointNames);
00029         ik.setJointLimits(jointNames, std::vector<double>(jointNames.size(), -3.14), std::vector<double>(jointNames.size(), 3.14));
00030         joints_in.resize(jointNames.size());
00031         joints_out.resize(jointNames.size());
00032         std::map<std::string, double>::const_iterator it;
00033 
00034         for (unsigned int i = 0; i < jointNames.size(); ++i)
00035         {
00036             it = jointsInMap.find(jointNames[i]);
00037 
00038             if (it == jointsInMap.end())
00039             {
00040                 joints_in.q(i) = 0.;
00041             }
00042             else
00043             {
00044                 joints_in.q(i) = it->second;
00045             }
00046 
00047             joints_in.qdot(i) = 0.;
00048 
00049             it = jointsOutMap.find(jointNames[i]);
00050 
00051             if (it == jointsOutMap.end())
00052             {
00053                 joints_out(i) = 0.;
00054             }
00055             else
00056             {
00057                 joints_out(i) = it->second;
00058             }
00059         }
00060 
00061         nodeNames.push_back("/r2/left_leg/gripper/tip");
00062         nodeNames.push_back("/r2/right_leg/gripper/tip");
00063 
00064         for (unsigned int i = 0; i < nodeNames.size(); ++i)
00065         {
00066             frames_out.insert(std::make_pair(nodeNames[i], KDL::Frame()));
00067         }
00068 
00069         fk.getPoses(joints_out, frames_out);
00070     }
00071 
00072     virtual void TearDown()
00073     {
00074     }
00075 
00076     KdlTreeIk                         ik;
00077     KdlTreeFk                         fk;
00078     std::map<std::string, double>     jointsInMap;
00079     std::map<std::string, double>     jointsOutMap;
00080     std::vector<std::string>          jointNames;
00081     KDL::JntArrayVel                  joints_in;
00082     KDL::JntArray                     joints_out;
00083     std::vector<std::string>          nodeNames;
00084     std::map<std::string, KDL::Frame> frames_out;
00085 };
00086 
00087 TEST_F(KdlTreeIkTest, jointPosTest)
00088 {
00089     std::vector<KDL::Frame> nodeFrames(nodeNames.size());
00090 
00091     for (unsigned int i = 0; i < nodeNames.size(); ++i)
00092     {
00093         nodeFrames[i] =  frames_out[nodeNames[i]];
00094     }
00095 
00096     std::vector<KdlTreeIk::NodePriority> priorities(nodeNames.size() * 6, KdlTreeIk::CRITICAL);
00097     KDL::JntArray joints_test;
00098     EXPECT_NO_THROW(ik.getJointPositions(joints_in.q, nodeNames, nodeFrames, joints_test, priorities));
00099 
00100     std::map<std::string, KDL::Frame> frames_test;
00101     fk.getPoses(joints_test, frames_test);
00102 
00103     EXPECT_TRUE(KDL::Equal(frames_out["/r2/left_leg/gripper/tip"], frames_test["/r2/left_leg/gripper/tip"], 1E-3));
00104     EXPECT_TRUE(KDL::Equal(frames_out["/r2/right_leg/gripper/tip"], frames_test["/r2/right_leg/gripper/tip"], 1E-3));
00105 }
00106 
00107 int main(int argc, char** argv)
00108 {
00109     ::testing::InitGoogleTest(&argc, argv);
00110 
00111     for (int i = 0; i < argc; ++i)
00112     {
00113         std::cout << argv[i] << std::endl;
00114 
00115         if (strcmp(argv[i], "--outputTraj") == 0)
00116         {
00117             outputFlag = true;
00118         }
00119     }
00120 
00121     return RUN_ALL_TESTS();
00122 }


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