16 static constexpr float kProtocolVersion = 2.0;
18 static constexpr int kDefaultBaudrate = 2000000;
20 static constexpr uint16_t kAddrTorqueEnable = 64;
21 static constexpr uint16_t kAddrPresentCurrent = 126;
22 static constexpr uint16_t kAddrPresentVelocity = 128;
23 static constexpr uint16_t kAddrPresentPosition = 132;
24 static constexpr uint16_t kAddrGoalCurrent = 102;
25 static constexpr uint16_t kAddrGoalPosition = 116;
26 static constexpr uint16_t kAddrOperatingMode = 11;
27 static constexpr uint16_t kAddrPresentButtonState = 132;
28 static constexpr uint16_t kAddrGoalVibrationLevel = 102;
30 static constexpr uint16_t kAddrPositionPGain = 84;
31 static constexpr uint16_t kAddrPositionIGain = 82;
32 static constexpr uint16_t kAddrPositionDGain = 80;
34 static constexpr int kTorqueEnable = 1;
35 static constexpr int kTorqueDisable = 0;
37 static constexpr int kCurrentControlMode = 0;
38 static constexpr int kCurrentBasedPositionControlMode = 5;
40 static constexpr int kAddrCurrentTemperature = 146;
68 void SetTorqueConstant(
const std::vector<double>& torque_constant);
72 bool SetBaudRate(
int baudrate);
76 std::optional<std::pair<
int ,
ButtonState>> ReadButtonStatus(
int id);
78 void SendTorqueEnable(
int id,
int onoff);
80 void SetPositionPGain(
int id, uint16_t p_gain);
82 void SetPositionIGain(
int id, uint16_t i_gain);
84 void SetPositionDGain(
int id, uint16_t d_gain);
86 void SetPositionPIDGain(
int id, std::optional<uint16_t> p_gain, std::optional<uint16_t> i_gain,
87 std::optional<uint16_t> d_gain);
89 void SetPositionPIDGain(
int id, uint16_t p_gain, uint16_t i_gain, uint16_t d_gain);
93 std::optional<uint16_t> GetPositionPGain(
int id);
95 std::optional<uint16_t> GetPositionIGain(
int id);
97 std::optional<uint16_t> GetPositionDGain(
int id);
99 std::optional<DynamixelBus::PIDGain> GetPositionPIDGain(
int id);
101 std::optional<int> ReadTorqueEnable(
int id);
103 std::optional<double> ReadEncoder(
int id);
105 void SendGoalPosition(
int id,
int goal_position);
107 std::optional<int> ReadOperatingMode(
int id,
bool use_cache =
false);
109 bool SendOperatingMode(
int id,
int mode);
111 void SendTorque(
int id,
double joint_torque);
113 void SendCurrent(
int id,
double current);
115 std::optional<int> ReadTemperature(
int id);
117 std::optional<std::vector<std::pair<int, int>>> GroupFastSyncRead(
const std::vector<int>& ids,
int addr,
int len);
119 std::optional<std::vector<std::pair<
int ,
double >>> GroupFastSyncReadEncoder(
120 const std::vector<int>& ids);
122 std::optional<std::vector<std::pair<int, int>>> GroupFastSyncReadOperatingMode(
const std::vector<int>& ids,
123 bool use_cache =
false);
125 std::optional<std::vector<std::pair<int, int>>> GroupFastSyncReadTorqueEnable(
const std::vector<int>& ids);
128 std::optional<std::vector<std::pair<int, MotorState>>> GetMotorStates(
const std::vector<int>& ids);
130 void GroupSyncWriteTorqueEnable(
const std::vector<std::pair<int, int>>& id_and_eanble_vector);
132 void GroupSyncWriteTorqueEnable(
const std::vector<int>& ids,
int enable);
134 void GroupSyncWriteOperatingMode(
const std::vector<std::pair<int, int>>& id_and_mode_vector);
136 void GroupSyncWriteSendPosition(
const std::vector<std::pair<int, double>>& id_and_position_vector);
138 void GroupSyncWriteSendTorque(
const std::vector<std::pair<int, double>>& id_and_torque_vector);
140 void SendVibration(
int id,
int level);
143 std::unique_ptr<DynamixelBusImpl> impl_;