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;
137 int result = COMM_TX_FAIL;
144 _fake_data->full_id_list.emplace_back(new_id);
146 result = COMM_SUCCESS;
149 const auto it =
_fake_data->stepper_registers.find(
id);
150 if (it !=
_fake_data->stepper_registers.end())
152 std::swap(
_fake_data->stepper_registers[new_id], it->second);
153 result = COMM_SUCCESS;
156 result = COMM_TX_FAIL;
170 version =
_fake_data->stepper_registers.at(
id).firmware;
185 pos =
_fake_data->stepper_registers.at(
id).min_position;
200 pos =
_fake_data->stepper_registers.at(
id).max_position;
216 if (COMM_SUCCESS !=
ping(
id))
231 _fake_data->stepper_registers.at(
id).position = position;
247 _fake_data->stepper_registers.at(
id).velocity = velocity;
262 std::set<uint8_t> countSet;
265 for (
auto &
id : id_list)
267 auto result = countSet.insert(
id);
282 if (id_list.size() != position_list.size())
286 std::set<uint8_t> countSet;
288 for (
size_t i = 0; i < id_list.size(); ++i)
290 if (
_fake_data->dxl_registers.count(id_list.at(i)))
291 _fake_data->dxl_registers.at(id_list.at(i)).position = position_list.at(i);
292 else if (
_fake_data->stepper_registers.count(id_list.at(i)))
293 _fake_data->stepper_registers.at(id_list.at(i)).position = position_list.at(i);
295 return COMM_TX_ERROR;
297 auto result = countSet.insert(id_list.at(i));
313 std::set<uint8_t> countSet;
316 for (
auto &
id : id_list)
318 auto result = countSet.insert(
id);
336 present_position =
_fake_data->stepper_registers.at(
id).position;
351 present_velocity =
_fake_data->stepper_registers.at(
id).velocity;
364 temperature =
_fake_data->stepper_registers.at(
id).temperature;
379 voltage =
_fake_data->stepper_registers.at(
id).voltage;
393 hardware_error_status = 0;
405 std::set<uint8_t> countSet;
407 position_list.clear();
408 for (
auto &
id : id_list)
411 position_list.emplace_back(
_fake_data->dxl_registers.at(
id).position);
412 else if (
_fake_data->stepper_registers.count(
id))
413 position_list.emplace_back(
_fake_data->stepper_registers.at(
id).position);
417 auto result = countSet.insert(
id);
432 std::set<uint8_t> countSet;
434 velocity_list.clear();
435 for (
auto &
id : id_list)
438 velocity_list.emplace_back(
_fake_data->dxl_registers.at(
id).velocity);
439 else if (
_fake_data->stepper_registers.count(
id))
440 velocity_list.emplace_back(
_fake_data->stepper_registers.at(
id).velocity);
444 auto result = countSet.insert(
id);
459 std::set<uint8_t> countSet;
461 data_array_list.clear();
462 for (
auto &
id : id_list)
466 std::array<uint32_t, 2> blocks{};
468 blocks.at(0) =
_fake_data->stepper_registers.at(
id).velocity;
469 blocks.at(1) =
_fake_data->stepper_registers.at(
id).position;
471 data_array_list.emplace_back(blocks);
475 std::array<uint32_t, 2> blocks{};
477 blocks.at(0) =
_fake_data->dxl_registers.at(
id).velocity;
478 blocks.at(1) =
_fake_data->dxl_registers.at(
id).position;
480 data_array_list.emplace_back(blocks);
485 auto result = countSet.insert(
id);
500 std::set<uint8_t> countSet;
502 firmware_list.clear();
503 for (
auto &
id : id_list)
506 firmware_list.emplace_back(
_fake_data->dxl_registers.at(
id).firmware);
507 else if (
_fake_data->stepper_registers.count(
id))
508 firmware_list.emplace_back(
_fake_data->stepper_registers.at(
id).firmware);
512 auto result = countSet.insert(
id);
527 std::set<uint8_t> countSet;
529 temperature_list.clear();
530 for (
auto &
id : id_list)
533 temperature_list.emplace_back(
_fake_data->dxl_registers.at(
id).temperature);
534 else if (
_fake_data->stepper_registers.count(
id))
535 temperature_list.emplace_back(
_fake_data->stepper_registers.at(
id).temperature);
537 temperature_list.emplace_back(
_fake_data->end_effector.temperature);
541 auto result = countSet.insert(
id);
556 std::set<uint8_t> countSet;
558 voltage_list.clear();
559 for (
auto &
id : id_list)
562 voltage_list.emplace_back(
_fake_data->dxl_registers.at(
id).voltage / 10);
563 else if (
_fake_data->stepper_registers.count(
id))
564 voltage_list.emplace_back(
_fake_data->stepper_registers.at(
id).voltage / 1000);
566 voltage_list.emplace_back(
_fake_data->end_effector.voltage / 1000);
570 auto result = countSet.insert(
id);
585 std::set<uint8_t> countSet;
587 voltage_list.clear();
588 for (
auto &
id : id_list)
591 voltage_list.emplace_back(
_fake_data->dxl_registers.at(
id).voltage);
592 else if (
_fake_data->stepper_registers.count(
id))
593 voltage_list.emplace_back(
_fake_data->stepper_registers.at(
id).voltage);
595 voltage_list.emplace_back(
_fake_data->end_effector.voltage);
599 auto result = countSet.insert(
id);
616 std::set<uint8_t> countSet;
618 for (
auto &
id : id_list)
622 double voltage =
_fake_data->dxl_registers.at(
id).voltage;
623 uint8_t temperature =
_fake_data->dxl_registers.at(
id).temperature;
624 data_list.emplace_back(std::make_pair(voltage, temperature));
626 else if (
_fake_data->stepper_registers.count(
id))
628 double voltage =
_fake_data->stepper_registers.at(
id).voltage;
629 uint8_t temperature =
_fake_data->stepper_registers.at(
id).temperature;
630 data_list.emplace_back(std::make_pair(voltage, temperature));
634 double voltage =
_fake_data->end_effector.voltage;
635 uint8_t temperature =
_fake_data->end_effector.temperature;
636 data_list.emplace_back(std::make_pair(voltage, temperature));
641 auto result = countSet.insert(
id);
656 std::set<uint8_t> countSet;
658 hw_error_list.clear();
659 for (
auto &
id : id_list)
661 hw_error_list.emplace_back(0);
662 auto result = countSet.insert(
id);
676 mode =
_fake_data->stepper_registers.at(
id).operating_mode;
685 _fake_data->stepper_registers.at(
id).operating_mode = mode;
699 int result = COMM_RX_FAIL;
704 data.emplace_back(
_fake_data->stepper_registers.at(
id).v_start);
705 data.emplace_back(
_fake_data->stepper_registers.at(
id).a_1);
706 data.emplace_back(
_fake_data->stepper_registers.at(
id).v_1);
707 data.emplace_back(
_fake_data->stepper_registers.at(
id).a_max);
708 data.emplace_back(
_fake_data->stepper_registers.at(
id).v_max);
709 data.emplace_back(
_fake_data->stepper_registers.at(
id).d_max);
710 data.emplace_back(
_fake_data->stepper_registers.at(
id).d_1);
711 data.emplace_back(
_fake_data->stepper_registers.at(
id).v_stop);
713 result = COMM_SUCCESS;
727 int result = COMM_RX_FAIL;
731 _fake_data->stepper_registers.at(
id).v_start = data.at(0);
732 _fake_data->stepper_registers.at(
id).a_1 = data.at(1);
733 _fake_data->stepper_registers.at(
id).v_1 = data.at(2);
734 _fake_data->stepper_registers.at(
id).a_max = data.at(3);
735 _fake_data->stepper_registers.at(
id).v_max = data.at(4);
736 _fake_data->stepper_registers.at(
id).d_max = data.at(5);
737 _fake_data->stepper_registers.at(
id).d_1 = data.at(6);
738 _fake_data->stepper_registers.at(
id).v_stop = data.at(7);
740 result = COMM_SUCCESS;
753 if (COMM_SUCCESS !=
ping(
id))
778 if (COMM_SUCCESS !=
ping(
id))
807 std::set<uint8_t> countSet;
810 for (
auto &
id : id_list)
813 auto result = countSet.insert(
id);
829 if (COMM_SUCCESS !=
ping(
id))
844 std::set<uint8_t> countSet;
846 abs_position.clear();
847 for (
auto &
id : id_list)
850 abs_position.emplace_back(
_fake_data->stepper_registers.at(
id).homing_abs_position);
854 auto result = countSet.insert(
id);
869 if (id_list.size() != abs_position.size())
872 std::set<uint8_t> countSet;
874 for (
size_t i = 0; i < id_list.size(); ++i)
876 if (
_fake_data->stepper_registers.count(id_list.at(i)))
877 _fake_data->stepper_registers.at(id_list.at(i)).homing_abs_position = abs_position.at(i);
879 return COMM_TX_ERROR;
881 auto result = countSet.insert(id_list.at(i));