3#include <dlib/matrix.h>
5#include <boost/numeric/odeint/stepper/controlled_runge_kutta.hpp>
6#include <boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp>
10#include "motion-master.pb.h"
26 std::vector<double> ×,
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);
91 uint32_t device_address_;
97 const std::function<void()> &started_callback_;
98 const std::function<void(motionmaster::MotionMasterMessage::Status::
99 SystemIdentification::Warning::Code,
100 std::string)> &warning_callback_;
104 bool next_gen_sys_id_ =
false;
106 double gear_ratio_ = 1.0;
107 double feed_constant_ = 1.0;
132 static double missing_data(std::vector<int32_t> &raw_positions,
133 std::vector<int32_t> &raw_velocities,
134 std::vector<int32_t> &raw_torques);
146 static int32_t calculate_linear_interpolation_step_value(
147 std::vector<int32_t> data, uint32_t first_zero_index,
148 uint32_t last_zero_index);
158 static void linear_interpolation(std::vector<int32_t> &raw_positions,
159 std::vector<int32_t> &raw_velocities,
160 std::vector<int32_t> &raw_torques);
179 static std::vector<double> convert_position_to_si(
180 std::vector<int32_t> raw_positions, uint32_t singleturn_resolution);
192 static std::vector<double> convert_velocity_to_si(
193 const std::vector<int32_t> &raw_velocities,
double gear_ratio = 1.0,
194 double velocity_unit_scaling = 1,
double feed_constant = 1.0);
204 static std::vector<double> convert_torque_to_si(
205 const std::vector<int32_t> &raw_torques, uint32_t nominal_torque);
216 const std::vector<int32_t> &torques,
217 const std::vector<double> &velocities);
230 const std::vector<int16_t> &chirp_target_torques,
231 const std::vector<double> &velocities,
232 const std::vector<int32_t> &raw_positions);
251 static bool check_model_stability(
const PlantModel &m);
272 static PlantModel identify_plant_model(std::vector<double> velocities_si,
273 std::vector<double> torques_si,
286 static int32_t find_torque_sign_change(
287 const std::vector<int16_t> &chirp_target_torques);
300 static std::tuple<PlantModel, double> get_optimal_model(
301 std::vector<double> velocities_si, std::vector<double> torques_si,
303 const std::string &fileName =
"");
316 static double calculate_stability_margin(
PlantModel m);
334 static double validate_sys_ident(
PlantModel m,
335 const std::vector<double> &velocities_si,
336 const std::vector<double> &torques_si,
339 const std::string & =
"");
366 static PlantModel do_least_squares(std::vector<double> y,
367 std::vector<double> tau,
double time_step,
368 uint8_t order, uint16_t cutoff_frequency);
385 static std::vector<double> gpmf_filtering(std::vector<double> data,
386 uint16_t cutoff_frequency,
402 static std::tuple<dlib::matrix<double>, std::vector<double>,
404 create_data_matrix(std::vector<double> y, std::vector<double> tau,
405 double time_step, uint8_t order);
415 static std::vector<double> numerical_differentiation(std::vector<double> data,
418 static void write_sys_id_csv(
const std::string &filename,
419 const std::vector<double> &torques_si,
420 const std::vector<double> &velocities_si);
Definition: cia402_drive.h:48
Definition: motion_master_error.h:6
Definition: si_unit_velocity.h:11
Definition: system_identification.h:14
~SystemIdentification()
Definition: system_identification.cc:37
MotionMasterError start()
Run system identification.
Definition: system_identification.cc:39
std::vector< double > state_type
Definition: system_identification.h:16
Definition: system_identification.h:18
std::vector< double > & m_times
Definition: system_identification.h:20
double m_timeStep
Definition: system_identification.h:22
void operator()(const state_type &x, double t)
Definition: system_identification.h:34
push_back_state_and_time(std::vector< state_type > &states, std::vector< double > ×, bool resample=false, double timeStep=0, size_t size=0)
Definition: system_identification.h:25
bool m_resample
Definition: system_identification.h:21
size_t m_size
Definition: system_identification.h:23
std::vector< state_type > & m_states
Definition: system_identification.h:19