74 if (
fs_ !=
nullptr &&
fs_->is_open()) {
75 *
fs_ <<
"time,Kp,Ki,Kd,error,integral_error,differential_error,error_filtered,meas_vel,filt_vel,cmd_vel,dt,motor_cmd\n";
110 unsigned char OdomControl::run(
bool e_stop_on,
bool control_on,
double commanded_vel,
double measured_vel,
double dt,
int firmwareBuildNumber)
121 int firmwareBuildNumberTrunc = firmwareBuildNumber / 100;
159 if (
fs_ !=
nullptr &&
fs_->is_open()){
190 double p_val =
P(error, dt);
191 double i_val =
I(error, dt);
192 double d_val =
D(error, dt);
193 double pid_val = p_val + i_val + d_val;
194 ROS_DEBUG(
"\nerror: %lf\n dt: %lf", error, dt);
195 ROS_DEBUG(
"\n kp: %lf \n ki: %lf \n kd: %lf \n", p_val, i_val, d_val);
207 return (
int)round(pid_val + 125.0);
227 double p_val = error *
K_P_;
233 double avg = (fabs(vel_history[0]) + fabs(vel_history[1]) + fabs(vel_history[2])) / 3.0;
243 int test_factor = 18;
247 if (motor_speed > max)
252 if (motor_speed < min)
258 test_motor = motor_speed;
268 return (motor_speed + deadband_offset);
272 return (motor_speed - deadband_offset);
278 static double time = 0;
290 float change_in_velocity = 0;
bool hasZeroHistory(const std::vector< double > &vel_history)
int deadbandOffset(int motor_speed, int deadband_offset)
double D(double error, double dt)
std::vector< double > velocity_history_
int PID(double error, double dt)
int boundMotorSpeed(int motor_speed, int max, int min)
double I(double error, double dt)
const int MOTOR_SPEED_MAX
double velocity_filtered_
void start(bool use_control, PidGains pid_gains, int max, int min)
std::vector< double > velocity_filtered_history_
double P(double error, double dt)
double filter(double left_motor_vel, double dt, int firmwareBuildNumber)
const int BUILD_NUMBER_WITH_GOOD_RPM_DATA
const int MOTOR_SPEED_MIN
double differential_error_
double velocity_commanded_
unsigned char run(bool e_stop_on, bool control_on, double commanded_vel, double measured_vel, double dt, int firmwareBuildNumber)
double velocity_measured_