26 std::vector<double>& times,
bool resample =
false,
27 double timeStep = 0,
size_t size = 0)
43 for (
size_t si = 0; si < x.size(); si++)
44 new_x[si] = x[si] - (x[si] - bx[si]) * (t - bt) * invTS;
72 const std::function<
void()>& started_callback = {},
73 const std::function<void(motionmaster::MotionMasterMessage::Status::
74 SystemIdentification::Warning::Code,
75 std::string)>& warning_callback = {},
76 bool next_gen_sys_id =
false,
bool skip_chirp_signal =
false);
88 std::variant<MotionMasterError, PlantModel>
start();
91 uint32_t device_address_;
92 Cia402Drive& cia402_drive_;
97 const std::function<void()>& started_callback_;
98 const std::function<void(motionmaster::MotionMasterMessage::Status::
99 SystemIdentification::Warning::Code,
100 std::string)>& warning_callback_;
102 SiUnitVelocity si_unit_velocity_;
104 bool next_gen_sys_id_ =
false;
105 bool skip_chirp_signal_ =
false;
107 double gear_ratio_ = 1.0;
108 double feed_constant_ = 1.0;
115 MotionMasterError init();
133 static double missing_data(std::vector<int32_t>& raw_positions,
134 std::vector<int32_t>& raw_velocities,
135 std::vector<int32_t>& raw_torques);
147 static int32_t calculate_linear_interpolation_step_value(
148 std::vector<int32_t> data, uint32_t first_zero_index,
149 uint32_t last_zero_index);
159 static void linear_interpolation(std::vector<int32_t>& raw_positions,
160 std::vector<int32_t>& raw_velocities,
161 std::vector<int32_t>& raw_torques);
170 MotionMasterError save_plant_model_to_flash(PlantModel m);
180 static std::vector<double> convert_position_to_si(
181 std::vector<int32_t> raw_positions, uint32_t singleturn_resolution);
193 static std::vector<double> convert_velocity_to_si(
194 const std::vector<int32_t>& raw_velocities,
double gear_ratio = 1.0,
195 double velocity_unit_scaling = 1,
double feed_constant = 1.0);
217 std::vector<double> convert_velocity_q15_to_si(
218 const std::vector<int32_t>& q15_velocities);
228 static std::vector<double> convert_torque_to_si(
229 const std::vector<int32_t>& raw_torques, uint32_t nominal_torque);
239 MotionMasterError check_input_signal_amplitudes(
240 const std::vector<int32_t>& torques,
241 const std::vector<double>& velocities);
253 static MotionMasterError check_input_signal_signs(
254 const std::vector<int16_t>& chirp_target_torques,
255 const std::vector<double>& velocities,
256 const std::vector<int32_t>& raw_positions);
263 MotionMasterError set_integral_limits();
275 static bool check_model_stability(
const PlantModel& m);
296 static PlantModel identify_plant_model(std::vector<double> velocities_si,
297 std::vector<double> torques_si,
310 static int32_t find_torque_sign_change(
311 const std::vector<int16_t>& chirp_target_torques);
324 static std::tuple<PlantModel, double> get_optimal_model(
325 std::vector<double> velocities_si, std::vector<double> torques_si,
327 const std::string& fileName =
"");
340 static double calculate_stability_margin(PlantModel m);
358 static double validate_sys_ident(PlantModel m,
359 const std::vector<double>& velocities_si,
360 const std::vector<double>& torques_si,
363 const std::string& =
"");
390 static PlantModel do_least_squares(std::vector<double> y,
391 std::vector<double> tau,
double time_step,
392 uint8_t order, uint16_t cutoff_frequency);
409 static std::vector<double> gpmf_filtering(std::vector<double> data,
410 uint16_t cutoff_frequency,
426 static std::tuple<dlib::matrix<double>, std::vector<double>,
428 create_data_matrix(std::vector<double> y, std::vector<double> tau,
429 double time_step, uint8_t order);
439 static std::vector<double> numerical_differentiation(std::vector<double> data,
442 static void write_sys_id_csv(
const std::string& filename,
443 const std::vector<double>& torques_si,
444 const std::vector<double>& velocities_si);
SystemIdentification(uint32_t device_address, Cia402Drive &cia402_drive, TuningParameters tuning_params, const std::function< void()> &started_callback={}, const std::function< void(motionmaster::MotionMasterMessage::Status::SystemIdentification::Warning::Code, std::string)> &warning_callback={}, bool next_gen_sys_id=false, bool skip_chirp_signal=false)
Definition system_identification.cc:27