Motion Master
Loading...
Searching...
No Matches
mock_master.h
Go to the documentation of this file.
1#pragma once
2
3#include <atomic>
4#include <map>
5#include <random>
6
7#include "ethercat_master.h"
8#include "util.h"
9
10class MockSlave;
11
12class MockMaster : public EthercatMaster {
13 public:
14 explicit MockMaster(uint16_t devices);
15 ~MockMaster() override;
16
22 size_t start() override;
23
27 void stop() override;
28
36 size_t restart() override;
37
44 int32_t execute(uint64_t pending_signals) override;
45
51 bool is_running() override;
52
58 int get_slaves_responding() override;
59
65 std::list<VirtualDevice*> get_slaves() override;
66
72 bool disable_all_slaves() override;
73
74 private:
75 std::map<int32_t, MockSlave*> slaves_;
76 std::atomic_bool running_;
77
78 // Motor simulation
79 std::vector<double> actual_positions_;
80 std::vector<double> actual_velocities_;
81 std::vector<double> actual_torques_;
82
83 std::vector<LowPassFilter> velocity_filters_;
84 std::vector<LowPassFilter> torque_filters_;
85
86 std::random_device random_device_;
87 std::mt19937 random_generator_;
88
89 const double inertia_ = 7.0e-5; // Inertia constant
90 const double friction_ = 5.0e-4; // Friction constant
91 const double sampling_time_ = 1000.0e-6; // One millisecond
92
93 const double a0_ =
94 sampling_time_ / (2 * inertia_ + sampling_time_ * friction_);
95 const double a1_ =
96 sampling_time_ / (2 * inertia_ + sampling_time_ * friction_);
97 const double b1_ = -1 * (sampling_time_ * friction_ - 2 * inertia_) /
98 (2 * inertia_ + sampling_time_ * friction_);
99
100 static uint32_t get_statusword(uint32_t statusword, uint32_t controlword);
101 static uint32_t get_motion_encoder_resolution(MockSlave* mock_slave);
102
103 static bool is_controlword_switch_on(uint32_t control_word);
104 static bool is_controlword_enable_voltage(uint32_t control_word);
105 static bool is_controlword_quick_stop(uint32_t control_word);
106 static bool is_controlword_enable_op(uint32_t control_word);
107 static bool is_controlword_fault_reset(uint32_t control_word);
108 static bool ctrl_shutdown(uint32_t control_word);
109 static bool ctrl_switch_on(uint32_t control_word);
110 static bool ctrl_disable_volt(uint32_t control_word);
111 static bool ctrl_quick_stop(uint32_t control_word);
112 static bool ctrl_disable_op(uint32_t control_word);
113 static bool ctrl_enable_op(uint32_t control_word);
114 static bool ctrl_communication_timeout(uint32_t control_word);
115};
Definition ethercat_master.h:9
int get_slaves_responding() override
Return the number of slaves.
Definition mock_master.cc:253
~MockMaster() override
Definition mock_master.cc:67
bool is_running() override
Definition mock_master.cc:89
MockMaster(uint16_t devices)
Definition mock_master.cc:53
bool disable_all_slaves() override
Switch all slaves to PREOP.
Definition mock_master.cc:263
std::list< VirtualDevice * > get_slaves() override
Get all of the available slaves.
Definition mock_master.cc:255
size_t start() override
Start the mock master.
Definition mock_master.cc:73
int32_t execute(uint64_t pending_signals) override
Main mock master loop function to be executed at one millisecond interval.
Definition mock_master.cc:91
void stop() override
Stop the mock master.
Definition mock_master.cc:81
size_t restart() override
Restart the mock master.
Definition mock_master.cc:87
Definition mock_slave.h:10