kinematics_benchmarks.cpp
Go to the documentation of this file.
3 #include <benchmark/benchmark.h>
4 #include <algorithm>
16 
17 using namespace tesseract_scene_graph;
18 using namespace tesseract_srdf;
19 using namespace tesseract_environment;
20 
22 {
23  std::string path = "package://tesseract_support/urdf/lbr_iiwa_14_r820.urdf";
24  return tesseract_urdf::parseURDFFile(locator.locateResource(path)->getFilePath(), locator);
25 }
26 
28 {
29  std::string path = "package://tesseract_support/urdf/lbr_iiwa_14_r820.srdf";
30 
31  auto srdf = std::make_shared<SRDFModel>();
32  srdf->initFile(scene_graph, locator.locateResource(path)->getFilePath(), locator);
33 
34  return srdf;
35 }
36 
37 using CalcStateFn = std::function<tesseract_common::TransformMap(const Eigen::Ref<const Eigen::VectorXd>& state)>;
38 
39 static void BM_GET_STATE_JOINT_NAMES_JOINT_VALUES_SS(benchmark::State& state,
40  CalcStateFn fn,
41  const tesseract_common::TrajArray& traj)
42 {
43  tesseract_common::TransformMap transform_map;
44  for (auto _ : state)
45  {
46  for (Eigen::Index i = 0; i < traj.rows(); i++)
47  {
48  benchmark::DoNotOptimize(transform_map = fn(traj.row(i)));
49  }
50  }
51 }
52 
53 static void BM_SET_AND_GET_STATE_JOINT_NAMES_JOINT_VALUES_SS(benchmark::State& state,
54  CalcStateFn fn,
55  const tesseract_common::TrajArray& traj)
56 {
57  tesseract_common::TransformMap transform_map;
58  for (auto _ : state)
59  {
60  for (Eigen::Index i = 0; i < traj.rows(); i++)
61  {
62  benchmark::DoNotOptimize(transform_map = fn(traj.row(i)));
63  }
64  }
65 }
66 
67 static void BM_GET_JACOBIAN_JOINT_NAMES_JOINT_VALUES_SS(benchmark::State& state,
69  std::vector<std::string> joint_names,
70  const tesseract_common::TrajArray& traj,
71  std::string link_name)
72 {
73  Eigen::MatrixXd jacobian;
74  for (auto _ : state)
75  {
76  for (Eigen::Index i = 0; i < traj.rows(); i++)
77  {
78  benchmark::DoNotOptimize(jacobian = state_solver->getJacobian(joint_names, traj.row(i), link_name));
79  }
80  }
81 }
82 
83 static void BM_CALC_FWD_KIN_MANIP(benchmark::State& state, CalcStateFn fn, const tesseract_common::TrajArray& traj)
84 {
86  for (auto _ : state)
87  {
88  for (Eigen::Index i = 0; i < traj.rows(); i++)
89  {
90  benchmark::DoNotOptimize(transforms = fn(traj.row(i)));
91  }
92  }
93 }
94 
95 static void BM_GET_JACOBIAN_MANIP(benchmark::State& state,
97  const tesseract_common::TrajArray& traj,
98  std::string link_name)
99 {
100  Eigen::MatrixXd jacobian;
101  for (auto _ : state)
102  {
103  for (Eigen::Index i = 0; i < traj.rows(); i++)
104  {
105  benchmark::DoNotOptimize(jacobian = manip->calcJacobian(traj.row(i), link_name));
106  }
107  }
108 }
109 
110 int main(int argc, char** argv)
111 {
113  auto env = std::make_shared<Environment>();
115  auto srdf = getSRDFModel(*scene_graph, locator);
116  env->init(*scene_graph, srdf);
117  env->setResourceLocator(std::make_shared<tesseract_common::GeneralResourceLocator>());
118 
119  // Set the robot initial state
120  std::vector<std::string> joint_names;
121  joint_names.emplace_back("joint_a1");
122  joint_names.emplace_back("joint_a2");
123  joint_names.emplace_back("joint_a3");
124  joint_names.emplace_back("joint_a4");
125  joint_names.emplace_back("joint_a5");
126  joint_names.emplace_back("joint_a6");
127  joint_names.emplace_back("joint_a7");
128 
129  Eigen::VectorXd joint_start_pos(7);
130  joint_start_pos(0) = -0.4;
131  joint_start_pos(1) = 0.2762;
132  joint_start_pos(2) = 0.0;
133  joint_start_pos(3) = -1.3348;
134  joint_start_pos(4) = 0.0;
135  joint_start_pos(5) = 1.4959;
136  joint_start_pos(6) = 0.0;
137 
138  Eigen::VectorXd joint_end_pos(7);
139  joint_end_pos(0) = 0.4;
140  joint_end_pos(1) = 0.2762;
141  joint_end_pos(2) = 0.0;
142  joint_end_pos(3) = -1.3348;
143  joint_end_pos(4) = 0.0;
144  joint_end_pos(5) = 1.4959;
145  joint_end_pos(6) = 0.0;
146 
147  Eigen::VectorXd joint_pos_collision(7);
148  joint_pos_collision(0) = 0.0;
149  joint_pos_collision(1) = 0.2762;
150  joint_pos_collision(2) = 0.0;
151  joint_pos_collision(3) = -1.3348;
152  joint_pos_collision(4) = 0.0;
153  joint_pos_collision(5) = 1.4959;
154  joint_pos_collision(6) = 0.0;
155 
156  tesseract_common::TrajArray traj(5, joint_start_pos.size());
157  for (int i = 0; i < joint_start_pos.size(); ++i)
158  traj.col(i) = Eigen::VectorXd::LinSpaced(5, joint_start_pos(i), joint_end_pos(i));
159 
160  tesseract_scene_graph::StateSolver::Ptr state_solver = env->getStateSolver();
161  tesseract_kinematics::JointGroup::ConstPtr joint_group = env->getJointGroup("manipulator");
162  std::string tip_link{ "tool0" };
163 
165  // Benchmarks
167 
168  {
169  tesseract_scene_graph::StateSolver::Ptr local_ss = state_solver->clone();
170  CalcStateFn fn = [local_ss,
171  joint_names](const Eigen::Ref<const Eigen::VectorXd>& state) -> tesseract_common::TransformMap {
172  return local_ss->getState(joint_names, state).link_transforms;
173  };
174 
175  std::function<void(benchmark::State&, CalcStateFn, const tesseract_common::TrajArray&)> BM_GET_STATE_JN_JV_SS =
177  std::string name = "BM_GET_STATE_JOINT_NAMES_JOINT_VALUES_SS";
178  benchmark::RegisterBenchmark(name.c_str(), BM_GET_STATE_JN_JV_SS, fn, traj)
179  ->UseRealTime()
180  ->Unit(benchmark::TimeUnit::kMicrosecond);
181  }
182  {
183  tesseract_scene_graph::StateSolver::Ptr local_ss = state_solver->clone();
184  CalcStateFn fn = [local_ss,
185  joint_names](const Eigen::Ref<const Eigen::VectorXd>& state) -> tesseract_common::TransformMap {
186  local_ss->setState(joint_names, state);
187  return local_ss->getState().link_transforms;
188  };
189 
190  std::function<void(benchmark::State&, CalcStateFn, const tesseract_common::TrajArray&)>
191  BM_SET_AND_GET_STATE_JN_JV_SS = BM_SET_AND_GET_STATE_JOINT_NAMES_JOINT_VALUES_SS;
192  std::string name = "BM_SET_AND_GET_STATE_JOINT_NAMES_JOINT_VALUES_SS";
193  benchmark::RegisterBenchmark(name.c_str(), BM_SET_AND_GET_STATE_JN_JV_SS, fn, traj)
194  ->UseRealTime()
195  ->Unit(benchmark::TimeUnit::kMicrosecond);
196  }
197  {
198  std::function<void(benchmark::State&,
200  std::vector<std::string>,
202  std::string)>
203  BM_GET_JACOBIAN_JN_JV_SS = BM_GET_JACOBIAN_JOINT_NAMES_JOINT_VALUES_SS;
204  std::string name = "BM_GET_JACOBIAN_JOINT_NAMES_JOINT_VALUES_SS";
205  benchmark::RegisterBenchmark(name.c_str(), BM_GET_JACOBIAN_JN_JV_SS, state_solver, joint_names, traj, tip_link)
206  ->UseRealTime()
207  ->Unit(benchmark::TimeUnit::kMicrosecond);
208  }
209  {
210  CalcStateFn fn = [joint_group](const Eigen::Ref<const Eigen::VectorXd>& state) -> tesseract_common::TransformMap {
211  return joint_group->calcFwdKin(state);
212  };
213 
214  std::function<void(benchmark::State&, CalcStateFn, const tesseract_common::TrajArray&)> BM_CFK_MANIP =
216  std::string name = "BM_CALC_FWD_KIN_MANIP";
217  benchmark::RegisterBenchmark(name.c_str(), BM_CFK_MANIP, fn, traj)
218  ->UseRealTime()
219  ->Unit(benchmark::TimeUnit::kMicrosecond);
220  }
221  {
222  std::function<void(
223  benchmark::State&, tesseract_kinematics::JointGroup::ConstPtr, const tesseract_common::TrajArray&, std::string)>
224  BM_CJ_MANIP = BM_GET_JACOBIAN_MANIP;
225  std::string name = "BM_GET_JACOBIAN_MANIP";
226  benchmark::RegisterBenchmark(name.c_str(), BM_CJ_MANIP, joint_group, traj, tip_link)
227  ->UseRealTime()
228  ->Unit(benchmark::TimeUnit::kMicrosecond);
229  }
230 
231  benchmark::Initialize(&argc, argv);
232  benchmark::RunSpecifiedBenchmarks();
233 }
graph.h
main
int main(int argc, char **argv)
Definition: kinematics_benchmarks.cpp:110
BM_GET_JACOBIAN_MANIP
static void BM_GET_JACOBIAN_MANIP(benchmark::State &state, tesseract_kinematics::JointGroup::ConstPtr manip, const tesseract_common::TrajArray &traj, std::string link_name)
Definition: kinematics_benchmarks.cpp:95
tesseract_srdf::SRDFModel::Ptr
std::shared_ptr< SRDFModel > Ptr
tesseract_srdf
tesseract_environment
Definition: command.h:45
BM_CALC_FWD_KIN_MANIP
static void BM_CALC_FWD_KIN_MANIP(benchmark::State &state, CalcStateFn fn, const tesseract_common::TrajArray &traj)
Definition: kinematics_benchmarks.cpp:83
BM_GET_JACOBIAN_JOINT_NAMES_JOINT_VALUES_SS
static void BM_GET_JACOBIAN_JOINT_NAMES_JOINT_VALUES_SS(benchmark::State &state, tesseract_scene_graph::StateSolver::Ptr state_solver, std::vector< std::string > joint_names, const tesseract_common::TrajArray &traj, std::string link_name)
Definition: kinematics_benchmarks.cpp:67
resource_locator.h
tesseract_common::TransformMap
AlignedMap< std::string, Eigen::Isometry3d > TransformMap
tesseract_common::ResourceLocator::locateResource
virtual std::shared_ptr< Resource > locateResource(const std::string &url) const=0
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
#define TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
tesseract_scene_graph::SceneGraph
tesseract_environment::CalcStateFn
std::function< tesseract_common::TransformMap(const Eigen::VectorXd &state)> CalcStateFn
Definition: utils.cpp:157
getSRDFModel
SRDFModel::Ptr getSRDFModel(const SceneGraph &scene_graph, const tesseract_common::ResourceLocator &locator)
Definition: kinematics_benchmarks.cpp:27
getSceneGraph
SceneGraph::Ptr getSceneGraph(const tesseract_common::ResourceLocator &locator)
Definition: kinematics_benchmarks.cpp:21
urdf_parser.h
tesseract_common::TrajArray
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > TrajArray
utils.h
Tesseract Environment Utility Functions.
BM_SET_AND_GET_STATE_JOINT_NAMES_JOINT_VALUES_SS
static void BM_SET_AND_GET_STATE_JOINT_NAMES_JOINT_VALUES_SS(benchmark::State &state, CalcStateFn fn, const tesseract_common::TrajArray &traj)
Definition: kinematics_benchmarks.cpp:53
name
std::string name
tesseract_urdf::parseURDFFile
std::unique_ptr< tesseract_scene_graph::SceneGraph > parseURDFFile(const std::string &path, const tesseract_common::ResourceLocator &locator)
BM_GET_STATE_JOINT_NAMES_JOINT_VALUES_SS
static void BM_GET_STATE_JOINT_NAMES_JOINT_VALUES_SS(benchmark::State &state, CalcStateFn fn, const tesseract_common::TrajArray &traj)
Definition: kinematics_benchmarks.cpp:39
tesseract_common::ResourceLocator
sphere.h
TESSERACT_COMMON_IGNORE_WARNINGS_POP
state_solver.h
srdf_model.h
scene_state.h
tesseract_scene_graph::StateSolver::Ptr
std::shared_ptr< StateSolver > Ptr
tesseract_kinematics::JointGroup::ConstPtr
std::shared_ptr< const JointGroup > ConstPtr
environment.h
tesseract_common::GeneralResourceLocator
joint_group.h
macros.h
tesseract_scene_graph::SceneGraph::Ptr
std::shared_ptr< SceneGraph > Ptr
tesseract_scene_graph


tesseract_environment
Author(s): Levi Armstrong
autogenerated on Sun May 18 2025 03:02:21