18 #include "dynamixel_sdk/packet_handler.h"
27 #include <type_traits>
52 for (
auto const &imap :
_fake_data->stepper_registers)
59 std::cout <<
"ERROR : Fake data not initialized" << std::endl;
94 model_number =
_fake_data->stepper_registers.at(
id).model_number;
105 uint16_t model_number = 0;
138 int result = COMM_TX_FAIL;
145 _fake_data->full_id_list.emplace_back(new_id);
147 result = COMM_SUCCESS;
150 const auto it =
_fake_data->stepper_registers.find(
id);
151 if (it !=
_fake_data->stepper_registers.end())
153 std::swap(
_fake_data->stepper_registers[new_id], it->second);
154 result = COMM_SUCCESS;
157 result = COMM_TX_FAIL;
171 version =
_fake_data->stepper_registers.at(
id).firmware;
186 pos =
_fake_data->stepper_registers.at(
id).min_position;
201 pos =
_fake_data->stepper_registers.at(
id).max_position;
217 if (COMM_SUCCESS !=
ping(
id))
232 _fake_data->stepper_registers.at(
id).position = position;
248 _fake_data->stepper_registers.at(
id).velocity = velocity;
263 std::set<uint8_t> countSet;
266 for (
auto &
id : id_list)
268 auto result = countSet.insert(
id);
283 if (id_list.size() != position_list.size())
287 std::set<uint8_t> countSet;
289 for (
size_t i = 0; i < id_list.size(); ++i)
291 if (
_fake_data->dxl_registers.count(id_list.at(i)))
292 _fake_data->dxl_registers.at(id_list.at(i)).position = position_list.at(i);
293 else if (
_fake_data->stepper_registers.count(id_list.at(i)))
294 _fake_data->stepper_registers.at(id_list.at(i)).position = position_list.at(i);
296 return COMM_TX_ERROR;
298 auto result = countSet.insert(id_list.at(i));
314 std::set<uint8_t> countSet;
317 for (
auto &
id : id_list)
319 auto result = countSet.insert(
id);
337 present_position =
_fake_data->stepper_registers.at(
id).position;
352 present_velocity =
_fake_data->stepper_registers.at(
id).velocity;
365 temperature =
_fake_data->stepper_registers.at(
id).temperature;
380 voltage =
_fake_data->stepper_registers.at(
id).voltage;
394 hardware_error_status = 0;
406 std::set<uint8_t> countSet;
408 position_list.clear();
409 for (
auto &
id : id_list)
412 position_list.emplace_back(
_fake_data->dxl_registers.at(
id).position);
413 else if (
_fake_data->stepper_registers.count(
id))
414 position_list.emplace_back(
_fake_data->stepper_registers.at(
id).position);
418 auto result = countSet.insert(
id);
433 std::set<uint8_t> countSet;
435 velocity_list.clear();
436 for (
auto &
id : id_list)
439 velocity_list.emplace_back(
_fake_data->dxl_registers.at(
id).velocity);
440 else if (
_fake_data->stepper_registers.count(
id))
441 velocity_list.emplace_back(
_fake_data->stepper_registers.at(
id).velocity);
445 auto result = countSet.insert(
id);
460 std::set<uint8_t> countSet;
462 data_array_list.clear();
463 for (
auto &
id : id_list)
467 std::array<uint32_t, 2> blocks{};
469 blocks.at(0) =
_fake_data->stepper_registers.at(
id).velocity;
470 blocks.at(1) =
_fake_data->stepper_registers.at(
id).position;
472 data_array_list.emplace_back(blocks);
476 std::array<uint32_t, 2> blocks{};
478 blocks.at(0) =
_fake_data->dxl_registers.at(
id).velocity;
479 blocks.at(1) =
_fake_data->dxl_registers.at(
id).position;
481 data_array_list.emplace_back(blocks);
486 auto result = countSet.insert(
id);
501 std::set<uint8_t> countSet;
503 firmware_list.clear();
504 for (
auto &
id : id_list)
507 firmware_list.emplace_back(
_fake_data->dxl_registers.at(
id).firmware);
508 else if (
_fake_data->stepper_registers.count(
id))
509 firmware_list.emplace_back(
_fake_data->stepper_registers.at(
id).firmware);
513 auto result = countSet.insert(
id);
528 std::set<uint8_t> countSet;
530 temperature_list.clear();
531 for (
auto &
id : id_list)
534 temperature_list.emplace_back(
_fake_data->dxl_registers.at(
id).temperature);
535 else if (
_fake_data->stepper_registers.count(
id))
536 temperature_list.emplace_back(
_fake_data->stepper_registers.at(
id).temperature);
538 temperature_list.emplace_back(
_fake_data->end_effector.temperature);
542 auto result = countSet.insert(
id);
557 std::set<uint8_t> countSet;
559 voltage_list.clear();
560 for (
auto &
id : id_list)
563 voltage_list.emplace_back(
_fake_data->dxl_registers.at(
id).voltage / 10);
564 else if (
_fake_data->stepper_registers.count(
id))
565 voltage_list.emplace_back(
_fake_data->stepper_registers.at(
id).voltage / 1000);
567 voltage_list.emplace_back(
_fake_data->end_effector.voltage / 1000);
571 auto result = countSet.insert(
id);
586 std::set<uint8_t> countSet;
588 voltage_list.clear();
589 for (
auto &
id : id_list)
592 voltage_list.emplace_back(
_fake_data->dxl_registers.at(
id).voltage);
593 else if (
_fake_data->stepper_registers.count(
id))
594 voltage_list.emplace_back(
_fake_data->stepper_registers.at(
id).voltage);
596 voltage_list.emplace_back(
_fake_data->end_effector.voltage);
600 auto result = countSet.insert(
id);
617 std::set<uint8_t> countSet;
619 for (
auto &
id : id_list)
623 double voltage =
_fake_data->dxl_registers.at(
id).voltage;
624 uint8_t temperature =
_fake_data->dxl_registers.at(
id).temperature;
625 data_list.emplace_back(std::make_pair(voltage, temperature));
627 else if (
_fake_data->stepper_registers.count(
id))
629 double voltage =
_fake_data->stepper_registers.at(
id).voltage;
630 uint8_t temperature =
_fake_data->stepper_registers.at(
id).temperature;
631 data_list.emplace_back(std::make_pair(voltage, temperature));
635 double voltage =
_fake_data->end_effector.voltage;
636 uint8_t temperature =
_fake_data->end_effector.temperature;
637 data_list.emplace_back(std::make_pair(voltage, temperature));
642 auto result = countSet.insert(
id);
657 std::set<uint8_t> countSet;
659 hw_error_list.clear();
660 for (
auto &
id : id_list)
662 hw_error_list.emplace_back(0);
663 auto result = countSet.insert(
id);
677 mode =
_fake_data->stepper_registers.at(
id).operating_mode;
686 _fake_data->stepper_registers.at(
id).operating_mode = mode;
700 int result = COMM_RX_FAIL;
705 data.emplace_back(
_fake_data->stepper_registers.at(
id).v_start);
706 data.emplace_back(
_fake_data->stepper_registers.at(
id).a_1);
707 data.emplace_back(
_fake_data->stepper_registers.at(
id).v_1);
708 data.emplace_back(
_fake_data->stepper_registers.at(
id).a_max);
709 data.emplace_back(
_fake_data->stepper_registers.at(
id).v_max);
710 data.emplace_back(
_fake_data->stepper_registers.at(
id).d_max);
711 data.emplace_back(
_fake_data->stepper_registers.at(
id).d_1);
712 data.emplace_back(
_fake_data->stepper_registers.at(
id).v_stop);
714 result = COMM_SUCCESS;
728 int result = COMM_RX_FAIL;
732 _fake_data->stepper_registers.at(
id).v_start = data.at(0);
733 _fake_data->stepper_registers.at(
id).a_1 = data.at(1);
734 _fake_data->stepper_registers.at(
id).v_1 = data.at(2);
735 _fake_data->stepper_registers.at(
id).a_max = data.at(3);
736 _fake_data->stepper_registers.at(
id).v_max = data.at(4);
737 _fake_data->stepper_registers.at(
id).d_max = data.at(5);
738 _fake_data->stepper_registers.at(
id).d_1 = data.at(6);
739 _fake_data->stepper_registers.at(
id).v_stop = data.at(7);
741 result = COMM_SUCCESS;
754 if (COMM_SUCCESS !=
ping(
id))
779 if (COMM_SUCCESS !=
ping(
id))
808 std::set<uint8_t> countSet;
811 for (
auto &
id : id_list)
814 auto result = countSet.insert(
id);
830 if (COMM_SUCCESS !=
ping(
id))
845 std::set<uint8_t> countSet;
847 abs_position.clear();
848 for (
auto &
id : id_list)
851 abs_position.emplace_back(
_fake_data->stepper_registers.at(
id).homing_abs_position);
855 auto result = countSet.insert(
id);
870 if (id_list.size() != abs_position.size())
873 std::set<uint8_t> countSet;
875 for (
size_t i = 0; i < id_list.size(); ++i)
877 if (
_fake_data->stepper_registers.count(id_list.at(i)))
878 _fake_data->stepper_registers.at(id_list.at(i)).homing_abs_position = abs_position.at(i);
880 return COMM_TX_ERROR;
882 auto result = countSet.insert(id_list.at(i));