1#ifndef FASTCAT_ACTUATOR_H_
2#define FASTCAT_ACTUATOR_H_
9#include "fastcat/jsd/jsd_device_base.h"
10#include "fastcat/trap.h"
11#include "fastcat/ring_buffer.h"
12#include "jsd/jsd_elmo_common_types.h"
74 bool Write(DeviceCmd& cmd)
override;
75 void Fault()
override;
76 void Reset()
override;
82 explicit_interpolation_algorithm_ = algorithm;
87 explicit_interpolation_timestamp_source_ = source;
91 if(cycles_delay > 10) {
93 "cycles_delay must be <= 10 cycles, ignoring request to set cycles_delay to %zu",
97 csp_cycles_delay_ = cycles_delay + 1;
101 csp_cycles_stale_ = cycles;
158 double ComputePower(
double actual_velocity,
double actual_current,
165 JSD_ELMO_GAIN_SCHEDULING_MODE_PRELOADED;
188 bool PosExceedsCmdLimits(
double pos_eu);
189 bool VelExceedsCmdLimits(
double vel_eu);
190 bool AccExceedsCmdLimits(
double vel_eu);
191 bool CurrentExceedsCmdLimits(
double current);
192 bool CheckStateMachineMotionCmds();
193 bool CheckStateMachineGainSchedulingCmds();
194 bool HandleNewHaltCmd();
195 bool HandleNewResetCmd();
196 bool HandleNewSetOutputPositionCmd(
const DeviceCmd& cmd);
197 bool HandleNewSetUnitModeCmd(
const DeviceCmd& cmd);
198 bool HandleNewSetProfDisengagingTimeoutCmd(
const DeviceCmd& cmd);
199 bool HandleNewCalibrationCmd(
const DeviceCmd& cmd);
200 bool HandleNewCSPCmd(
const DeviceCmd& cmd);
201 bool HandleNewCSVCmd(
const DeviceCmd& cmd);
202 bool HandleNewCSTCmd(
const DeviceCmd& cmd);
203 bool HandleNewProfPosCmd(
const DeviceCmd& cmd);
204 bool HandleNewProfVelCmd(
const DeviceCmd& cmd);
205 bool HandleNewProfTorqueCmd(
const DeviceCmd& cmd);
207 bool IsIdleFaultConditionMet();
208 FaultType ProcessFaulted();
209 FaultType ProcessHalted();
210 FaultType ProcessHolding();
211 FaultType ProcessCS();
212 FaultType ProcessCalMoveToHardstop();
213 FaultType ProcessCalAtHardstop();
214 FaultType ProcessCalUpdatePosition();
215 FaultType ProcessCalMoveToSoftstop();
217 bool GSModeFromString(std::string gs_mode_string,
218 jsd_elmo_gain_scheduling_mode_t& gs_mode);
220 virtual bool ParseSpecializedYamlParams(
const YAML::Node& node);
222 virtual void PopulateJsdSlaveConfig() = 0;
223 virtual void PopulateState() = 0;
225 virtual bool HandleNewProfPosCmdImpl(
const DeviceCmd& cmd) = 0;
226 virtual bool HandleNewProfVelCmdImpl(
const DeviceCmd& cmd) = 0;
227 virtual bool HandleNewProfTorqueCmdImpl(
const DeviceCmd& cmd) = 0;
229 virtual FaultType ProcessProfPosDisengaging() = 0;
230 virtual FaultType ProcessProfPos() = 0;
231 virtual FaultType ProcessProfVelDisengaging() = 0;
232 virtual FaultType ProcessProfVel() = 0;
233 virtual FaultType ProcessProfTorqueDisengaging() = 0;
234 virtual FaultType ProcessProfTorque() = 0;
236 virtual void ElmoSetConfig();
237 virtual void ElmoRead() = 0;
238 virtual void ElmoClearErrors() = 0;
239 virtual void ElmoFault() = 0;
240 virtual void ElmoReset() = 0;
241 virtual void ElmoSetPeakCurrent(
double current) = 0;
242 virtual void ElmoSetDigitalOutput(uint8_t digital_output_index,
243 uint8_t output_level) = 0;
244 virtual void ElmoSetUnitMode(int32_t mode, uint16_t app_id) = 0;
245 virtual void ElmoSetGainSchedulingMode(jsd_elmo_gain_scheduling_mode_t mode,
246 uint16_t app_id) = 0;
247 virtual void ElmoSetGainSchedulingIndex(uint16_t index) = 0;
248 virtual void ElmoCSP(
const jsd_elmo_motion_command_csp_t& jsd_csp_cmd) = 0;
249 virtual void ElmoCSV(
const jsd_elmo_motion_command_csv_t& jsd_csv_cmd) = 0;
250 virtual void ElmoCST(
const jsd_elmo_motion_command_cst_t& jsd_cst_cmd) = 0;
251 virtual void ElmoHalt() = 0;
252 virtual void ElmoProcess() = 0;
254 virtual double GetActualVelocity() = 0;
255 virtual double GetElmoActualPosition() = 0;
256 virtual jsd_elmo_state_machine_state_t GetElmoStateMachineState() = 0;
257 virtual bool IsStoEngaged() = 0;
259 double overall_reduction_ = 1.0;
261 ActuatorCalibrateCmd cal_cmd_ = {};
263 bool actuator_absolute_encoder_ =
false;
264 int32_t elmo_pos_offset_cnts_ = 1;
266 double csp_interpolation_offset_time_ = 0.0;
267 size_t csp_cycles_delay_ = 4;
268 size_t csp_cycles_stale_ = 10;
bool compute_power_
Definition actuator.h:161
void SetExplicitInterpolationTimestampSource(ActuatorExplicitInterpolationTimestamp source)
Definition actuator.h:85
bool SetOutputPosition(double position)
Definition actuator.cc:514
const ActuatorParams & GetParams()
Definition actuator.h:143
double ComputePower(double actual_velocity, double actual_current, bool motor_is_on)
Definition actuator.cc:831
DeviceCmd last_cmd_
Definition actuator.h:176
static std::string StateMachineStateToString(ActuatorStateMachineState sms)
Definition actuator.cc:616
ActuatorParams params_
Definition actuator.h:172
double EuToCnts(double eu)
Definition actuator.cc:533
jsd_elmo_gain_scheduling_mode_t ctrl_gs_mode_
Definition actuator.h:164
void SetExplicitInterpolationCyclesDelay(size_t cycles_delay)
Definition actuator.h:90
static std::string GetJSDFaultCodeAsString(const DeviceState &state)
Definition actuator.cc:762
int32_t PosEuToCnts(double eu)
Definition actuator.cc:542
double last_transition_time_
Definition actuator.h:170
void SetInterpolationCyclesStale(size_t cycles)
Definition actuator.h:100
static bool IsJsdFaultCodePresent(const DeviceState &state)
Definition actuator.cc:781
void Fault() override
Definition actuator.cc:493
double prof_disengaging_timeout_
Definition actuator.h:184
double PosCntsToEu(int32_t cnts)
Definition actuator.cc:538
fastcat_trap_t trap_
Definition actuator.h:171
void SetExplicitInterpolationAlgorithm(ActuatorExplicitInterpolationAlgorithm algorithm)
Definition actuator.h:80
void Reset() override
Definition actuator.cc:502
FaultType ProcessProfPosTrapImpl()
Definition actuator_fsm_helpers.cc:588
jsd_slave_config_t jsd_slave_config_
Definition actuator.h:167
bool IsMotionFaultConditionMet()
Definition actuator_fsm_helpers.cc:537
double CntsToEu(int32_t cnts)
Definition actuator.cc:529
bool Write(DeviceCmd &cmd) override
Definition actuator.cc:234
Actuator()
Definition actuator.cc:19
static std::string GetFastcatFaultCodeAsString(const DeviceState &state)
Definition actuator.cc:702
ActuatorStateMachineState actuator_sms_
Definition actuator.h:169
static double GetActualPosition(const DeviceState &state)
Definition actuator.cc:803
ActuatorFastcatFault fastcat_fault_
Definition actuator.h:174
bool HasAbsoluteEncoder()
Definition actuator.cc:524
void TransitionToState(ActuatorStateMachineState sms)
Definition actuator.cc:605
double ComputeTargetPosProfPosCmd(const DeviceCmd &cmd)
Definition actuator.cc:819
bool ConfigFromYaml(const YAML::Node &node) override
Definition actuator.cc:25
bool Read() override
Definition actuator.cc:227
FaultType Process() override
Definition actuator.cc:424
Definition jsd_device_base.h:16
Definition ring_buffer.h:13
Definition device_base.h:18
ActuatorExplicitInterpolationTimestamp
Definition actuator.h:61
@ ACTUATOR_EXPLICIT_INTERPOLATION_TIMESTAMP_FASTCAT_CLOCK
Definition actuator.h:63
@ ACTUATOR_EXPLICIT_INTERPOLATION_TIMESTAMP_CSP_MESSAGE
Definition actuator.h:62
ActuatorStateMachineState
Definition actuator.h:16
@ ACTUATOR_SMS_CSV
Definition actuator.h:27
@ ACTUATOR_SMS_CST
Definition actuator.h:28
@ ACTUATOR_SMS_PROF_TORQUE_DISENGAGING
Definition actuator.h:25
@ ACTUATOR_SMS_CAL_MOVE_TO_HARDSTOP
Definition actuator.h:29
@ ACTUATOR_SMS_CAL_AT_HARDSTOP
Definition actuator.h:31
@ ACTUATOR_SMS_FAULTED
Definition actuator.h:17
@ ACTUATOR_SMS_PROF_POS
Definition actuator.h:20
@ ACTUATOR_SMS_PROF_VEL_DISENGAGING
Definition actuator.h:23
@ ACTUATOR_SMS_CAL_MOVE_TO_SOFTSTOP
Definition actuator.h:32
@ ACTUATOR_SMS_PROF_TORQUE
Definition actuator.h:24
@ ACTUATOR_SMS_CSP
Definition actuator.h:26
@ ACTUATOR_SMS_HALTED
Definition actuator.h:18
@ ACTUATOR_SMS_PROF_POS_DISENGAGING
Definition actuator.h:21
@ ACTUATOR_SMS_HOLDING
Definition actuator.h:19
@ ACTUATOR_SMS_CAL_UPDATE_POSITION
Definition actuator.h:30
@ ACTUATOR_SMS_PROF_VEL
Definition actuator.h:22
ActuatorFastcatFault
Definition actuator.h:40
@ ACTUATOR_FASTCAT_FAULT_INVALID_ELMO_SMS_DURING_MOTION
Definition actuator.h:49
@ ACTUATOR_FASTCAT_FAULT_OKAY
Definition actuator.h:41
@ ACTUATOR_FASTCAT_FAULT_INVALID_CAL_MOTION_RANGE
Definition actuator.h:46
@ ACTUATOR_FASTCAT_FAULT_CAL_RESET_TIMEOUT_EXCEEDED
Definition actuator.h:52
@ ACTUATOR_FASTCAT_FAULT_INVALID_CMD_DURING_CAL
Definition actuator.h:45
@ ACTUATOR_FASTCAT_FAULT_BRAKE_DISENGAGE_TIMEOUT_EXCEEDED
Definition actuator.h:50
@ ACTUATOR_FASTCAT_FAULT_CMD_LIMIT_EXCEEDED
Definition actuator.h:43
@ ACTUATOR_FASTCAT_FAULT_INVALID_CMD_DURING_MOTION
Definition actuator.h:44
@ ACTUATOR_FASTCAT_FAULT_PROF_POS_CMD_ACK_TIMEOUT_EXCEEDED
Definition actuator.h:53
@ ACTUATOR_FASTCAT_FAULT_NO_HARDSTOP_DURING_CAL
Definition actuator.h:51
@ ACTUATOR_FASTCAT_FAULT_STO_ENGAGED
Definition actuator.h:48
ActuatorType
Definition actuator.h:35
@ ACTUATOR_TYPE_PRISMATIC
Definition actuator.h:37
@ ACTUATOR_TYPE_REVOLUTE
Definition actuator.h:36
ActuatorExplicitInterpolationAlgorithm
Definition actuator.h:56
@ ACTUATOR_EXPLICIT_INTERPOLATION_ALGORITHM_LINEAR
Definition actuator.h:58
@ ACTUATOR_EXPLICIT_INTERPOLATION_ALGORITHM_CUBIC
Definition actuator.h:57
Definition actuator.h:109
double holding_duration_sec
Definition actuator.h:129
double max_speed_eu_per_sec
Definition actuator.h:116
bool prof_pos_hold
Definition actuator.h:140
double elmo_brake_engage_msec
Definition actuator.h:130
double pos_tracking_error_eu
Definition actuator.h:120
double continuous_current_limit_amps
Definition actuator.h:123
double peak_current_limit_amps
Definition actuator.h:121
double smooth_factor
Definition actuator.h:134
int64_t elmo_crc
Definition actuator.h:132
double high_pos_cmd_limit_eu
Definition actuator.h:127
double high_pos_cal_limit_eu
Definition actuator.h:128
double over_speed_multiplier
Definition actuator.h:118
double peak_current_time_sec
Definition actuator.h:122
double low_pos_cal_limit_eu
Definition actuator.h:125
double vel_tracking_error_eu_per_sec
Definition actuator.h:119
double elmo_drive_max_cur_limit_amps
Definition actuator.h:133
double max_accel_eu_per_sec2
Definition actuator.h:117
std::string actuator_type_str
Definition actuator.h:110
double motor_encoder_gear_ratio
Definition actuator.h:138
double elmo_brake_disengage_msec
Definition actuator.h:131
double brake_power
Definition actuator.h:137
double gear_ratio
Definition actuator.h:114
std::string ctrl_gs_mode_str
Definition actuator.h:113
double low_pos_cmd_limit_eu
Definition actuator.h:126
double torque_constant
Definition actuator.h:135
double counts_per_rev
Definition actuator.h:115
double torque_slope_amps_per_sec
Definition actuator.h:124
bool actuator_absolute_encoder
Definition actuator.h:139
double winding_resistance
Definition actuator.h:136