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"
13#include "jsd/jsd_elmo_common.h"
75 bool Write(DeviceCmd& cmd)
override;
76 void Fault()
override;
77 void Reset()
override;
83 explicit_interpolation_algorithm_ = algorithm;
88 explicit_interpolation_timestamp_source_ = source;
92 if(cycles_delay > 10) {
94 "cycles_delay must be <= 10 cycles, ignoring request to set cycles_delay to %zu",
98 csp_cycles_delay_ = cycles_delay + 1;
102 csp_cycles_stale_ = cycles;
159 double ComputePower(
double actual_velocity,
double actual_current,
166 JSD_ELMO_GAIN_SCHEDULING_MODE_PRELOADED;
180 JSD_ELMO_STATE_MACHINE_STATE_NOT_READY_TO_SWITCH_ON;
192 bool PosExceedsCmdLimits(
double pos_eu);
193 bool VelExceedsCmdLimits(
double vel_eu);
194 bool AccExceedsCmdLimits(
double vel_eu);
195 bool CurrentExceedsCmdLimits(
double current);
196 bool CheckStateMachineMotionCmds();
197 bool CheckStateMachineGainSchedulingCmds();
198 bool HandleNewHaltCmd();
199 bool HandleNewResetCmd();
200 bool HandleNewSetOutputPositionCmd(
const DeviceCmd& cmd);
201 bool HandleNewSetUnitModeCmd(
const DeviceCmd& cmd);
202 bool HandleNewSetProfDisengagingTimeoutCmd(
const DeviceCmd& cmd);
203 bool HandleNewCalibrationCmd(
const DeviceCmd& cmd);
204 bool HandleNewCSPCmd(
const DeviceCmd& cmd);
205 bool HandleNewCSVCmd(
const DeviceCmd& cmd);
206 bool HandleNewCSTCmd(
const DeviceCmd& cmd);
207 bool HandleNewProfPosCmd(
const DeviceCmd& cmd);
208 bool HandleNewProfVelCmd(
const DeviceCmd& cmd);
209 bool HandleNewProfTorqueCmd(
const DeviceCmd& cmd);
211 bool IsIdleFaultConditionMet();
212 FaultType ProcessFaulted();
213 FaultType ProcessHalted();
214 FaultType ProcessHolding();
215 FaultType ProcessCS();
216 FaultType ProcessCalMoveToHardstop();
217 FaultType ProcessCalAtHardstop();
218 FaultType ProcessCalUpdatePosition();
219 FaultType ProcessCalMoveToSoftstop();
221 bool GSModeFromString(std::string gs_mode_string,
222 jsd_elmo_gain_scheduling_mode_t& gs_mode);
224 virtual bool ParseSpecializedYamlParams(
const YAML::Node& node);
226 virtual void PopulateJsdSlaveConfig() = 0;
227 virtual void PopulateState() = 0;
229 virtual bool HandleNewProfPosCmdImpl(
const DeviceCmd& cmd) = 0;
230 virtual bool HandleNewProfVelCmdImpl(
const DeviceCmd& cmd) = 0;
231 virtual bool HandleNewProfTorqueCmdImpl(
const DeviceCmd& cmd) = 0;
233 virtual FaultType ProcessProfPosDisengaging() = 0;
234 virtual FaultType ProcessProfPos() = 0;
235 virtual FaultType ProcessProfVelDisengaging() = 0;
236 virtual FaultType ProcessProfVel() = 0;
237 virtual FaultType ProcessProfTorqueDisengaging() = 0;
238 virtual FaultType ProcessProfTorque() = 0;
240 virtual void ElmoSetConfig();
241 virtual void ElmoRead() = 0;
242 virtual void ElmoClearErrors() = 0;
243 virtual void ElmoFault() = 0;
244 virtual void ElmoReset() = 0;
245 virtual void ElmoSetPeakCurrent(
double current) = 0;
246 virtual void ElmoSetDigitalOutput(uint8_t digital_output_index,
247 uint8_t output_level) = 0;
248 virtual void ElmoSetUnitMode(int32_t mode, uint16_t app_id) = 0;
249 virtual void ElmoSetGainSchedulingMode(jsd_elmo_gain_scheduling_mode_t mode,
250 uint16_t app_id) = 0;
251 virtual void ElmoSetGainSchedulingIndex(uint16_t index) = 0;
252 virtual void ElmoCSP(
const jsd_elmo_motion_command_csp_t& jsd_csp_cmd) = 0;
253 virtual void ElmoCSV(
const jsd_elmo_motion_command_csv_t& jsd_csv_cmd) = 0;
254 virtual void ElmoCST(
const jsd_elmo_motion_command_cst_t& jsd_cst_cmd) = 0;
255 virtual void ElmoHalt() = 0;
256 virtual void ElmoProcess() = 0;
258 virtual double GetActualVelocity() = 0;
259 virtual double GetElmoActualPosition() = 0;
260 virtual jsd_elmo_state_machine_state_t GetElmoStateMachineState() = 0;
261 virtual bool IsStoEngaged() = 0;
263 double overall_reduction_ = 1.0;
265 ActuatorCalibrateCmd cal_cmd_ = {};
267 bool actuator_absolute_encoder_ =
false;
268 int32_t elmo_pos_offset_cnts_ = 1;
270 double csp_interpolation_offset_time_ = 0.0;
271 size_t csp_cycles_delay_ = 4;
272 size_t csp_cycles_stale_ = 10;
bool compute_power_
Definition actuator.h:162
void SetExplicitInterpolationTimestampSource(ActuatorExplicitInterpolationTimestamp source)
Definition actuator.h:86
bool SetOutputPosition(double position)
Definition actuator.cc:515
const ActuatorParams & GetParams()
Definition actuator.h:144
double ComputePower(double actual_velocity, double actual_current, bool motor_is_on)
Definition actuator.cc:832
DeviceCmd last_cmd_
Definition actuator.h:177
static std::string StateMachineStateToString(ActuatorStateMachineState sms)
Definition actuator.cc:617
ActuatorParams params_
Definition actuator.h:173
double EuToCnts(double eu)
Definition actuator.cc:534
jsd_elmo_gain_scheduling_mode_t ctrl_gs_mode_
Definition actuator.h:165
void SetExplicitInterpolationCyclesDelay(size_t cycles_delay)
Definition actuator.h:91
static std::string GetJSDFaultCodeAsString(const DeviceState &state)
Definition actuator.cc:763
int32_t PosEuToCnts(double eu)
Definition actuator.cc:543
double last_transition_time_
Definition actuator.h:171
void SetInterpolationCyclesStale(size_t cycles)
Definition actuator.h:101
static bool IsJsdFaultCodePresent(const DeviceState &state)
Definition actuator.cc:782
void Fault() override
Definition actuator.cc:494
double prof_disengaging_timeout_
Definition actuator.h:188
double PosCntsToEu(int32_t cnts)
Definition actuator.cc:539
fastcat_trap_t trap_
Definition actuator.h:172
void SetExplicitInterpolationAlgorithm(ActuatorExplicitInterpolationAlgorithm algorithm)
Definition actuator.h:81
void Reset() override
Definition actuator.cc:503
FaultType ProcessProfPosTrapImpl()
Definition actuator_fsm_helpers.cc:622
jsd_slave_config_t jsd_slave_config_
Definition actuator.h:168
bool IsMotionFaultConditionMet()
Definition actuator_fsm_helpers.cc:537
double CntsToEu(int32_t cnts)
Definition actuator.cc:530
bool Write(DeviceCmd &cmd) override
Definition actuator.cc:235
Actuator()
Definition actuator.cc:19
static std::string GetFastcatFaultCodeAsString(const DeviceState &state)
Definition actuator.cc:703
jsd_elmo_state_machine_state_t last_elmo_state_machine_state_
Definition actuator.h:179
ActuatorStateMachineState actuator_sms_
Definition actuator.h:170
static double GetActualPosition(const DeviceState &state)
Definition actuator.cc:804
ActuatorFastcatFault fastcat_fault_
Definition actuator.h:175
bool HasAbsoluteEncoder()
Definition actuator.cc:525
void TransitionToState(ActuatorStateMachineState sms)
Definition actuator.cc:606
double ComputeTargetPosProfPosCmd(const DeviceCmd &cmd)
Definition actuator.cc:820
bool ConfigFromYaml(const YAML::Node &node) override
Definition actuator.cc:25
bool Read() override
Definition actuator.cc:228
FaultType Process() override
Definition actuator.cc:425
Definition jsd_device_base.h:16
Definition ring_buffer.h:13
Definition device_base.h:18
ActuatorExplicitInterpolationTimestamp
Definition actuator.h:62
@ ACTUATOR_EXPLICIT_INTERPOLATION_TIMESTAMP_FASTCAT_CLOCK
Definition actuator.h:64
@ ACTUATOR_EXPLICIT_INTERPOLATION_TIMESTAMP_CSP_MESSAGE
Definition actuator.h:63
ActuatorStateMachineState
Definition actuator.h:17
@ ACTUATOR_SMS_CSV
Definition actuator.h:28
@ ACTUATOR_SMS_CST
Definition actuator.h:29
@ ACTUATOR_SMS_PROF_TORQUE_DISENGAGING
Definition actuator.h:26
@ ACTUATOR_SMS_CAL_MOVE_TO_HARDSTOP
Definition actuator.h:30
@ ACTUATOR_SMS_CAL_AT_HARDSTOP
Definition actuator.h:32
@ ACTUATOR_SMS_FAULTED
Definition actuator.h:18
@ ACTUATOR_SMS_PROF_POS
Definition actuator.h:21
@ ACTUATOR_SMS_PROF_VEL_DISENGAGING
Definition actuator.h:24
@ ACTUATOR_SMS_CAL_MOVE_TO_SOFTSTOP
Definition actuator.h:33
@ ACTUATOR_SMS_PROF_TORQUE
Definition actuator.h:25
@ ACTUATOR_SMS_CSP
Definition actuator.h:27
@ ACTUATOR_SMS_HALTED
Definition actuator.h:19
@ ACTUATOR_SMS_PROF_POS_DISENGAGING
Definition actuator.h:22
@ ACTUATOR_SMS_HOLDING
Definition actuator.h:20
@ ACTUATOR_SMS_CAL_UPDATE_POSITION
Definition actuator.h:31
@ ACTUATOR_SMS_PROF_VEL
Definition actuator.h:23
ActuatorFastcatFault
Definition actuator.h:41
@ ACTUATOR_FASTCAT_FAULT_INVALID_ELMO_SMS_DURING_MOTION
Definition actuator.h:50
@ ACTUATOR_FASTCAT_FAULT_OKAY
Definition actuator.h:42
@ ACTUATOR_FASTCAT_FAULT_INVALID_CAL_MOTION_RANGE
Definition actuator.h:47
@ ACTUATOR_FASTCAT_FAULT_CAL_RESET_TIMEOUT_EXCEEDED
Definition actuator.h:53
@ ACTUATOR_FASTCAT_FAULT_INVALID_CMD_DURING_CAL
Definition actuator.h:46
@ ACTUATOR_FASTCAT_FAULT_BRAKE_DISENGAGE_TIMEOUT_EXCEEDED
Definition actuator.h:51
@ ACTUATOR_FASTCAT_FAULT_CMD_LIMIT_EXCEEDED
Definition actuator.h:44
@ ACTUATOR_FASTCAT_FAULT_INVALID_CMD_DURING_MOTION
Definition actuator.h:45
@ ACTUATOR_FASTCAT_FAULT_PROF_POS_CMD_ACK_TIMEOUT_EXCEEDED
Definition actuator.h:54
@ ACTUATOR_FASTCAT_FAULT_NO_HARDSTOP_DURING_CAL
Definition actuator.h:52
@ ACTUATOR_FASTCAT_FAULT_STO_ENGAGED
Definition actuator.h:49
ActuatorType
Definition actuator.h:36
@ ACTUATOR_TYPE_PRISMATIC
Definition actuator.h:38
@ ACTUATOR_TYPE_REVOLUTE
Definition actuator.h:37
ActuatorExplicitInterpolationAlgorithm
Definition actuator.h:57
@ ACTUATOR_EXPLICIT_INTERPOLATION_ALGORITHM_LINEAR
Definition actuator.h:59
@ ACTUATOR_EXPLICIT_INTERPOLATION_ALGORITHM_CUBIC
Definition actuator.h:58
Definition actuator.h:110
double holding_duration_sec
Definition actuator.h:130
double max_speed_eu_per_sec
Definition actuator.h:117
bool prof_pos_hold
Definition actuator.h:141
double elmo_brake_engage_msec
Definition actuator.h:131
double pos_tracking_error_eu
Definition actuator.h:121
double continuous_current_limit_amps
Definition actuator.h:124
double peak_current_limit_amps
Definition actuator.h:122
double smooth_factor
Definition actuator.h:135
int64_t elmo_crc
Definition actuator.h:133
double high_pos_cmd_limit_eu
Definition actuator.h:128
double high_pos_cal_limit_eu
Definition actuator.h:129
double over_speed_multiplier
Definition actuator.h:119
double peak_current_time_sec
Definition actuator.h:123
double low_pos_cal_limit_eu
Definition actuator.h:126
double vel_tracking_error_eu_per_sec
Definition actuator.h:120
double elmo_drive_max_cur_limit_amps
Definition actuator.h:134
double max_accel_eu_per_sec2
Definition actuator.h:118
std::string actuator_type_str
Definition actuator.h:111
double motor_encoder_gear_ratio
Definition actuator.h:139
double elmo_brake_disengage_msec
Definition actuator.h:132
double brake_power
Definition actuator.h:138
double gear_ratio
Definition actuator.h:115
std::string ctrl_gs_mode_str
Definition actuator.h:114
double low_pos_cmd_limit_eu
Definition actuator.h:127
double torque_constant
Definition actuator.h:136
double counts_per_rev
Definition actuator.h:116
double torque_slope_amps_per_sec
Definition actuator.h:125
bool actuator_absolute_encoder
Definition actuator.h:140
double winding_resistance
Definition actuator.h:137