24#include <condition_variable>
30#include "rclcpp/rclcpp.hpp"
64 int homing_timeout_seconds)
66 switching_state_(switching_state),
68 state_switch_timeout_(5),
69 homing_timeout_seconds_(homing_timeout_seconds)
71 this->driver = driver;
169 template <
typename T,
typename... Args>
172 return mode_allocators_
173 .insert(std::make_pair(
175 [args..., mode,
this]()
177 if (isModeSupportedByDevice(mode)) registerMode(mode, ModeSharedPtr(new T(args...)));
199 double get_speed()
const {
return (
double)this->driver->universal_get_value<
int32_t>(0x606C, 0); }
202 return (
double)this->driver->universal_get_value<
int32_t>(0x6064, 0);
207 this->enable_diagnostics_.store(
enable);
208 this->diag_collector_ =
status;
220 std::atomic<uint16_t> status_word_;
222 std::mutex cw_mutex_;
223 std::atomic<bool> start_fault_reset_;
224 std::atomic<State402::InternalState> target_state_;
228 std::mutex map_mutex_;
229 std::unordered_map<uint16_t, ModeSharedPtr> modes_;
230 typedef std::function<
void()> AllocFuncType;
231 std::unordered_map<uint16_t, AllocFuncType> mode_allocators_;
235 std::condition_variable mode_cond_;
236 std::mutex mode_mutex_;
238 const bool monitor_mode_;
239 const std::chrono::seconds state_switch_timeout_;
240 const int homing_timeout_seconds_;
242 std::shared_ptr<LelyDriverBridge> driver;
243 const uint16_t status_word_entry_index = 0x6041;
244 const uint16_t control_word_entry_index = 0x6040;
245 const uint16_t op_mode_display_index = 0x6061;
246 const uint16_t op_mode_index = 0x6060;
247 const uint16_t supported_drive_modes_index = 0x6502;
250 std::atomic<bool> enable_diagnostics_;
251 std::shared_ptr<DiagnosticsCollector> diag_collector_;
@ CW_Operation_mode_specific1
Definition command.hpp:65
@ CW_Operation_mode_specific0
Definition command.hpp:64
@ CW_Operation_mode_specific2
Definition command.hpp:66
Definition mode_forward_helper.hpp:31
bool handleDisable()
Disable the drive.
void handleDiag()
Updates the device diagnostic information.
bool handleShutdown()
Shutdowns the drive.
bool handleHalt()
Executes a quickstop.
double get_position() const
Definition motor.hpp:200
virtual bool isModeSupported(uint16_t mode)
Check if Operation Mode is supported.
bool handleEnable()
Enable the drive.
bool handleInit()
Initialise the drive.
double get_speed() const
Definition motor.hpp:199
bool handleRecover()
Recovers the device from fault.
Motor402(std::shared_ptr< LelyDriverBridge > driver, ros2_canopen::State402::InternalState switching_state, int homing_timeout_seconds)
Definition motor.hpp:62
virtual bool enterModeAndWait(uint16_t mode)
Enter Operation Mode.
void handleRead()
Read objects of the drive.
virtual bool setTarget(double val)
Set target.
virtual uint16_t getMode()
Get current Mode.
void handleWrite()
Writes objects to the drive.
virtual void registerDefaultModes()
Tries to register the standard operation modes defined in cia402.
Definition motor.hpp:186
bool registerMode(uint16_t mode, Args &&... args)
Register a new operation mode for the drive.
Definition motor.hpp:170
void set_diagnostic_status_msgs(std::shared_ptr< DiagnosticsCollector > status, bool enable)
Definition motor.hpp:205
Motor Base Class.
Definition base.hpp:32
@ Profiled_Velocity
Definition base.hpp:42
@ Cyclic_Synchronous_Velocity
Definition base.hpp:48
@ Cyclic_Synchronous_Torque
Definition base.hpp:49
@ Cyclic_Synchronous_Position
Definition base.hpp:47
@ Profiled_Position
Definition base.hpp:40
@ Homing
Definition base.hpp:45
@ Profiled_Torque
Definition base.hpp:43
@ Interpolated_Position
Definition base.hpp:46
@ Velocity
Definition base.hpp:41
InternalState
Definition state.hpp:50
Definition configuration_manager.hpp:28
ModeForwardHelper< MotorBase::Cyclic_Synchronous_Position, int32_t, 0x607A, 0, 0 > CyclicSynchronousPositionMode
Definition motor.hpp:44
std::shared_ptr< Mode > ModeSharedPtr
Definition mode.hpp:45
ModeForwardHelper< MotorBase::Cyclic_Synchronous_Velocity, int32_t, 0x60FF, 0, 0 > CyclicSynchronousVelocityMode
Definition motor.hpp:46
ModeForwardHelper< MotorBase::Profiled_Velocity, int32_t, 0x60FF, 0, 0 > ProfiledVelocityMode
Definition motor.hpp:41
ModeForwardHelper< MotorBase::Profiled_Torque, int16_t, 0x6071, 0, 0 > ProfiledTorqueMode
Definition motor.hpp:42
ModeForwardHelper< MotorBase::Cyclic_Synchronous_Torque, int16_t, 0x6071, 0, 0 > CyclicSynchronousTorqueMode
Definition motor.hpp:48