37#ifndef PLANAR_MANIPULATOR_POLY_WORLD_H_
38#define PLANAR_MANIPULATOR_POLY_WORLD_H_
44#include <boost/math/constants/constants.hpp>
48PolyWorld createCorridorProblem(
int n, Eigen::Affine2d &basePose, Eigen::Affine2d &goalPose)
51 const double minX = 0;
52 const double minY = 0;
53 const double maxX = 1.25;
54 const double maxY = 1.25;
55 PolyWorld world(
"corridor", {minX, maxX}, {minY, maxY});
57 const double len = 1.0 / n;
58 const double gap = len * (1.1 * boost::math::constants::pi<double>() +
log(n) / (double)n);
60 std::vector<Point> pts(4);
63 const double w = ((maxX - minX) * 0.50) - gap;
64 const double h1 = minY + gap;
65 const double h2 = maxY - gap;
67 pts[0] = std::make_pair(minX, h1);
68 pts[1] = std::make_pair(minX + w, h1);
69 pts[2] = std::make_pair(minX + w, h2);
70 pts[3] = std::make_pair(minX, h2);
73 pts[0] = std::make_pair(minX + w + gap, h1);
74 pts[1] = std::make_pair(maxX, h1);
75 pts[2] = std::make_pair(maxX, h2);
76 pts[3] = std::make_pair(minX + w + gap, h2);
79 world.addObstacle(left_obj);
80 world.addObstacle(right_obj);
83 basePose = Eigen::Affine2d::Identity();
84 basePose.translation()(1) = gap / 2.0;
87 goalPose = Eigen::Affine2d::Identity();
88 goalPose.translation()(0) = (w + gap) * 0.95;
89 goalPose.translation()(1) = std::min(4.0 * gap, 0.50);
100PolyWorld createConstrictedProblem(
int n, Eigen::Affine2d &basePose, Eigen::Affine2d &goalPose)
102 const double minX = 0;
103 const double minY = 0;
104 const double maxX = 1.25;
105 const double maxY = 1.25;
106 PolyWorld world(
"constricted", {minX, maxX}, {minY, maxY});
108 const double gap = (log10(n) / (double)n) * 2.0;
112 const double inner_gap = 1.0 / n;
115 const double robot_y = 0.5;
116 const double ymax = 1.25;
118 std::vector<Point> pts(4);
121 const double lower_interior_y = robot_y - inner_gap;
122 const double upper_interior_y = robot_y + inner_gap;
125 pts[0] = std::make_pair(0, 0);
126 pts[1] = std::make_pair(0.5, 0);
127 pts[2] = std::make_pair(0.5, lower_interior_y);
128 pts[3] = std::make_pair(0, lower_interior_y);
130 world.addObstacle(lower);
135 pts[0] = std::make_pair(0, upper_interior_y);
136 pts[1] = std::make_pair(0.5, upper_interior_y);
137 pts[2] = std::make_pair(0.5, ymax);
138 pts[3] = std::make_pair(0, ymax);
140 world.addObstacle(upper);
145 pts[0] = std::make_pair(0.5 + gap, 0.5 + (gap / 2.0));
146 pts[1] = std::make_pair(1.0, 0.5 + (gap / 2.0));
147 pts[2] = std::make_pair(1.0, 0.5 + gap);
148 pts[3] = std::make_pair(0.5 + gap, 0.5 + gap);
150 world.addObstacle(right);
153 basePose = Eigen::Affine2d::Identity();
154 basePose.translation()(1) = robot_y;
156 goalPose = Eigen::Affine2d::Identity();
157 goalPose.translation()(0) = 0.75;
158 goalPose.translation()(1) = 0.5 + 1.5 * gap;
159 goalPose.rotate(0.0);
void log(const char *file, int line, LogLevel level, const char *m,...)
Root level logging function. This should not be invoked directly, but rather used via a logging macro...