00001 #include <hayai/hayai.hpp> 00002 #include <ros/package.h> 00003 #include "robodyn_controllers/RosMsgGainCalculator.h" 00004 00005 class RosMsgGainCalculatorBenchmark : public hayai::Fixture 00006 { 00007 protected: 00008 virtual void SetUp() 00009 { 00010 yankLim = 1.0; 00011 yankLimWindup = 0.05; 00012 00013 std::string packagePath = ros::package::getPath("robodyn_controllers"); 00014 rmg.loadFromFile(packagePath + "/test/urdf/r2c_full_body.urdf.xml"); 00015 rmg.getJointNames(jointNames); 00016 00017 rmg.yl.setRateLimit(yankLim); 00018 rmg.ylWindup.setRateLimit(yankLimWindup); 00019 00020 dd.joint_names.resize(jointNames.size()); 00021 dd.naturalFreq.resize(jointNames.size()); 00022 dd.dampingRatio.resize(jointNames.size()); 00023 dd.windupLimit.resize(jointNames.size()); 00024 inertia.name.resize(jointNames.size()); 00025 inertia.position.resize(jointNames.size()); 00026 00027 for (unsigned int i = 0; i < jointNames.size(); ++i) 00028 { 00029 rmg.jointGainsData[jointNames[i]].maxK = 30; 00030 rmg.jointGainsData[jointNames[i]].maxD = 30; 00031 rmg.jointGainsData[jointNames[i]].scaleI = 0.01; 00032 rmg.jointGainsData[jointNames[i]].minD = 5.0; 00033 dd.joint_names[i] = jointNames[i]; 00034 dd.naturalFreq[i] = 1000.; 00035 dd.dampingRatio[i] = 1.5; 00036 dd.windupLimit[i] = 5.; 00037 inertia.name[i] = jointNames[i]; 00038 inertia.position[i] = static_cast<double>(rand() % 10001) / 1000.; 00039 } 00040 00041 yankLim = 20.0; 00042 rmg.yl.setRateLimit(yankLim); 00043 00044 yankLimWindup = 2.0; 00045 rmg.ylWindup.setRateLimit(yankLimWindup); 00046 } 00047 00048 virtual void TearDown() 00049 { 00050 } 00051 00052 RosMsgGainCalculator rmg; 00053 r2_msgs::Gains dd, dg; 00054 double scaleI, minD, yankLim, yankLimWindup; 00055 sensor_msgs::JointState inertia; 00056 std::vector<std::string> jointNames; 00057 }; 00058 00059 BENCHMARK_F(RosMsgGainCalculatorBenchmark, FindDesiredDynBenchmark, 3, 1000) 00060 { 00061 rmg.storeGainInformation(dd); 00062 rmg.findDesiredDynamics(inertia, dg); 00063 } 00064 00065 int main(int argc, char** argv) 00066 { 00067 hayai::Benchmarker::RunAllTests(); 00068 return 0; 00069 } 00070