Go to the documentation of this file.00001 #include <iostream>
00002
00003 #include <hayai/hayai.hpp>
00004
00005 #include "robodyn_controllers/RosMsgTreeFk.h"
00006 #include "r2_msgs/JointControlDataArray.h"
00007 #include <ros/package.h>
00008
00009 class TreeFkBenchmark : public hayai::Fixture
00010 {
00011 protected:
00012 virtual void SetUp()
00013 {
00014 ros::Time::init();
00015
00016 std::string packagePath = ros::package::getPath("robodyn_controllers");
00017 treeFk.loadFromFile(packagePath + "/test/urdf/r2c_full_body_dynamics.urdf.xml");
00018
00019 jointStatesMsg.name.push_back("/r2/left_leg/joint0");
00020 jointStatesMsg.name.push_back("/r2/left_leg/joint1");
00021 jointStatesMsg.name.push_back("/r2/left_leg/joint2");
00022 jointStatesMsg.name.push_back("/r2/left_leg/joint3");
00023 jointStatesMsg.name.push_back("/r2/left_leg/joint4");
00024 jointStatesMsg.name.push_back("/r2/left_leg/joint5");
00025 jointStatesMsg.name.push_back("/r2/left_leg/joint6");
00026 jointStatesMsg.name.push_back("/r2/right_leg/joint0");
00027 jointStatesMsg.name.push_back("/r2/right_leg/joint1");
00028 jointStatesMsg.name.push_back("/r2/right_leg/joint2");
00029 jointStatesMsg.name.push_back("/r2/right_leg/joint3");
00030 jointStatesMsg.name.push_back("/r2/right_leg/joint4");
00031 jointStatesMsg.name.push_back("/r2/right_leg/joint5");
00032 jointStatesMsg.name.push_back("/r2/right_leg/joint6");
00033 jointStatesMsg.name.push_back("/r2/waist/joint0");
00034 jointStatesMsg.name.push_back("/r2/left_arm/joint0");
00035 jointStatesMsg.name.push_back("/r2/left_arm/joint1");
00036 jointStatesMsg.name.push_back("/r2/left_arm/joint2");
00037 jointStatesMsg.name.push_back("/r2/left_arm/joint3");
00038 jointStatesMsg.name.push_back("/r2/left_arm/joint4");
00039 jointStatesMsg.name.push_back("/r2/left_arm/joint5");
00040 jointStatesMsg.name.push_back("/r2/left_arm/joint6");
00041 jointStatesMsg.name.push_back("/r2/right_arm/joint0");
00042 jointStatesMsg.name.push_back("/r2/right_arm/joint1");
00043 jointStatesMsg.name.push_back("/r2/right_arm/joint2");
00044 jointStatesMsg.name.push_back("/r2/right_arm/joint3");
00045 jointStatesMsg.name.push_back("/r2/right_arm/joint4");
00046 jointStatesMsg.name.push_back("/r2/right_arm/joint5");
00047 jointStatesMsg.name.push_back("/r2/right_arm/joint6");
00048 jointStatesMsg.name.push_back("/r2/neck/joint0");
00049 jointStatesMsg.name.push_back("/r2/neck/joint1");
00050 jointStatesMsg.name.push_back("/r2/neck/joint2");
00051
00052 jointStatesMsg.position.resize(jointStatesMsg.name.size(), 0.);
00053 jointStatesMsg.velocity.resize(jointStatesMsg.name.size(), 0.);
00054 jointStatesMsg.effort.resize(jointStatesMsg.name.size(), 0.);
00055
00056 jointStatusMsg.joint = jointStatesMsg.name;
00057 jointStatusMsg.data.resize(jointStatusMsg.joint.size());
00058
00059
00060 for (unsigned int i = 0; i < jointStatesMsg.name.size(); ++i)
00061 {
00062
00063 jointStatesMsg.position[i] = 3.1416 * (static_cast<double>(rand() % 10001) / 10000.) - 1.5708;
00064
00065 jointStatesMsg.velocity[i] = 2.*(static_cast<double>(rand() % 10001) / 10000.) - 1.;
00066
00067 jointStatesMsg.effort[i] = 200.*(static_cast<double>(rand() % 10001) / 10000.) - 100.;
00068
00069 jointStatusMsg.data[i].coeffState.state = rand() % 2;
00070 }
00071 }
00072
00073 virtual void TearDown()
00074 {
00075 }
00076
00077 RosMsgTreeFk treeFk;
00078 sensor_msgs::JointState jointStatesMsg;
00079 r2_msgs::JointControlDataArray jointStatusMsg;
00080
00081 typedef std::vector<std::string>::iterator StringItr;
00082 StringItr jointStatesItr;
00083 r2_msgs::PoseState poseStatesOutMsg;
00084 unsigned int count;
00085 };
00086
00087 BENCHMARK_F(TreeFkBenchmark, IntegratedTest, 3, 1000)
00088 {
00090 for (unsigned int i = 0; i < jointStatusMsg.data.size(); i++)
00091 {
00092 if (jointStatusMsg.data[i].coeffState.state == r2_msgs::JointControlCoeffState::NOTLOADED)
00093 {
00094 jointStatesItr = std::find(jointStatesMsg.name.begin(), jointStatesMsg.name.end(), jointStatusMsg.joint[i]);
00095
00096 if (jointStatesItr != jointStatesMsg.name.end())
00097 {
00098 int index = jointStatesItr - jointStatesMsg.name.begin();
00099 jointStatesMsg.position[index] = 0;
00100 jointStatesMsg.velocity[index] = 0;
00101 jointStatesMsg.effort[index] = 0;
00102 }
00103 }
00104 }
00105
00106 treeFk.getPoseState(jointStatesMsg, poseStatesOutMsg);
00107 }
00108
00109 int main(int argc, char** argv)
00110 {
00111 hayai::Benchmarker::RunAllTests();
00112 return 0;
00113 }
00114