blob: ff1e293650c77e8b257e69dd0da629484b22a8bc [file] [log] [blame]
#include <chrono>
#include <cmath>
#include <thread>
#include "third_party/gflags/include/gflags/gflags.h"
#include "third_party/matplotlib-cpp/matplotlibcpp.h"
#include "y2018/control_loops/python/arm_bounds.h"
DEFINE_double(boundary_scalar, 20000.0, "quadratic slope");
DEFINE_double(boundary_rate, 1000.0, "linear slope");
DEFINE_double(bounds_offset, 0.02, "Offset the quadratic boundary in by this");
using ::y2018::control_loops::Point;
int main(int argc, char **argv) {
gflags::ParseCommandLineFlags(&argc, &argv, false);
::y2018::control_loops::BoundsCheck arm_space =
::y2018::control_loops::MakeClippedArmSpace();
matplotlibcpp::figure();
::std::vector<double> bounds_x;
::std::vector<double> bounds_y;
for (const Point p : arm_space.points()) {
bounds_x.push_back(p.x());
bounds_y.push_back(p.y());
}
matplotlibcpp::plot(bounds_x, bounds_y, {{"label", "actual region"}});
matplotlibcpp::legend();
::std::vector<::std::vector<double>> cost_x;
::std::vector<::std::vector<double>> cost_y;
::std::vector<::std::vector<double>> cost_z;
::std::vector<::std::vector<double>> cost_z2;
::std::vector<::std::vector<double>> cost_z3;
for (double x_coordinate = -0.5; x_coordinate < 1.2; x_coordinate += 0.05) {
::std::vector<double> cost_x_row;
::std::vector<double> cost_y_row;
::std::vector<double> cost_z_row;
::std::vector<double> cost_z2_row;
::std::vector<double> cost_z3_row;
for (double y_coordinate = -1.0; y_coordinate < 5.0; y_coordinate += 0.05) {
cost_x_row.push_back(x_coordinate);
cost_y_row.push_back(y_coordinate);
::Eigen::Matrix<double, 2, 1> norm;
double min_distance =
arm_space.min_distance(Point(x_coordinate, y_coordinate), &norm);
cost_z_row.push_back(::std::min(
500.0 * ::std::max(min_distance + FLAGS_bounds_offset, 0.0), 40.0));
cost_z2_row.push_back(::std::min(
FLAGS_boundary_scalar *
::std::max(0.0, min_distance + FLAGS_bounds_offset) *
::std::max(0.0, min_distance + FLAGS_bounds_offset) +
FLAGS_boundary_rate *
::std::max(0.0, min_distance + FLAGS_bounds_offset),
200.0));
cost_z3_row.push_back(min_distance);
}
cost_x.push_back(cost_x_row);
cost_y.push_back(cost_y_row);
cost_z.push_back(cost_z_row);
cost_z2.push_back(cost_z2_row);
cost_z3.push_back(cost_z3_row);
}
matplotlibcpp::plot_surface(cost_x, cost_y, cost_z);
matplotlibcpp::plot_surface(cost_x, cost_y, cost_z2);
matplotlibcpp::plot_surface(cost_x, cost_y, cost_z3);
matplotlibcpp::show();
}