Motion Master
Loading...
Searching...
No Matches
system_identification.h
Go to the documentation of this file.
1#pragma once
2
3#include <vector>
4
5#include "cia402_drive.h"
6#include "motion-master.pb.h"
7#include "si_unit_velocity.h"
8#include "util.h"
9
11 public:
13 uint32_t device_address, Cia402Drive& cia402_drive,
14 TuningParameters tuning_params,
15 const std::function<void()>& started_callback = {},
16 const std::function<void(motionmaster::MotionMasterMessage::Status::
17 SystemIdentification::Warning::Code,
18 std::string)>& warning_callback = {},
19 bool skip_chirp_signal = false);
20
22
31 std::variant<MotionMasterError, PlantModel> start();
32
33 private:
34 uint32_t device_address_;
35 Cia402Drive& cia402_drive_;
36
37 TuningParameters tuning_params_;
38 SystemParameters system_params_;
39
40 const std::function<void()>& started_callback_;
41 const std::function<void(motionmaster::MotionMasterMessage::Status::
42 SystemIdentification::Warning::Code,
43 std::string)>& warning_callback_;
44
45 SiUnitVelocity si_unit_velocity_;
46
47 bool skip_chirp_signal_ = false;
48
49 double gear_ratio_ = 1.0;
50 double feed_constant_ = 1.0;
51
57 MotionMasterError init();
58
70 static std::vector<int16_t> chirp(TuningParameters tuning_params);
71
81 static double missing_data(std::vector<int32_t>& raw_positions,
82 std::vector<int32_t>& raw_velocities,
83 std::vector<int32_t>& raw_torques);
84
94 static int32_t calculate_linear_interpolation_step_value(
95 std::vector<int32_t> data, uint32_t first_zero_index,
96 uint32_t last_zero_index);
97
105 static void linear_interpolation(std::vector<int32_t>& raw_positions,
106 std::vector<int32_t>& raw_velocities,
107 std::vector<int32_t>& raw_torques);
108
119 static std::vector<double> convert_velocity_to_si(
120 const std::vector<int32_t>& raw_velocities, double gear_ratio = 1.0,
121 double velocity_unit_scaling = 1, double feed_constant = 1.0);
122
136 MotionMasterError check_input_signal_signs(
137 const std::vector<int16_t>& chirp_target_torques,
138 const std::vector<double>& velocities,
139 const std::vector<int32_t>& raw_positions);
140
148 static int32_t find_torque_sign_change(
149 const std::vector<int16_t>& chirp_target_torques);
150
158 MotionMasterError save_plant_model_to_flash(PlantModel m);
159
168 MotionMasterError check_input_signal_amplitudes(
169 const std::vector<int32_t>& torques,
170 const std::vector<double>& velocities);
171
177 MotionMasterError set_integral_limits();
178
186 std::vector<double> convert_velocity_q15_to_si(
187 const std::vector<int32_t>& q15_velocities);
188
197 static std::vector<double> convert_torque_to_si(
198 const std::vector<int32_t>& raw_torques, uint32_t nominal_torque);
199
210 static bool check_model_stability(const PlantModel& m);
211
212 static void write_sys_id_csv(const std::string& filename,
213 const std::vector<double>& torques_si,
214 const std::vector<double>& velocities_si);
215};
struct TuningParametersClass TuningParameters
struct SystemParametersClass SystemParameters
Definition cia402_drive.h:120
Definition motion_master_error.h:6
Definition si_unit_velocity.h:11
~SystemIdentification()
Definition system_identification.cc:43
std::variant< MotionMasterError, PlantModel > start()
Run system identification.
Definition system_identification.cc:45
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 skip_chirp_signal=false)
Definition system_identification.cc:27
Definition util.h:29