Newer
Older
Guilhem Saurel
committed
#include <chrono>
#include <iostream>
#include <fstream>
#include <pinocchio/multibody/model.hpp>
#include <pinocchio/parsers/urdf.hpp>
#include <pinocchio/algorithm/rnea.hpp>
#include <pinocchio/algorithm/aba.hpp>
#include <Eigen/StdVector>
EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(Eigen::VectorXd)
#include "models.h"
#define NBT 100 * 1000
Guilhem Saurel
committed
void benchmark_pinocchio_rnea(std::string model_file, std::string filename)
Guilhem Saurel
committed
se3::urdf::buildModel(pinocchio_benchmarks::path + model_file + ".urdf",
se3::JointModelFreeFlyer(), model);
se3::Data data(model);
std::vector<Eigen::VectorXd> qs(NBT);
std::vector<Eigen::VectorXd> qdots(NBT);
std::vector<Eigen::VectorXd> qddots(NBT);
std::vector<Eigen::VectorXd> taus(NBT);
for(size_t i=0; i<NBT; i++)
{
qs[i] = Eigen::VectorXd::Random(model.nq);
qs[i].segment(0, 4).normalize();
qdots[i] = Eigen::VectorXd::Random(model.nq);
qddots[i] = Eigen::VectorXd::Random(model.nq);
taus[i] = Eigen::VectorXd::Random(model.nq);
}
Guilhem Saurel
committed
std::ofstream file;
file.open(filename);
for(size_t i=0; i<NBT; i++)
{
auto start = std::chrono::high_resolution_clock::now();
se3::rnea(model, data, qs[i], qdots[i], taus[i]);
auto end = std::chrono::high_resolution_clock::now();
std::chrono::nanoseconds time = end - start;
file << time.count() << std::endl;
}
file.close();
Guilhem Saurel
committed
void benchmark_pinocchio_aba(std::string model_file, std::string filename)
Guilhem Saurel
committed
se3::urdf::buildModel(pinocchio_benchmarks::path + model_file + ".urdf",
se3::JointModelFreeFlyer(), model);
se3::Data data(model);
std::vector<Eigen::VectorXd> qs(NBT);
std::vector<Eigen::VectorXd> qdots(NBT);
std::vector<Eigen::VectorXd> qddots(NBT);
std::vector<Eigen::VectorXd> taus(NBT);
for(size_t i=0; i<NBT; i++)
{
qs[i] = Eigen::VectorXd::Random(model.nq);
qs[i].segment(0, 4).normalize();
qdots[i] = Eigen::VectorXd::Random(model.nq);
qddots[i] = Eigen::VectorXd::Random(model.nq);
taus[i] = Eigen::VectorXd::Random(model.nq);
}
Guilhem Saurel
committed
std::ofstream file;
file.open(filename);
for(size_t i=0; i<NBT; i++)
{
auto start = std::chrono::high_resolution_clock::now();
se3::aba(model, data, qs[i], qdots[i], taus[i]);
auto end = std::chrono::high_resolution_clock::now();
std::chrono::nanoseconds time = end - start;
file << time.count() << std::endl;
}
file.close();
}
int main()
{
for (auto& model : pinocchio_benchmarks::models)
Guilhem Saurel
committed
benchmark_pinocchio_rnea(model, pinocchio_benchmarks::get_filename(
"Pinocchio", "RNEA", model));
for (auto& model : pinocchio_benchmarks::models)
Guilhem Saurel
committed
benchmark_pinocchio_aba(model, pinocchio_benchmarks::get_filename(
"Pinocchio", "ABA", model));