TreeFkBenchmark.cpp
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         // add some random data
00060         for (unsigned int i = 0; i < jointStatesMsg.name.size(); ++i)
00061         {
00062             // position between -90 and 90 deg
00063             jointStatesMsg.position[i] = 3.1416 * (static_cast<double>(rand() % 10001) / 10000.) - 1.5708;
00064             // velocity between -1 and 1 rad/s
00065             jointStatesMsg.velocity[i] = 2.*(static_cast<double>(rand() % 10001) / 10000.) - 1.;
00066             // effort between -100 and 100 N/m
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 


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