14 using namespace mvsim;
20 setpoint_lin_speed(0),
21 setpoint_ang_speed(0),
44 if (setpoint_ang_speed == 0)
50 const double R = setpoint_lin_speed / setpoint_ang_speed;
56 const std::vector<mrpt::math::TVector2D> desired_wheel_vels = veh_.getWheelsVelocityLocal(
57 mrpt::math::TTwist2D(setpoint_lin_speed, 0.0, setpoint_ang_speed));
59 ASSERT_(desired_wheel_vels.size() == 4);
63 double vel_fl, vel_fr;
64 double desired_fl_steer_ang, desired_fr_steer_ang;
65 veh_.computeFrontWheelAngles(co.
steer_ang, desired_fl_steer_ang, desired_fr_steer_ang);
67 const mrpt::poses::CPose2D wRotInv(0, 0, -desired_fl_steer_ang);
68 mrpt::math::TPoint2D vel_w;
73 const mrpt::poses::CPose2D wRotInv(0, 0, -desired_fr_steer_ang);
74 mrpt::math::TPoint2D vel_w;
81 double act_vel_fl, act_vel_fr;
84 const std::vector<mrpt::math::TVector2D> odo_wheel_vels =
85 veh_.getWheelsVelocityLocal(veh_.getVelocityLocalOdoEstimate());
86 ASSERT_(odo_wheel_vels.size() == 4);
92 const mrpt::poses::CPose2D wRotInv(0, 0, -actual_fl_steer_ang);
93 mrpt::math::TPoint2D vel_w;
98 const mrpt::poses::CPose2D wRotInv(0, 0, -actual_fr_steer_ang);
99 mrpt::math::TPoint2D vel_w;
101 act_vel_fr = vel_w.x;
106 for (
int i = 0; i < 2; i++)
111 PID_[i].max_out = max_torque;
129 params[
"max_torque"] =
TParamEntry(
"%lf", &max_torque);
132 params[
"V"] =
TParamEntry(
"%lf", &this->setpoint_lin_speed);
133 params[
"W"] =
TParamEntry(
"%lf_deg", &this->setpoint_ang_speed);
147 setpoint_lin_speed += 0.1;
152 setpoint_lin_speed -= 0.1;
157 setpoint_ang_speed += 1.0 * M_PI / 180.0;
162 setpoint_ang_speed -= 1.0 * M_PI / 180.0;
166 setpoint_lin_speed = .0;
167 setpoint_ang_speed = .0;
173 if (in.
js && in.
js->axes.size() >= 2)
175 const auto& js = in.
js.value();
176 const float js_x = js.axes[0];
177 const float js_y = js.axes[1];
179 setpoint_lin_speed = -js_y * joyMaxLinSpeed;
180 setpoint_ang_speed = -js_x * joyMaxAngSpeed;
182 if (js.buttons.size() >= 7)
184 if (js.buttons[5]) joyMaxLinSpeed *= 1.01;
185 if (js.buttons[7]) joyMaxLinSpeed /= 1.01;
187 if (js.buttons[4]) joyMaxAngSpeed *= 1.01;
188 if (js.buttons[6]) joyMaxAngSpeed /= 1.01;
192 setpoint_lin_speed = 0;
193 setpoint_ang_speed = 0;
199 "maxLinSpeed=%.03f m/s\n"
200 "maxAngSpeed=%.03f deg/s\n",
201 joyMaxLinSpeed, mrpt::RAD2DEG(joyMaxAngSpeed));
207 "w/s=forward/backward.\n"
213 "setpoint: lin=%.03f ang=%.03f deg/s\n", setpoint_lin_speed,
214 180.0 / M_PI * setpoint_ang_speed);