mirror of
https://github.com/BotChain-Robots/control.git
synced 2026-07-08 13:47:21 +02:00
Allow multiple robots on the same network (#5)
* Support multiple bots on the same network * Bulk OTa * Bugfixes
This commit is contained in:
@@ -61,7 +61,7 @@ class Module {
|
||||
uint8_t m_device_id;
|
||||
ModuleType m_module_type;
|
||||
Messaging::ConnectionType m_connection_type;
|
||||
uint8_t m_leader;
|
||||
std::atomic<uint8_t> m_leader{0};
|
||||
std::chrono::time_point<std::chrono::system_clock> m_last_updated;
|
||||
std::vector<neighbour> m_neighbours;
|
||||
std::shared_ptr<MessagingInterface> m_messaging_interface;
|
||||
|
||||
@@ -10,13 +10,13 @@
|
||||
|
||||
class Actuator : public Module {
|
||||
public:
|
||||
explicit Actuator(uint8_t device_id) : Module(device_id) {};
|
||||
explicit Actuator(uint8_t device_id) : Module(device_id){};
|
||||
|
||||
Actuator(uint8_t device_id, ModuleType module_type) : Module(device_id, module_type) {};
|
||||
Actuator(uint8_t device_id, ModuleType module_type) : Module(device_id, module_type){};
|
||||
|
||||
Actuator(uint8_t device_id, ModuleType module_type, Messaging::ConnectionType connection_type,
|
||||
uint8_t leader)
|
||||
: Module(device_id, module_type, connection_type, leader) {};
|
||||
: Module(device_id, module_type, connection_type, leader){};
|
||||
|
||||
protected:
|
||||
virtual std::vector<uint8_t> get_actuation_message() = 0;
|
||||
|
||||
@@ -16,7 +16,7 @@ class PositionalActuator1D final : public Actuator {
|
||||
public:
|
||||
PositionalActuator1D(uint8_t device_id, ModuleType type)
|
||||
: Actuator(device_id, type),
|
||||
m_acm_builder(std::make_unique<Flatbuffers::AngleControlMessageBuilder>()) {};
|
||||
m_acm_builder(std::make_unique<Flatbuffers::AngleControlMessageBuilder>()){};
|
||||
|
||||
double get_position() override;
|
||||
void actuate(double position) override;
|
||||
|
||||
@@ -15,6 +15,7 @@ struct ModuleInstance {
|
||||
uint8_t id;
|
||||
ModuleType type;
|
||||
int angle;
|
||||
uint8_t leader;
|
||||
};
|
||||
|
||||
struct ModuleConnectionInstance {
|
||||
|
||||
@@ -19,7 +19,8 @@ LIB_API void cleanup();
|
||||
LIB_API int send_angle_control(int module_id, int angle);
|
||||
LIB_API int send_string_control(int module_id, const char *string);
|
||||
LIB_API double get_distance_control(int module_id);
|
||||
LIB_API char *get_configuration(int *size_out);
|
||||
LIB_API char *get_configuration(int *size_out, int leader_id);
|
||||
LIB_API const uint8_t *get_leaders(int *length);
|
||||
|
||||
LIB_API bool remote_call_c(uint8_t function_tag, uint8_t module, const uint8_t *params,
|
||||
uint16_t params_len, uint8_t *out_buffer, uint16_t out_buffer_capacity,
|
||||
|
||||
@@ -93,6 +93,9 @@ class RobotController {
|
||||
*/
|
||||
void resetModules();
|
||||
|
||||
bool select_leader(uint8_t leader_id);
|
||||
std::vector<uint8_t> get_leaders();
|
||||
|
||||
/**
|
||||
* \brief Poll for devices accessible to the PC.
|
||||
*
|
||||
@@ -103,6 +106,8 @@ class RobotController {
|
||||
std::optional<std::unique_ptr<std::vector<uint8_t>>>
|
||||
remote_call(uint8_t function_tag, uint8_t module, const std::vector<uint8_t> ¶meters);
|
||||
|
||||
uint8_t get_selected_leader();
|
||||
|
||||
private:
|
||||
std::shared_ptr<spdlog::logger> m_logger;
|
||||
std::unordered_map<uint8_t, std::shared_ptr<Module>> m_id_to_module{};
|
||||
@@ -118,6 +123,7 @@ class RobotController {
|
||||
std::thread m_configuration_loop;
|
||||
std::thread m_sensor_loop;
|
||||
std::thread m_expiry_looop;
|
||||
std::atomic<uint8_t> m_selected_leader{0};
|
||||
|
||||
void metadata_loop();
|
||||
void transmit_loop();
|
||||
|
||||
Reference in New Issue
Block a user