18 #include "dynamixel_sdk/packet_handler.h"
25 #include <type_traits>
38 for (
auto const &imap :
_fake_data->dxl_registers)
48 return "Mock Dynamixel Driver (OK)";
76 model_number =
_fake_data->dxl_registers.at(
id).model_number;
91 if (ping_result == COMM_SUCCESS)
192 auto node =
_fake_data->dxl_registers.extract(it);
194 _fake_data->dxl_registers.insert(std::move(node));
231 (void)temperature_limit;
259 version =
_fake_data->dxl_registers.at(
id).firmware;
274 pos =
_fake_data->dxl_registers.at(
id).min_position;
289 pos =
_fake_data->dxl_registers.at(
id).max_position;
306 _fake_data->dxl_registers.at(
id).torque = torque_enable;
307 else if (
_fake_data->stepper_registers.count(
id))
308 _fake_data->stepper_registers.at(
id).torque = torque_enable;
310 return COMM_TX_ERROR;
324 _fake_data->dxl_registers.at(
id).position = position;
339 _fake_data->dxl_registers.at(
id).velocity = velocity;
354 int res = COMM_RX_FAIL;
370 const std::vector<uint8_t> &torque_percentage_list)
373 std::set<uint8_t> countSet;
375 for (
size_t i = 0; i < id_list.size(); i++)
377 auto result = countSet.insert(id_list.at(i));
392 const std::vector<uint32_t> &position_list)
394 if (id_list.size() != position_list.size())
398 std::set<uint8_t> countSet;
399 for (
size_t i = 0; i < id_list.size(); i++)
401 if (
_fake_data->dxl_registers.count(id_list.at(i)))
402 _fake_data->dxl_registers.at(id_list.at(i)).position = position_list.at(i);
403 else if (
_fake_data->stepper_registers.count(id_list.at(i)))
404 _fake_data->stepper_registers.at(id_list.at(i)).position = position_list.at(i);
406 return COMM_TX_ERROR;
409 auto result = countSet.insert(id_list[i]);
423 const std::vector<uint32_t> &velocity_list)
425 if (id_list.size() != velocity_list.size())
429 std::set<uint8_t> countSet;
430 for (
size_t i = 0; i < id_list.size(); i++)
432 if (!
_fake_data->dxl_registers.count(id_list.at(i)))
433 return COMM_TX_ERROR;
435 _fake_data->dxl_registers.at(id_list.at(i)).velocity = velocity_list.at(i);
437 auto result = countSet.insert(id_list[i]);
450 data_list.emplace_back(0);
451 data_list.emplace_back(0);
467 present_position =
_fake_data->dxl_registers.at(
id).position;
482 present_velocity =
_fake_data->dxl_registers.at(
id).velocity;
495 temperature =
_fake_data->dxl_registers.at(
id).temperature;
510 voltage =
_fake_data->dxl_registers.at(
id).voltage;
527 hardware_error_status = 0;
539 std::set<uint8_t> countSet;
540 for (
auto &
id : id_list)
543 position_list.emplace_back(
_fake_data->dxl_registers.at(
id).position);
544 else if (
_fake_data->stepper_registers.count(
id))
545 position_list.emplace_back(
_fake_data->stepper_registers.at(
id).position);
549 auto result = countSet.insert(
id);
564 std::set<uint8_t> countSet;
565 for (
auto &
id : id_list)
568 velocity_list.emplace_back(
_fake_data->dxl_registers.at(
id).velocity);
569 else if (
_fake_data->stepper_registers.count(
id))
570 velocity_list.emplace_back(
_fake_data->stepper_registers.at(
id).velocity);
572 return COMM_TX_ERROR;
573 auto result = countSet.insert(
id);
588 std::vector<std::array<uint32_t, 2>> &data_array_list)
590 std::set<uint8_t> countSet;
591 data_array_list.clear();
592 for (
auto &
id : id_list)
596 std::array<uint32_t, 2> blocks{};
598 blocks.at(0) =
_fake_data->dxl_registers.at(
id).velocity;
599 blocks.at(1) =
_fake_data->dxl_registers.at(
id).position;
601 data_array_list.emplace_back(blocks);
603 else if (
_fake_data->stepper_registers.count(
id))
605 std::array<uint32_t, 2> blocks{};
607 blocks.at(0) =
_fake_data->stepper_registers.at(
id).velocity;
608 blocks.at(1) =
_fake_data->stepper_registers.at(
id).position;
610 data_array_list.emplace_back(blocks);
614 auto result = countSet.insert(
id);
629 std::set<uint8_t> countSet;
630 for (
auto &
id : id_list)
633 return COMM_TX_ERROR;
635 firmware_list.emplace_back(
_fake_data->dxl_registers.at(
id).firmware);
637 auto result = countSet.insert(
id);
652 std::set<uint8_t> countSet;
653 for (
auto &
id : id_list)
656 return COMM_TX_ERROR;
658 temperature_list.emplace_back(
_fake_data->dxl_registers.at(
id).temperature);
660 auto result = countSet.insert(
id);
675 std::set<uint8_t> countSet;
676 for (
auto &
id : id_list)
679 return COMM_TX_ERROR;
681 voltage_list.emplace_back(
_fake_data->dxl_registers.at(
id).voltage);
683 auto result = countSet.insert(
id);
708 std::vector<std::pair<double, uint8_t>> &data_list)
712 std::set<uint8_t> countSet;
714 for (
auto &
id : id_list)
718 double voltage =
_fake_data->dxl_registers.at(
id).voltage;
719 uint8_t temperature =
_fake_data->dxl_registers.at(
id).temperature;
720 data_list.emplace_back(std::make_pair(voltage, temperature));
725 auto result = countSet.insert(
id);
740 std::set<uint8_t> countSet;
741 for (
auto &
id : id_list)
743 hw_error_list.emplace_back(0);
744 auto result = countSet.insert(
id);
759 int result = COMM_RX_FAIL;
764 data.emplace_back(
_fake_data->dxl_registers.at(
id).position_p_gain);
765 data.emplace_back(
_fake_data->dxl_registers.at(
id).position_i_gain);
766 data.emplace_back(
_fake_data->dxl_registers.at(
id).position_d_gain);
767 data.emplace_back(
_fake_data->dxl_registers.at(
id).velocity_p_gain);
768 data.emplace_back(
_fake_data->dxl_registers.at(
id).velocity_i_gain);
769 data.emplace_back(
_fake_data->dxl_registers.at(
id).ff1_gain);
770 data.emplace_back(
_fake_data->dxl_registers.at(
id).ff2_gain);
772 result = COMM_SUCCESS;
786 int result = COMM_RX_FAIL;
790 _fake_data->dxl_registers.at(
id).position_p_gain = data.at(0);
791 _fake_data->dxl_registers.at(
id).position_i_gain = data.at(1);
792 _fake_data->dxl_registers.at(
id).position_d_gain = data.at(2);
793 _fake_data->dxl_registers.at(
id).velocity_p_gain = data.at(3);
794 _fake_data->dxl_registers.at(
id).velocity_i_gain = data.at(4);
795 _fake_data->dxl_registers.at(
id).ff1_gain = data.at(5);
796 _fake_data->dxl_registers.at(
id).ff2_gain = data.at(6);
798 result = COMM_SUCCESS;
815 return COMM_TX_ERROR;
831 return COMM_TX_ERROR;
850 return COMM_TX_ERROR;
865 std::set<uint8_t> countSet;
866 for (
auto &
id : id_list)
869 return COMM_TX_ERROR;
870 auto result = countSet.insert(
id);
888 return COMM_TX_ERROR;
903 std::set<uint8_t> countSet;
904 for (
auto &
id : id_list)
907 return COMM_TX_ERROR;
909 auto result = countSet.insert(
id);
956 for (
size_t i = 0; i < id_list.size(); i++)
957 load_list.emplace_back(0);
968 return std::to_string(fw_version);