dynamixel_tool.cpp
Go to the documentation of this file.
1 /*******************************************************************************
2 * Copyright 2018 ROBOTIS CO., LTD.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *******************************************************************************/
16 
17 /* Authors: Taehun Lim (Darby), Ryan Shim */
18 
19 #include "../../include/dynamixel_workbench_toolbox/dynamixel_tool.h"
20 
21 //===================================================================
22 // Define Serial ID to Namd table
23 //===================================================================
24 typedef struct
25 {
26  uint16_t number;
27  const char* name;
29 
31  {AX_12A, "AX-12A"},
32  {AX_12W, "AX-12W"},
33  {AX_18A, "AX-18A"},
34 
35  {RX_10, "RX-10"},
36  {RX_24F, "RX-24F"},
37  {RX_28, "RX-28"},
38  {RX_64, "RX-64"},
39 
40  {EX_106, "EX-106"},
41 
42  {MX_12W, "MX-12W"},
43  {MX_28, "MX-28"},
44  {MX_28_2, "MX-28-2"},
45  {MX_64, "MX-64"},
46  {MX_64_2, "MX-64-2"},
47  {MX_106, "MX-106"},
48  {MX_106_2, "MX-106-2"},
49 
50  {XL_320, "XL-320"},
51  {XL330_M077, "XL330_M077"},
52  {XL330_M288, "XL330_M288"},
53  {XL430_W250, "XL430-W250"},
54 
55  {XL430_W250_2, "XL430-W250-2"}, // 2XL
56  {XC430_W250_2, "XC430-W250-2"}, // 2XC
57 
58  {XC430_W150, "XC430-W150"},
59  {XC430_W240, "XC430-W240"},
60 
61  {XM430_W210, "XM430-W210"},
62  {XM430_W350, "XM430-W350"},
63 
64  {XM540_W150, "XM540-W150"},
65  {XM540_W270, "XM540-W270"},
66 
67  {XH430_V210, "XH430-V210"},
68  {XH430_V350, "XH430-V350"},
69  {XH430_W210, "XH430-W210"},
70  {XH430_W350, "XH430-W350"},
71 
72  {XH540_W150, "XH540_W150"},
73  {XH540_W270, "XH540_W270"},
74  {XH540_V150, "XH540_V150"},
75  {XH540_V270, "XH540_V270"},
76 
77  {XW540_T260, "XW540_T260"},
78  {XW540_T140, "XW540_T140"},
79 
80  {PRO_L42_10_S300_R, "PRO-L42-10-S300-R"},
81  {PRO_L54_30_S400_R, "PRO-L54-30-S400-R"},
82  {PRO_L54_30_S500_R, "PRO-L54-30-S500-R"},
83  {PRO_L54_50_S290_R, "PRO-L54-50-S290-R"},
84  {PRO_L54_50_S500_R, "PRO-L54-50-S500-R"},
85 
86  {PRO_M42_10_S260_R, "PRO-M42-10-S260-R"},
87  {PRO_M54_40_S250_R, "PRO-M54-40-S250-R"},
88  {PRO_M54_60_S250_R, "PRO-M54-60-S250-R"},
89 
90  {PRO_H42_20_S300_R, "PRO-H42-20-S300-R"},
91  {PRO_H54_100_S500_R, "PRO-H54-100-S500-R"},
92  {PRO_H54_200_S500_R, "PRO-H54-200-S500-R"},
93 
94  {PRO_M42_10_S260_R_A, "PRO-M42-10-S260-R-A"},
95  {PRO_M54_40_S250_R_A, "PRO-M54-40-S250-R-A"},
96  {PRO_M54_60_S250_R_A, "PRO-M54-60-S250-R-A"},
97 
98  {PRO_H42_20_S300_R_A, "PRO-H42-20-S300-R-A"},
99  {PRO_H54_100_S500_R_A, "PRO-H54-100-S500-R-A"},
100  {PRO_H54_200_S500_R_A, "PRO-H54-200-S500-R-A"},
101 
102  {PRO_PLUS_M42P_010_S260_R, "PRO-PLUS-M42P-010-S260-R"},
103  {PRO_PLUS_M54P_040_S250_R, "PRO-PLUS-M54P-040-S250-R"},
104  {PRO_PLUS_M54P_060_S250_R, "PRO-PLUS-M54P-060-S250-R"},
105 
106  {PRO_PLUS_H42P_020_S300_R, "PRO-PLUS-H42P-020-S300-R"},
107  {PRO_PLUS_H54P_100_S500_R, "PRO-PLUS-H54P-100-S500-R"},
108  {PRO_PLUS_H54P_200_S500_R, "PRO-PLUS-H54P-200-S500-R"},
109 
110  {RH_P12_RN, "RH-P12-RN"},
111 
112  {RH_P12_RN_A, "RH-P12-RN-A"}
113 };
114 #define COUNT_DYNAMIXEL_MODEL (sizeof(dynamixel_model_table)/sizeof(dynamixel_model_table[0]))
115 
116 DynamixelTool::DynamixelTool() : dxl_cnt_(0), the_number_of_control_item_(0){}
117 
119 
121 {
122  for (uint8_t i = 0; i < DYNAMIXEL_BUFFER; i++)
123  dxl_id_[i] = 0;
124 
125  dxl_cnt_ = 0;
126 }
127 
128 bool DynamixelTool::addTool(const char *model_name, uint8_t id, const char **log)
129 {
130  bool result = false;
131  initTool();
132 
134  result = setModelNumber(model_name, log);
135  if (result == false) return false;
136  dxl_id_[dxl_cnt_++] = id;
137 
138  result = setControlTable(model_name, log);
139  if (result == false) return false;
140 
141  return true;
142 }
143 
144 bool DynamixelTool::addTool(uint16_t model_number, uint8_t id, const char **log)
145 {
146  bool result = false;
147  initTool();
148 
149  result = setModelName(model_number, log);
150  if (result == false) return false;
151  model_number_ = model_number;
152  dxl_id_[dxl_cnt_++] = id;
153 
154  result = setControlTable(model_number, log);
155  if (result == false) return false;
156 
157  return result;
158 }
159 
160 void DynamixelTool::addDXL(uint8_t id)
161 {
162  dxl_id_[dxl_cnt_++] = id;
163 }
164 
165 bool DynamixelTool::setControlTable(const char *model_name, const char **log)
166 {
167  const char* name = model_name;
168  uint8_t name_length = strlen(name);
169 
170  for (uint8_t index=0; index < COUNT_DYNAMIXEL_MODEL; index++)
171  {
172  if(strncmp(name, dynamixel_model_table[index].name, name_length) == 0)
173  {
174  return setControlTable(dynamixel_model_table[index].number, log);
175  }
176  }
177 
178  if (log != NULL)
179  *log = "[DynamixelTool] Failed to set control table due to mismatch model name and model number";
180  return false;
181 }
182 
183 bool DynamixelTool::setControlTable(uint16_t model_number, const char **log)
184 {
188 
189  if (control_table_ == NULL || model_info_ == NULL)
190  {
191  if (log != NULL)
192  *log = "[DynamixelTool] Failed to get control table or model info";
193  return false;
194  }
195 
196  return true;
197 }
198 
199 bool DynamixelTool::setModelName(uint16_t model_number, const char **log)
200 {
201  uint16_t num = model_number;
202 
203  for (uint8_t index=0; index < COUNT_DYNAMIXEL_MODEL; index++)
204  {
205  if (num == dynamixel_model_table[index].number)
206  {
208  return true;
209  }
210  }
211 
212  if (log != NULL)
213  *log = "[DynamixelTool] Failed to find model name";
214  return false;
215 }
216 
217 bool DynamixelTool::setModelNumber(const char *model_name, const char **log)
218 {
219  const char* name = model_name;
220  uint8_t name_length = strlen(name);
221 
222  for (uint8_t index=0; index < COUNT_DYNAMIXEL_MODEL; index++)
223  {
224  if(strncmp(name, model_name_, name_length) == 0)
225  {
227  return true;
228  }
229  }
230 
231  if (log != NULL)
232  *log = "[DynamixelTool] Failed to find model number";
233  return false;
234 }
235 
237 {
238  return model_name_;
239 }
240 
242 {
243  return model_number_;
244 }
245 
246 const uint8_t* DynamixelTool::getID(void)
247 {
248  const uint8_t* id_table_ = dxl_id_;
249 
250  return id_table_;
251 }
252 
254 {
255  return dxl_cnt_;
256 }
257 
259 {
260  return DYNAMIXEL_BUFFER;
261 }
262 
264 {
265  return model_info_->rpm;
266 }
267 
269 {
271 }
272 
274 {
276 }
277 
279 {
281 }
282 
284 {
285  return model_info_->min_radian;
286 }
287 
289 {
290  return model_info_->max_radian;
291 }
292 
294 {
296 }
297 
298 const ControlItem *DynamixelTool::getControlItem(const char *item_name, const char **log)
299 {
300  const ControlItem* control_item = control_table_;
301  uint8_t name_length = strlen(item_name);
302 
303  for (uint8_t num = 0; num < the_number_of_control_item_; num++)
304  {
305  if ((name_length == control_item->item_name_length) &&
306  (memcmp(item_name, control_item->item_name, name_length) == 0))
307  {
308  return control_item;
309  }
310  control_item++;
311  }
312 
313  if (log != NULL)
314  *log = "[DynamixelTool] Can't find Item";
315  return NULL;
316 }
317 
319 {
320  return control_table_;
321 }
322 
324 {
325  return model_info_;
326 }
327 
XM430_W350
#define XM430_W350
Definition: dynamixel_item.h:58
RX_64
#define RX_64
Definition: dynamixel_item.h:32
DynamixelTool::setModelNumber
bool setModelNumber(const char *model_name, const char **log=NULL)
Definition: dynamixel_tool.cpp:217
DynamixelTool::setModelName
bool setModelName(uint16_t model_number, const char **log=NULL)
Definition: dynamixel_tool.cpp:199
MX_28
#define MX_28
Definition: dynamixel_item.h:37
DynamixelTool::the_number_of_control_item_
uint16_t the_number_of_control_item_
Definition: dynamixel_tool.h:54
XL330_M288
#define XL330_M288
Definition: dynamixel_item.h:47
ModelInfo::value_of_min_radian_position
int64_t value_of_min_radian_position
Definition: dynamixel_item.h:125
DynamixelItem::getControlTable
const ControlItem * getControlTable(uint16_t model_number)
Definition: dynamixel_item.cpp:1397
RX_10
#define RX_10
Definition: dynamixel_item.h:29
PRO_PLUS_M54P_060_S250_R
#define PRO_PLUS_M54P_060_S250_R
Definition: dynamixel_item.h:100
DynamixelTool::initTool
void initTool(void)
Definition: dynamixel_tool.cpp:120
XL_320
#define XL_320
Definition: dynamixel_item.h:44
PRO_H42_20_S300_R_A
#define PRO_H42_20_S300_R_A
Definition: dynamixel_item.h:94
PRO_H54_100_S500_R
#define PRO_H54_100_S500_R
Definition: dynamixel_item.h:87
PRO_PLUS_H54P_100_S500_R
#define PRO_PLUS_H54P_100_S500_R
Definition: dynamixel_item.h:103
XH540_V150
#define XH540_V150
Definition: dynamixel_item.h:70
DynamixelTool::addDXL
void addDXL(uint8_t id)
Definition: dynamixel_tool.cpp:160
DynamixelItem::getModelInfo
const ModelInfo * getModelInfo(uint16_t model_number)
Definition: dynamixel_item.cpp:1520
DynamixelTool::dxl_cnt_
uint8_t dxl_cnt_
Definition: dynamixel_tool.h:46
PRO_L54_30_S400_R
#define PRO_L54_30_S400_R
Definition: dynamixel_item.h:77
MX_12W
#define MX_12W
Definition: dynamixel_item.h:36
DynamixelTool::getMaxRadian
float getMaxRadian(void)
Definition: dynamixel_tool.cpp:288
DynamixelTool::getDynamixelCount
uint8_t getDynamixelCount(void)
Definition: dynamixel_tool.cpp:253
AX_12W
#define AX_12W
Definition: dynamixel_item.h:26
RH_P12_RN_A
#define RH_P12_RN_A
Definition: dynamixel_item.h:107
XW540_T260
#define XW540_T260
Definition: dynamixel_item.h:73
DynamixelTool::getModelInfo
const ModelInfo * getModelInfo(void)
Definition: dynamixel_tool.cpp:323
DynamixelTool::setControlTable
bool setControlTable(const char *model_name, const char **log=NULL)
Definition: dynamixel_tool.cpp:165
XH540_W150
#define XH540_W150
Definition: dynamixel_item.h:68
DynamixelTool::DynamixelTool
DynamixelTool()
Definition: dynamixel_tool.cpp:116
ModelInfo::min_radian
float min_radian
Definition: dynamixel_item.h:129
AX_18A
#define AX_18A
Definition: dynamixel_item.h:27
DynamixelItem::getTheNumberOfControlItem
uint8_t getTheNumberOfControlItem()
Definition: dynamixel_item.cpp:1674
XM430_W210
#define XM430_W210
Definition: dynamixel_item.h:57
DynamixelTool::getControlTable
const ControlItem * getControlTable(void)
Definition: dynamixel_tool.cpp:318
XH430_W350
#define XH430_W350
Definition: dynamixel_item.h:64
PRO_M42_10_S260_R
#define PRO_M42_10_S260_R
Definition: dynamixel_item.h:82
DynamixelTool::model_info_
const ModelInfo * model_info_
Definition: dynamixel_tool.h:52
PRO_H54_200_S500_R_A
#define PRO_H54_200_S500_R_A
Definition: dynamixel_item.h:96
DynamixelModel::number
uint16_t number
Definition: dynamixel_tool.cpp:40
DynamixelTool::getValueOfMinRadianPosition
int64_t getValueOfMinRadianPosition(void)
Definition: dynamixel_tool.cpp:268
ModelInfo::max_radian
float max_radian
Definition: dynamixel_item.h:130
DynamixelModel
Definition: dynamixel_tool.cpp:24
RH_P12_RN
#define RH_P12_RN
Definition: dynamixel_item.h:106
PRO_PLUS_M54P_040_S250_R
#define PRO_PLUS_M54P_040_S250_R
Definition: dynamixel_item.h:99
PRO_M42_10_S260_R_A
#define PRO_M42_10_S260_R_A
Definition: dynamixel_item.h:90
PRO_M54_60_S250_R
#define PRO_M54_60_S250_R
Definition: dynamixel_item.h:84
PRO_H54_100_S500_R_A
#define PRO_H54_100_S500_R_A
Definition: dynamixel_item.h:95
XC430_W250_2
#define XC430_W250_2
Definition: dynamixel_item.h:52
XM540_W150
#define XM540_W150
Definition: dynamixel_item.h:60
PRO_M54_60_S250_R_A
#define PRO_M54_60_S250_R_A
Definition: dynamixel_item.h:92
PRO_H54_200_S500_R
#define PRO_H54_200_S500_R
Definition: dynamixel_item.h:88
XH430_V210
#define XH430_V210
Definition: dynamixel_item.h:65
DynamixelTool::getModelName
const char * getModelName(void)
Definition: dynamixel_tool.cpp:236
DynamixelTool::control_table_
const ControlItem * control_table_
Definition: dynamixel_tool.h:51
DynamixelTool::addTool
bool addTool(const char *model_name, uint8_t id, const char **log=NULL)
Definition: dynamixel_tool.cpp:128
XC430_W240
#define XC430_W240
Definition: dynamixel_item.h:55
model_name
static const char * model_name
Definition: dynamixel_workbench.cpp:33
ModelInfo
Definition: dynamixel_item.h:121
DynamixelTool::getMinRadian
float getMinRadian(void)
Definition: dynamixel_tool.cpp:283
ModelInfo::value_of_max_radian_position
int64_t value_of_max_radian_position
Definition: dynamixel_item.h:127
DynamixelTool::getID
const uint8_t * getID(void)
Definition: dynamixel_tool.cpp:246
XL430_W250
#define XL430_W250
Definition: dynamixel_item.h:49
MX_106_2
#define MX_106_2
Definition: dynamixel_item.h:42
DynamixelModel::name
const char * name
Definition: dynamixel_tool.cpp:41
DynamixelTool::model_number_
uint16_t model_number_
Definition: dynamixel_tool.h:49
XH540_V270
#define XH540_V270
Definition: dynamixel_item.h:71
DynamixelTool::getModelNumber
uint16_t getModelNumber(void)
Definition: dynamixel_tool.cpp:241
PRO_PLUS_H42P_020_S300_R
#define PRO_PLUS_H42P_020_S300_R
Definition: dynamixel_item.h:102
PRO_L54_50_S500_R
#define PRO_L54_50_S500_R
Definition: dynamixel_item.h:80
PRO_H42_20_S300_R
#define PRO_H42_20_S300_R
Definition: dynamixel_item.h:86
DynamixelTool::getValueOfMaxRadianPosition
int64_t getValueOfMaxRadianPosition(void)
Definition: dynamixel_tool.cpp:273
XL330_M077
#define XL330_M077
Definition: dynamixel_item.h:46
XC430_W150
#define XC430_W150
Definition: dynamixel_item.h:54
DynamixelTool::getDynamixelBuffer
uint8_t getDynamixelBuffer(void)
Definition: dynamixel_tool.cpp:258
XL430_W250_2
#define XL430_W250_2
Definition: dynamixel_item.h:51
PRO_M54_40_S250_R_A
#define PRO_M54_40_S250_R_A
Definition: dynamixel_item.h:91
XH430_W210
#define XH430_W210
Definition: dynamixel_item.h:63
PRO_PLUS_H54P_200_S500_R
#define PRO_PLUS_H54P_200_S500_R
Definition: dynamixel_item.h:104
PRO_L42_10_S300_R
#define PRO_L42_10_S300_R
Definition: dynamixel_item.h:76
ModelInfo::rpm
float rpm
Definition: dynamixel_item.h:123
DynamixelTool::getValueOfZeroRadianPosition
int64_t getValueOfZeroRadianPosition(void)
Definition: dynamixel_tool.cpp:278
PRO_L54_30_S500_R
#define PRO_L54_30_S500_R
Definition: dynamixel_item.h:78
ControlItem::item_name
const char * item_name
Definition: dynamixel_item.h:115
COUNT_DYNAMIXEL_MODEL
#define COUNT_DYNAMIXEL_MODEL
Definition: dynamixel_tool.cpp:114
RX_24F
#define RX_24F
Definition: dynamixel_item.h:30
RX_28
#define RX_28
Definition: dynamixel_item.h:31
MX_28_2
#define MX_28_2
Definition: dynamixel_item.h:38
MX_106
#define MX_106
Definition: dynamixel_item.h:41
ControlItem
Definition: dynamixel_item.h:113
DynamixelTool::getControlItem
const ControlItem * getControlItem(const char *item_name, const char **log=NULL)
Definition: dynamixel_tool.cpp:298
ControlItem::item_name_length
uint8_t item_name_length
Definition: dynamixel_item.h:117
ModelInfo::value_of_zero_radian_position
int64_t value_of_zero_radian_position
Definition: dynamixel_item.h:126
DynamixelTool::getTheNumberOfControlItem
uint8_t getTheNumberOfControlItem(void)
Definition: dynamixel_tool.cpp:293
DynamixelTool::model_name_
const char * model_name_
Definition: dynamixel_tool.h:48
EX_106
#define EX_106
Definition: dynamixel_item.h:34
XW540_T140
#define XW540_T140
Definition: dynamixel_item.h:74
PRO_L54_50_S290_R
#define PRO_L54_50_S290_R
Definition: dynamixel_item.h:79
DynamixelTool::getRPM
float getRPM(void)
Definition: dynamixel_tool.cpp:263
XH430_V350
#define XH430_V350
Definition: dynamixel_item.h:66
DynamixelTool::dxl_id_
uint8_t dxl_id_[DYNAMIXEL_BUFFER]
Definition: dynamixel_tool.h:45
dynamixel_model_table
static const DynamixelModel dynamixel_model_table[]
Definition: dynamixel_tool.cpp:30
PRO_PLUS_M42P_010_S260_R
#define PRO_PLUS_M42P_010_S260_R
Definition: dynamixel_item.h:98
DynamixelTool::DYNAMIXEL_BUFFER
@ DYNAMIXEL_BUFFER
Definition: dynamixel_tool.h:58
XM540_W270
#define XM540_W270
Definition: dynamixel_item.h:61
MX_64_2
#define MX_64_2
Definition: dynamixel_item.h:40
MX_64
#define MX_64
Definition: dynamixel_item.h:39
XH540_W270
#define XH540_W270
Definition: dynamixel_item.h:69
DynamixelTool::~DynamixelTool
~DynamixelTool()
Definition: dynamixel_tool.cpp:118
AX_12A
#define AX_12A
Definition: dynamixel_item.h:25
PRO_M54_40_S250_R
#define PRO_M54_40_S250_R
Definition: dynamixel_item.h:83


dynamixel_workbench_toolbox
Author(s): Darby Lim , Ryan Shim
autogenerated on Wed Mar 2 2022 00:13:18