3 #include <benchmark/benchmark.h>
5 #include <console_bridge/console.h>
30 std::string url =
"package://tesseract_support/urdf/lbr_iiwa_14_r820.urdf";
38 std::string url =
"package://tesseract_support/urdf/lbr_iiwa_14_r820.srdf";
41 auto srdf = std::make_shared<SRDFModel>();
42 srdf->initFile(scene_graph, locator.
locateResource(url)->getFilePath(), locator);
48 std::vector<tesseract_collision::ContactResultMap> contacts,
51 std::vector<std::string> joint_names,
57 console_bridge::setLogLevel(console_bridge::LogLevel::CONSOLE_BRIDGE_LOG_DEBUG);
59 console_bridge::setLogLevel(console_bridge::LogLevel::CONSOLE_BRIDGE_LOG_INFO);
63 benchmark::DoNotOptimize(
checkTrajectory(contacts, *manager, *state_solver, joint_names, traj, config));
68 std::vector<tesseract_collision::ContactResultMap> contacts,
76 console_bridge::setLogLevel(console_bridge::LogLevel::CONSOLE_BRIDGE_LOG_DEBUG);
78 console_bridge::setLogLevel(console_bridge::LogLevel::CONSOLE_BRIDGE_LOG_INFO);
82 benchmark::DoNotOptimize(
checkTrajectory(contacts, *manager, *manip, traj, config));
87 std::vector<tesseract_collision::ContactResultMap> contacts,
90 std::vector<std::string> joint_names,
96 console_bridge::setLogLevel(console_bridge::LogLevel::CONSOLE_BRIDGE_LOG_DEBUG);
98 console_bridge::setLogLevel(console_bridge::LogLevel::CONSOLE_BRIDGE_LOG_INFO);
102 benchmark::DoNotOptimize(
checkTrajectory(contacts, *manager, *state_solver, joint_names, traj, config));
107 std::vector<tesseract_collision::ContactResultMap> contacts,
112 bool log_level_debug)
115 console_bridge::setLogLevel(console_bridge::LogLevel::CONSOLE_BRIDGE_LOG_DEBUG);
117 console_bridge::setLogLevel(console_bridge::LogLevel::CONSOLE_BRIDGE_LOG_INFO);
121 benchmark::DoNotOptimize(
checkTrajectory(contacts, *manager, *manip, traj, config));
125 int main(
int argc,
char** argv)
127 auto env = std::make_shared<Environment>();
130 env->init(*scene_graph, srdf);
131 env->setResourceLocator(std::make_shared<tesseract_common::GeneralResourceLocator>());
134 Link link_sphere(
"sphere_attached");
137 visual->origin = Eigen::Isometry3d::Identity();
138 visual->origin.translation() = Eigen::Vector3d(0.5, 0, 0.55);
139 visual->geometry = std::make_shared<tesseract_geometry::Sphere>(0.15);
140 link_sphere.
visual.push_back(visual);
143 collision->origin = visual->origin;
144 collision->geometry = visual->geometry;
145 link_sphere.
collision.push_back(collision);
147 Joint joint_sphere(
"joint_sphere_attached");
152 auto cmd = std::make_shared<tesseract_environment::AddLinkCommand>(link_sphere, joint_sphere);
155 std::vector<std::string> joint_names;
156 joint_names.emplace_back(
"joint_a1");
157 joint_names.emplace_back(
"joint_a2");
158 joint_names.emplace_back(
"joint_a3");
159 joint_names.emplace_back(
"joint_a4");
160 joint_names.emplace_back(
"joint_a5");
161 joint_names.emplace_back(
"joint_a6");
162 joint_names.emplace_back(
"joint_a7");
164 Eigen::VectorXd joint_start_pos(7);
165 joint_start_pos(0) = -0.4;
166 joint_start_pos(1) = 0.2762;
167 joint_start_pos(2) = 0.0;
168 joint_start_pos(3) = -1.3348;
169 joint_start_pos(4) = 0.0;
170 joint_start_pos(5) = 1.4959;
171 joint_start_pos(6) = 0.0;
173 Eigen::VectorXd joint_end_pos(7);
174 joint_end_pos(0) = 0.4;
175 joint_end_pos(1) = 0.2762;
176 joint_end_pos(2) = 0.0;
177 joint_end_pos(3) = -1.3348;
178 joint_end_pos(4) = 0.0;
179 joint_end_pos(5) = 1.4959;
180 joint_end_pos(6) = 0.0;
182 Eigen::VectorXd joint_pos_collision(7);
183 joint_pos_collision(0) = 0.0;
184 joint_pos_collision(1) = 0.2762;
185 joint_pos_collision(2) = 0.0;
186 joint_pos_collision(3) = -1.3348;
187 joint_pos_collision(4) = 0.0;
188 joint_pos_collision(5) = 1.4959;
189 joint_pos_collision(6) = 0.0;
191 std::vector<tesseract_common::TrajArray> traj_arrays;
195 for (
int i = 0; i < joint_start_pos.size(); ++i)
196 traj.col(i) = Eigen::VectorXd::LinSpaced(5, joint_start_pos(i), joint_end_pos(i));
200 for (
int i = 0; i < joint_start_pos.size(); ++i)
201 traj2.col(i) = Eigen::VectorXd::LinSpaced(3, joint_start_pos(i), joint_pos_collision(i));
205 for (
int i = 0; i < joint_start_pos.size(); ++i)
206 traj3.col(i) = Eigen::VectorXd::LinSpaced(3, joint_pos_collision(i), joint_end_pos(i));
210 traj4.row(0) = joint_pos_collision;
211 traj4.row(1) = joint_end_pos;
214 traj5.row(0) = joint_start_pos;
215 traj5.row(1) = joint_pos_collision;
217 traj_arrays.push_back(traj);
218 traj_arrays.push_back(traj2);
219 traj_arrays.push_back(traj3);
220 traj_arrays.push_back(traj4);
221 traj_arrays.push_back(traj5);
227 std::vector<tesseract_collision::ContactResultMap> contacts;
229 discrete_config.
type = CollisionEvaluatorType::DISCRETE;
232 discrete_lvs_config.
type = CollisionEvaluatorType::LVS_DISCRETE;
235 continuous_config.
type = CollisionEvaluatorType::CONTINUOUS;
238 continuous_lvs_config.
type = CollisionEvaluatorType::LVS_CONTINUOUS;
246 std::function<void(benchmark::State&,
247 std::vector<tesseract_collision::ContactResultMap>,
250 std::vector<std::string>,
255 std::function<void(benchmark::State&,
256 std::vector<tesseract_collision::ContactResultMap>,
263 std::function<void(benchmark::State&,
264 std::vector<tesseract_collision::ContactResultMap>,
267 std::vector<std::string>,
272 std::function<void(benchmark::State&,
273 std::vector<tesseract_collision::ContactResultMap>,
281 for (
const bool log_level_debug : {
false,
true })
283 for (std::size_t i = 0; i < traj_arrays.size(); i++)
285 std::string debug_str =
"";
287 debug_str =
"-Debug";
288 const auto& traj_array = traj_arrays[i];
289 std::string BM_CHECK_TRAJ_CS_name =
290 "BM_CHECK_TRAJ_CONTINUOUS_STATE_SOLVER-TRAJ" + std::to_string(i + 1) + debug_str;
291 std::string BM_CHECK_TRAJ_CS_LVS_name =
292 "BM_CHECK_TRAJ_CONTINUOUS_STATE_SOLVER-TRAJ" + std::to_string(i + 1) +
"-LVS" + debug_str;
293 std::string BM_CHECK_TRAJ_CM_name =
294 "BM_CHECK_TRAJ_CONTINUOUS_JOINT_GROUP-TRAJ" + std::to_string(i + 1) + debug_str;
295 std::string BM_CHECK_TRAJ_CM_LVS_name =
296 "BM_CHECK_TRAJ_CONTINUOUS_JOINT_GROUP-TRAJ" + std::to_string(i + 1) +
"-LVS" + debug_str;
297 std::string BM_CHECK_TRAJ_DS_name =
298 "BM_CHECK_TRAJ_DISCRETE_STATE_SOLVER-TRAJ" + std::to_string(i + 1) + debug_str;
299 std::string BM_CHECK_TRAJ_DS_LVS_name =
300 "BM_CHECK_TRAJ_DISCRETE_STATE_SOLVER-TRAJ" + std::to_string(i + 1) +
"-LVS" + debug_str;
301 std::string BM_CHECK_TRAJ_DM_name =
302 "BM_CHECK_TRAJ_DISCRETE_JOINT_GROUP-TRAJ" + std::to_string(i + 1) + debug_str;
303 std::string BM_CHECK_TRAJ_DM_LVS_name =
304 "BM_CHECK_TRAJ_DISCRETE_JOINT_GROUP-TRAJ" + std::to_string(i + 1) +
"-LVS" + debug_str;
306 benchmark::RegisterBenchmark(BM_CHECK_TRAJ_CS_name.c_str(),
316 ->Unit(benchmark::TimeUnit::kMicrosecond);
317 benchmark::RegisterBenchmark(BM_CHECK_TRAJ_CS_LVS_name.c_str(),
324 continuous_lvs_config,
327 ->Unit(benchmark::TimeUnit::kMicrosecond);
328 benchmark::RegisterBenchmark(BM_CHECK_TRAJ_CM_name.c_str(),
337 ->Unit(benchmark::TimeUnit::kMicrosecond);
338 benchmark::RegisterBenchmark(BM_CHECK_TRAJ_CM_LVS_name.c_str(),
344 continuous_lvs_config,
347 ->Unit(benchmark::TimeUnit::kMicrosecond);
348 benchmark::RegisterBenchmark(BM_CHECK_TRAJ_DS_name.c_str(),
358 ->Unit(benchmark::TimeUnit::kMicrosecond);
359 benchmark::RegisterBenchmark(BM_CHECK_TRAJ_DS_LVS_name.c_str(),
369 ->Unit(benchmark::TimeUnit::kMicrosecond);
370 benchmark::RegisterBenchmark(BM_CHECK_TRAJ_DM_name.c_str(),
379 ->Unit(benchmark::TimeUnit::kMicrosecond);
380 benchmark::RegisterBenchmark(BM_CHECK_TRAJ_DM_LVS_name.c_str(),
389 ->Unit(benchmark::TimeUnit::kMicrosecond);
394 benchmark::Initialize(&argc, argv);
395 benchmark::RunSpecifiedBenchmarks();