6#include "../TrajectoryMetric.h"
8#pragma warning "The PeaksMetric is not supported at the moment."
11class PeaksMetric :
public TMetric<PeaksMetric> {
13 static double evaluateMetric(
const ompl::geometric::PathGeometric &trajectory,
25 v_x[0] = (path[+1].x - path[0].x) / (dt);
26 v_y[0] = (path[+1].y - path[0].y) / (dt);
28 for (
size_t i = 1; i < path.size() - 1; i++) {
29 v_x[i] = (path[i + 1].x - path[i - 1].x) / (2 * dt);
30 v_y[i] = (path[i + 1].y - path[i - 1].y) / (2 * dt);
31 acca[i - 1] = sqrt(v_x[i] * v_x[i] + v_y[i] * v_y[i]);
36 for (
size_t i = 1; i < acnt - 1; i++) {
37 if (acca[i] - acca[i - 1] > myeps && acca[i] - acca[i + 1] > myeps)
40 if (acca[i] - acca[i - 1] < myeps && acca[i] - acca[i + 1] < myeps)
44 std::vector<double> vvec(path.size());
52 for (std::size_t i = 1; i < path.size() - 1; i++) {
53 v_x[i] = vvec[i] * std::cos(0);
54 v_y[i] = vvec[i] * std::sin(0);
58 acca[i - 1] = std::sqrt(v_x[i] * v_x[i] + v_y[i] * v_y[i]);
60 mean_acc += std::sqrt(v_x[i] * v_x[i] + v_y[i] * v_y[i]);
63 mean_acc = mean_acc / acnt;
65 double jerk_x[100000];
66 double jerk_y[100000];
72 if (path.size() > 3) {
73 for (std::size_t i = 1; i < path.size() - 2; i++) {
74 acc_x[i] = (v_x[i + 1] - v_x[i - 1]) / (2 * dt);
75 acc_y[i] = (v_y[i + 1] - v_y[i - 1]) / (2 * dt);
80 for (std::size_t i = 1; i < path.size() - 3; i++) {
81 jerk_x[i] = (acc_x[i + 1] - acc_x[i - 1]) / (2 * dt);
82 jerk_y[i] = (acc_y[i + 1] - acc_y[i - 1]) / (2 * dt);
85 for (std::size_t i = 1; i < path.size() - 3; i++) {
86 acc = std::sqrt((acc_x[i] * acc_x[i] + acc_y[i] * acc_y[i]));
87 if (acc < 0.000001 && (jerk_x[i] < 0 || jerk_y[i] < 0)) pmetric++;
95 unsigned long nend = path.size() - 2;
100 for (
int i = 1; i < nend - 1; i++) {
101 T = acca[i] - acca[i - 1];
102 ratio = T / mean_acc;
103 if (std::fabs(ratio) > 1) {
Definition: TrajectoryMetric.h:10
static std::vector< Point > fromPath(const ompl::geometric::PathGeometric &p, bool interpolate=false)
Definition: Primitives.cpp:25