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 }