97 constexpr
char LOGNAME[] =
"cart exploration";
99 int main(
int argc,
char** argv)
109 arma::arma_rng::set_seed_random();
116 const auto map_frame_id = pnh.
param<std::string>(
"map_frame_id",
"map");
117 const auto base_frame_id = pnh.
param<std::string>(
"base_frame_id",
"base_link");
120 const double frequency = pnh.
param(
"frequency", 10.0);
122 const double val_dt = pnh.
param(
"val_dt", 0.1);
123 const double val_horizon = pnh.
param(
"val_horizon", 0.5);
125 const double max_vel_x = pnh.
param(
"max_vel_x", 1.0);
126 const double max_rot_vel = pnh.
param(
"max_rot_vel", 1.0);
128 const double min_vel_x = pnh.
param(
"min_vel_x", -1.0);
129 const double min_rot_vel = pnh.
param(
"min_rot_vel", -1.0);
131 const double acc_lim_x = pnh.
param(
"acc_lim_x", 1.0);
132 const double acc_lim_th = pnh.
param(
"acc_lim_th", 1.0);
134 const vec umin = { min_vel_x, 0.0, min_rot_vel };
135 const vec umax = { max_vel_x, 0.0, max_rot_vel };
138 const double boundary_radius = pnh.
param(
"boundary_radius", 0.7);
139 const double search_radius = pnh.
param(
"search_radius", 1.0);
140 const double obstacle_threshold = pnh.
param(
"obstacle_threshold", 0.2);
141 const double occupied_threshold = pnh.
param(
"occupied_threshold", 0.8);
144 const double ec_dt = pnh.
param(
"ec_dt", 0.1);
145 const double ec_horizon = pnh.
param(
"ec_horizon", 2.0);
146 const double target_resolution = pnh.
param(
"target_resolution", 0.1);
147 const double expl_weight = pnh.
param(
"expl_weight", 1.0);
148 const unsigned int num_basis = pnh.
param(
"num_basis", 10);
149 const unsigned int buffer_size = pnh.
param(
"buffer_size", 1e6);
150 const unsigned int batch_size = pnh.
param(
"batch_size", 100);
152 std::vector<double> control_weights = { 1.0, 1.0 };
153 pnh.
getParam(
"control_weights", control_weights);
156 mat Rinv(3, 3, arma::fill::zeros);
157 Rinv(0, 0) = 1.0 / control_weights.at(0);
159 Rinv(2, 2) = 1.0 / control_weights.at(1);
162 const double dwa_dt = pnh.
param(
"dwa_dt", 0.1);
163 const double dwa_horizon = pnh.
param(
"dwa_horizon", 1.0);
164 const double acc_dt = pnh.
param(
"acc_dt", 0.2);
165 const unsigned int vx_samples = pnh.
param(
"vx_samples", 3);
166 const unsigned int vth_samples = pnh.
param(
"vth_samples", 5);
168 if (dwa_horizon > ec_horizon)
171 LOGNAME,
"Dynamic window horizon is greater than the ergodic control horizon");
180 const auto num_targets =
static_cast<unsigned int>(means.
size());
183 for (
unsigned int i = 0; i < num_targets; i++)
185 gaussians.at(i) = { { means[i][0], means[i][1] }, { sigmas[i][0], sigmas[i][1] } };
188 const Target target(gaussians);
191 const Collision collision(boundary_radius, search_radius, obstacle_threshold,
194 const ErgodicControl ergodic_control(cart, collision, ec_dt, ec_horizon,
195 target_resolution, expl_weight, num_basis,
196 buffer_size, batch_size, Rinv, umin, umax);
198 const DynamicWindow dwa(collision, dwa_dt, dwa_horizon, acc_dt, acc_lim_x, 0.0,
199 acc_lim_th, max_vel_x, min_vel_x, 0.0, 0.0, max_rot_vel,
200 min_rot_vel, vx_samples, 0.0, vth_samples);
206 exploration.
control(target, map_frame_id, base_frame_id, frequency, val_dt, val_horizon);