Hekateros  3.4.3
RoadNarrows Robotics Robot Arm Project
hekProdArm5L.cxx
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////////////
2 //
3 // Package: Hekateros
4 //
5 // Library: libhekateros
6 //
7 // File: hekProd5L.cxx
8 //
9 /*! \file
10  *
11  * $LastChangedDate: 2015-12-10 10:43:51 -0700 (Thu, 10 Dec 2015) $
12  * $Rev: 4239 $
13  *
14  * \brief Hekateros 4 DoF long robotic arm static specification.
15  *
16  * \author Robin Knight (robin.knight@roadnarrows.com)
17  * \author Daniel Packard (daniel@roadnarrows.com)
18  *
19  * \copyright
20  * \h_copy 2013-2017. RoadNarrows LLC.\n
21  * http://www.roadnarrows.com\n
22  * All Rights Reserved
23  */
24 /*
25  * @EulaBegin@
26  *
27  * Unless otherwise stated explicitly, all materials contained are copyrighted
28  * and may not be used without RoadNarrows LLC's written consent,
29  * except as provided in these terms and conditions or in the copyright
30  * notice (documents and software) or other proprietary notice provided with
31  * the relevant materials.
32  *
33  * IN NO EVENT SHALL THE AUTHOR, ROADNARROWS LLC, OR ANY
34  * MEMBERS/EMPLOYEES/CONTRACTORS OF ROADNARROWS OR DISTRIBUTORS OF THIS SOFTWARE
35  * BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR
36  * CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
37  * DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN
38  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39  *
40  * THE AUTHORS AND ROADNARROWS LLC SPECIFICALLY DISCLAIM ANY WARRANTIES,
41  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
42  * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN
43  * "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO
44  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
45  *
46  * @EulaEnd@
47  */
48 ////////////////////////////////////////////////////////////////////////////////
49 
50 #include "Dynamixel/Dynamixel.h"
51 
52 #include "Hekateros/hekateros.h"
53 #include "Hekateros/hekTune.h"
54 #include "Hekateros/hekOptical.h"
55 #include "Hekateros/hekSpec.h"
56 #include "Hekateros/hekProdArm5L.h"
57 
58 using namespace std;
59 using namespace hekateros;
60 
61 
62 /*!
63  * \brief Specification of links.
64  *
65  * \par Data:
66  * link_name,\n
67  * length(mm)
68  *
69  * TODO
70  */
71 const HekSpecLink_T hekateros::HekProdArm5LSpecLinks[HekProdArm5LNumLinks] =
72 {
73  // fixed footprint base to base
74  { "base_fixed",
75  0.0
76  },
77 
78  // fixed footprint base to base
79  { "base_rot",
80  0.0
81  },
82 
83  // upper arm to forearm
84  { "upper_arm",
85  406.27
86  },
87 
88  // forearm to wrist
89  { "forearm",
90  401.6
91  },
92 
93  // wrist to end effector zero point
94  { "tool_zero",
95  0.0
96  }
97 };
98 
99 
100 //------------------------------------------------------------------------------
101 // 5L Arm v1.1
102 //------------------------------------------------------------------------------
103 
104 /*!
105  * \brief Specification of joints.
106  *
107  * \par Data:
108  * joint_name,\n
109  * master_servo_id, slave_servo_id, joint_type, gear_ratio,\n
110  * min_phy_limit(deg), max_phy_limit(deg), limit_types,\n
111  * {
112  * {io_bit_0,
113  * min_edge_pos(deg), min_black_pos(deg),
114  * center_pos(deg),
115  * max_black_pos(deg), max_edge_pos(deg)
116  * },
117  * {io_bit_1,
118  * min_edge_pos(deg), min_black_pos(deg),
119  * center_pos(deg),
120  * max_black_pos(deg), max_edge_pos(deg)
121  * },
122  * calib_pos(deg), balanced_pos(deg), park_pos(deg)\n
123  * parent_link_idx, child_link_index
124  */
125 const HekSpecJoint_T
126  hekateros::HekProdArm5LSpecJoints_1_1[HekProdArm5LDoF] =
127 {
128  { "base_rot",
129  HekServoIdBase, DYNA_ID_NONE, HekJointTypeContinuous, 2.1,
130  0.0, 0.0, HekLimitTypeElecTDC,
131  {
132  { HekIOExpPort0Base0, -3.0, -1.0, 0.0, 1.0, 3.0 },
133  { HekIOExpPort0Base180, 177.0, 179.0, 180.0, 181.0, 183.0 }
134  },
135  0.0, 0.0, 0.0,
136  0, 1
137  },
138  { "shoulder",
139  HekServoIdShoulderL, HekServoIdShoulderR, HekJointTypeRevolute, 2.0,
140  -77.0, 120.0, HekLimitTypePhys|HekLimitTypeElec,
141  {
142  { HekIOExpPort0Shoulder, -72.0, -77.0, 13.5, 104.0, 99.0 },
143  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
144  },
145  0.0, -30.0, -75.0,
146  1, 2
147  },
148  { "elbow",
149  HekServoIdElbow, DYNA_ID_NONE, HekJointTypeRevolute, 4.0,
150  -135.0, 135.0, HekLimitTypePhys|HekLimitTypeElec,
151  {
152  { HekIOExpPort0Elbow, -131.0, -135.0, 0.0, 135.0, 131.0 },
153  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
154  },
155  0.0, 120.0, 130.0,
156  2, 3
157  },
158  { "wrist_pitch",
159  HekServoIdWristPitch, DYNA_ID_NONE, HekJointTypeRevolute, 1.5,
160  -114.0, 114.0, HekLimitTypePhys|HekLimitTypeElec,
161  {
162  { HekIOExpPort0WristPitch, -90.0, -95.0, 0.0, 95.0, 90.0 },
163  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
164  },
165  0.0, 0.0, 50.0,
166  3, 4
167  },
168  { "wrist_rot",
169  HekServoIdWristRot, DYNA_ID_NONE, HekJointTypeContinuous, 1.5,
170  0.0, 0.0, HekLimitTypeElecTDC,
171  {
172  { HekIOExpPort0WristRot0, -9.25, -3.75, 0.0, 3.75, 9.25 },
173  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
174  },
175  0.0, 0.0, 0.0,
176  4, 5
177  }
178 };
179 
180 /*!
181  * \brief Specification of servos.
182  *
183  * \par Data:
184  * servo_id, is_master, is_continuous, dir toque_limit(% of max)
185  */
186 const HekSpecServo_T
187  hekateros::HekProdArm5LSpecServos_1_1[HekProdArm5LNumServos] =
188 {
189  {HekServoIdBase, true, true, DYNA_DIR_CCW, HekTuneOverTorqueThDft},
190  {HekServoIdShoulderL, true, true, DYNA_DIR_CW, HekTuneOverTorqueThDft},
191  {HekServoIdShoulderR, false, true, DYNA_DIR_CCW, HekTuneOverTorqueThDft},
192  {HekServoIdElbow, true, true, DYNA_DIR_CW, HekTuneOverTorqueThDft},
193  {HekServoIdWristPitch, true, true, DYNA_DIR_CCW, HekTuneOverTorqueThDft},
194  {HekServoIdWristRot, true, true, DYNA_DIR_CW, HekTuneOverTorqueThDft},
195 };
196 
197 
198 //------------------------------------------------------------------------------
199 // 5L Arm v1.2
200 //------------------------------------------------------------------------------
201 
202 /*!
203  * \brief Specification of joints.
204  *
205  * \par Data:
206  * joint_name,\n
207  * master_servo_id, slave_servo_id, joint_type, gear_ratio,\n
208  * min_phy_limit(deg), max_phy_limit(deg), limit_types,\n
209  * {
210  * {io_bit_0,
211  * min_edge_pos(deg), min_black_pos(deg),
212  * center_pos(deg),
213  * max_black_pos(deg), max_edge_pos(deg)
214  * },
215  * {io_bit_1,
216  * min_edge_pos(deg), min_black_pos(deg),
217  * center_pos(deg),
218  * max_black_pos(deg), max_edge_pos(deg)
219  * },
220  * calib_pos(deg), balanced_pos(deg), park_pos(deg)\n
221  * parent_link_idx, child_link_index
222  */
223 const HekSpecJoint_T
224  hekateros::HekProdArm5LSpecJoints_1_2[HekProdArm5LDoF] =
225 {
226  { "base_rot",
227  HekServoIdBase, DYNA_ID_NONE, HekJointTypeContinuous, 2.0,
228  0.0, 0.0, HekLimitTypeElecTDC,
229  {
230  { HekIOExpPort0Base0, -3.0, -1.0, 0.0, 1.0, 3.0 },
231  { HekIOExpPort0Base180, 177.0, 179.0, 180.0, 181.0, 183.0 }
232  },
233  0.0, 0.0, 0.0,
234  0, 1
235  },
236  { "shoulder",
237  HekServoIdShoulderL, HekServoIdShoulderR, HekJointTypeRevolute, 2.0,
238  -77.0, 120.0, HekLimitTypePhys|HekLimitTypeElec,
239  {
240  { HekIOExpPort0Shoulder, -72.0, -77.0, 13.5, 104.0, 99.0 },
241  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
242  },
243  0.0, -30.0, -75.0,
244  1, 2
245  },
246  { "elbow",
247  HekServoIdElbow, DYNA_ID_NONE, HekJointTypeRevolute, 4.0,
248  -135.0, 135.0, HekLimitTypePhys|HekLimitTypeElec,
249  {
250  { HekIOExpPort0Elbow, -131.0, -135.0, 0.0, 135.0, 131.0 },
251  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
252  },
253  0.0, 120.0, 130.0,
254  2, 3
255  },
256  { "wrist_pitch",
257  HekServoIdWristPitch, DYNA_ID_NONE, HekJointTypeRevolute, 1.5,
258  -114.0, 114.0, HekLimitTypePhys|HekLimitTypeElec,
259  {
260  { HekIOExpPort0WristPitch, -90.0, -95.0, 0.0, 95.0, 90.0 },
261  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
262  },
263  0.0, 0.0, 50.0,
264  3, 4
265  },
266  { "wrist_rot",
267  HekServoIdWristRot, DYNA_ID_NONE, HekJointTypeContinuous, 1.5,
268  0.0, 0.0, HekLimitTypeElecTDC,
269  {
270  { HekIOExpPort0WristRot0, -9.25, -3.75, 0.0, 3.75, 9.25 },
271  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
272  },
273  0.0, 0.0, 0.0,
274  4, 5
275  }
276 };
277 
278 /*!
279  * \brief Specification of servos.
280  *
281  * \par Data:
282  * servo_id, is_master, is_continuous, dir toque_limit(% of max)
283  */
284 const HekSpecServo_T
285  hekateros::HekProdArm5LSpecServos_1_2[HekProdArm5LNumServos] =
286 {
287  {HekServoIdBase, true, true, DYNA_DIR_CCW, HekTuneOverTorqueThDft},
288  {HekServoIdShoulderL, true, true, DYNA_DIR_CW, HekTuneOverTorqueThDft},
289  {HekServoIdShoulderR, false, true, DYNA_DIR_CCW, HekTuneOverTorqueThDft},
290  {HekServoIdElbow, true, true, DYNA_DIR_CW, HekTuneOverTorqueThDft},
291  {HekServoIdWristPitch, true, true, DYNA_DIR_CCW, HekTuneOverTorqueThDft},
292  {HekServoIdWristRot, true, true, DYNA_DIR_CW, HekTuneOverTorqueThDft},
293 };
294 
295 
296 //------------------------------------------------------------------------------
297 // 5L Arm v1.3
298 //------------------------------------------------------------------------------
299 
300 /*!
301  * \brief Specification of joints.
302  *
303  * \par Data:
304  * joint_name,\n
305  * master_servo_id, slave_servo_id, joint_type, gear_ratio,\n
306  * min_phy_limit(deg), max_phy_limit(deg), limit_types,\n
307  * {
308  * {io_bit_0,
309  * min_edge_pos(deg), min_black_pos(deg),
310  * center_pos(deg),
311  * max_black_pos(deg), max_edge_pos(deg)
312  * },
313  * {io_bit_1,
314  * min_edge_pos(deg), min_black_pos(deg),
315  * center_pos(deg),
316  * max_black_pos(deg), max_edge_pos(deg)
317  * },
318  * calib_pos(deg), balanced_pos(deg), park_pos(deg)\n
319  * parent_link_idx, child_link_index
320  */
321 const HekSpecJoint_T
322  hekateros::HekProdArm5LSpecJoints_1_3[HekProdArm5LDoF] =
323 {
324  { "base_rot",
325  HekServoIdBase, DYNA_ID_NONE, HekJointTypeContinuous, 2.0,
326  0.0, 0.0, HekLimitTypeElecTDC,
327  {
328  { HekIOExpPort0Base0, -3.0, -1.0, 0.0, 1.0, 3.0 },
329  { HekIOExpPort0Base180, 177.0, 179.0, 180.0, 181.0, 183.0 }
330  },
331  0.0, 0.0, 0.0,
332  0, 1
333  },
334  { "shoulder",
335  HekServoIdShoulderL, HekServoIdShoulderR, HekJointTypeRevolute, 2.0,
336  -80.0, 115.0, HekLimitTypePhys|HekLimitTypeElec,
337  {
338  { HekIOExpPort0Shoulder, -69.85, -72.85, 17.5, 115.0, 112.85 },
339  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
340  },
341  0.0, -30.0, -75.0,
342  1, 2
343  },
344  { "elbow",
345  HekServoIdElbow, DYNA_ID_NONE, HekJointTypeRevolute, 4.0,
346  -135.0, 135.0, HekLimitTypePhys|HekLimitTypeElec,
347  {
348  { HekIOExpPort0Elbow, -131.0, -134.0, 0.0, 134.0, 131.0 },
349  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
350  },
351  0.0, 120.0, 130.0,
352  2, 3
353  },
354  { "wrist_pitch",
355  HekServoIdWristPitch, DYNA_ID_NONE, HekJointTypeRevolute, 1.5,
356  -110.0, 110.0, HekLimitTypePhys|HekLimitTypeElec,
357  {
358  { HekIOExpPort0WristPitch, -90.0, -93.0, 0.0, 93.0, 90.0 },
359  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
360  },
361  0.0, 0.0, 50.0,
362  3, 4
363  },
364  { "wrist_rot",
365  HekServoIdWristRot, DYNA_ID_NONE, HekJointTypeContinuous, 1.5,
366  0.0, 0.0, HekLimitTypeElecTDC,
367  {
368  { HekIOExpPort0WristRot0, -9.25, -6.25, 0.0, 6.25, 9.25 },
369  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
370  },
371  0.0, 0.0, 0.0,
372  4, 5
373  }
374 };
375 
376 /*!
377  * \brief Specification of servos.
378  *
379  * \par Data:
380  * servo_id, is_master, is_continuous, dir toque_limit(% of max)
381  */
382 const HekSpecServo_T
383  hekateros::HekProdArm5LSpecServos_1_3[HekProdArm5LNumServos] =
384 {
385  {HekServoIdBase, true, true, DYNA_DIR_CCW, HekTuneOverTorqueThDft},
386  {HekServoIdShoulderL, true, true, DYNA_DIR_CW, HekTuneOverTorqueThDft},
387  {HekServoIdShoulderR, false, true, DYNA_DIR_CCW, HekTuneOverTorqueThDft},
388  {HekServoIdElbow, true, true, DYNA_DIR_CW, HekTuneOverTorqueThDft},
389  {HekServoIdWristPitch, true, true, DYNA_DIR_CCW, HekTuneOverTorqueThDft},
390  {HekServoIdWristRot, true, true, DYNA_DIR_CW, HekTuneOverTorqueThDft},
391 };
392 
393 
394 //------------------------------------------------------------------------------
395 // 5L Arm v1.3.5 Special SIUE Hybrid Arm
396 //------------------------------------------------------------------------------
397 
398 /*!
399  * \brief Specification of joints.
400  *
401  * \par Data:
402  * joint_name,\n
403  * master_servo_id, slave_servo_id, joint_type, gear_ratio,\n
404  * min_phy_limit(deg), max_phy_limit(deg), limit_types,\n
405  * {
406  * {io_bit_0,
407  * min_edge_pos(deg), min_black_pos(deg),
408  * center_pos(deg),
409  * max_black_pos(deg), max_edge_pos(deg)
410  * },
411  * {io_bit_1,
412  * min_edge_pos(deg), min_black_pos(deg),
413  * center_pos(deg),
414  * max_black_pos(deg), max_edge_pos(deg)
415  * },
416  * calib_pos(deg), balanced_pos(deg), park_pos(deg)\n
417  * parent_link_idx, child_link_index
418  */
419 const HekSpecJoint_T
420  hekateros::HekProdArm5LSpecJoints_1_3_5[HekProdArm5LDoF] =
421 {
422  { "base_rot",
423  HekServoIdBase, DYNA_ID_NONE, HekJointTypeContinuous, 40.0/17.0,
424  0.0, 0.0, HekLimitTypeElecTDC,
425  {
426  { HekIOExpPort0Base0, -3.0, -1.0, 0.0, 1.0, 3.0 },
427  { HekIOExpPort0Base180, 177.0, 179.0, 180.0, 181.0, 183.0 }
428  },
429  0.0, 0.0, 0.0,
430  0, 1
431  },
432  { "shoulder",
433  HekServoIdShoulderL, HekServoIdShoulderR, HekJointTypeRevolute, 2.0,
434  -80.0, 115.0, HekLimitTypePhys|HekLimitTypeElec,
435  {
436  { HekIOExpPort0Shoulder, -69.85, -72.85, 17.5, 115.0, 112.85 },
437  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
438  },
439  0.0, -30.0, -75.0,
440  1, 2
441  },
442  { "elbow",
443  HekServoIdElbow, DYNA_ID_NONE, HekJointTypeRevolute, 4.0,
444  -135.0, 135.0, HekLimitTypePhys|HekLimitTypeElec,
445  {
446  { HekIOExpPort0Elbow, -131.0, -134.0, 0.0, 134.0, 131.0 },
447  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
448  },
449  0.0, 120.0, 130.0,
450  2, 3
451  },
452  { "wrist_pitch",
453  HekServoIdWristPitch, DYNA_ID_NONE, HekJointTypeRevolute, 1.5,
454  -115.9, 115.9, HekLimitTypePhys|HekLimitTypeElec,
455  {
456  { HekIOExpPort0WristPitch, -112.5, -115.5, 0.0, 115.5, 112.5 },
457  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
458  },
459  0.0, 0.0, 50.0,
460  3, 4
461  },
462  { "wrist_rot",
463  HekServoIdWristRot, DYNA_ID_NONE, HekJointTypeContinuous, 1.5,
464  0.0, 0.0, HekLimitTypeElecTDC,
465  {
466  { HekIOExpPort0WristRot0, -15.0, -12.0, 0.0, 12.0, 15.0 },
467  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
468  },
469  0.0, 0.0, 0.0,
470  4, 5
471  }
472 };
473 
474 /*!
475  * \brief Specification of servos.
476  *
477  * \par Data:
478  * servo_id, is_master, is_continuous, dir toque_limit(% of max)
479  */
480 const HekSpecServo_T
481  hekateros::HekProdArm5LSpecServos_1_3_5[HekProdArm5LNumServos] =
482 {
483  {HekServoIdBase, true, true, DYNA_DIR_CCW, HekTuneOverTorqueThDft},
484  {HekServoIdShoulderL, true, true, DYNA_DIR_CW, HekTuneOverTorqueThDft},
485  {HekServoIdShoulderR, false, true, DYNA_DIR_CCW, HekTuneOverTorqueThDft},
486  {HekServoIdElbow, true, true, DYNA_DIR_CW, HekTuneOverTorqueThDft},
487  {HekServoIdWristPitch, true, true, DYNA_DIR_CCW, HekTuneOverTorqueThDft},
488  {HekServoIdWristRot, true, true, DYNA_DIR_CW, HekTuneOverTorqueThDft},
489 };
490 
491 
492 //------------------------------------------------------------------------------
493 // 5L Arm v1.4
494 //------------------------------------------------------------------------------
495 
496 /*!
497  * \brief Specification of joints.
498  *
499  * \par Data:
500  * joint_name,\n
501  * master_servo_id, slave_servo_id, joint_type, gear_ratio,\n
502  * min_phy_limit(deg), max_phy_limit(deg), limit_types,\n
503  * {
504  * {io_bit_0,
505  * min_edge_pos(deg), min_black_pos(deg),
506  * center_pos(deg),
507  * max_black_pos(deg), max_edge_pos(deg)
508  * },
509  * {io_bit_1,
510  * min_edge_pos(deg), min_black_pos(deg),
511  * center_pos(deg),
512  * max_black_pos(deg), max_edge_pos(deg)
513  * },
514  * calib_pos(deg), balanced_pos(deg), park_pos(deg)\n
515  * parent_link_idx, child_link_index
516  */
517 const HekSpecJoint_T
518  hekateros::HekProdArm5LSpecJoints_1_4[HekProdArm5LDoF] =
519 {
520  { "base_rot",
521  HekServoIdBase, DYNA_ID_NONE, HekJointTypeContinuous, 2.0,
522  0.0, 0.0, HekLimitTypeElecTDC,
523  {
524  { HekIOExpPort0Base0, -3.0, -1.0, 0.0, 1.0, 3.0 },
525  { HekIOExpPort0Base180, 177.0, 179.0, 180.0, 181.0, 183.0 }
526  },
527  0.0, 0.0, 0.0,
528  0, 1
529  },
530  { "shoulder",
531  HekServoIdShoulderL, HekServoIdShoulderR, HekJointTypeRevolute, 2.0,
532  -80.0, 115.0, HekLimitTypePhys|HekLimitTypeElec,
533  {
534  { HekIOExpPort0Shoulder, -69.85, -72.85, 17.5, 115.0, 112.85 },
535  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
536  },
537  0.0, -30.0, -75.0,
538  1, 2
539  },
540  { "elbow",
541  HekServoIdElbow, DYNA_ID_NONE, HekJointTypeRevolute, 4.0,
542  -135.0, 135.0, HekLimitTypePhys|HekLimitTypeElec,
543  {
544  { HekIOExpPort0Elbow, -131.0, -134.0, 0.0, 134.0, 131.0 },
545  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
546  },
547  0.0, 120.0, 130.0,
548  2, 3
549  },
550  { "wrist_pitch",
551  HekServoIdWristPitch, DYNA_ID_NONE, HekJointTypeRevolute, 1.5,
552  -115.9, 115.9, HekLimitTypePhys|HekLimitTypeElec,
553  {
554  { HekIOExpPort0WristPitch, -112.5, -115.5, 0.0, 115.5, 112.5 },
555  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
556  },
557  0.0, 0.0, 50.0,
558  3, 4
559  },
560  { "wrist_rot",
561  HekServoIdWristRot, DYNA_ID_NONE, HekJointTypeContinuous, 1.5,
562  0.0, 0.0, HekLimitTypeElecTDC,
563  {
564  { HekIOExpPort0WristRot0, -15.0, -12.0, 0.0, 12.0, 15.0 },
565  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
566  },
567  0.0, 0.0, 0.0,
568  4, 5
569  }
570 };
571 
572 /*!
573  * \brief Specification of servos.
574  *
575  * \par Data:
576  * servo_id, is_master, is_continuous, dir toque_limit(% of max)
577  */
578 const HekSpecServo_T
579  hekateros::HekProdArm5LSpecServos_1_4[HekProdArm5LNumServos] =
580 {
581  {HekServoIdBase, true, true, DYNA_DIR_CCW, HekTuneOverTorqueThDft},
582  {HekServoIdShoulderL, true, true, DYNA_DIR_CW, HekTuneOverTorqueThDft},
583  {HekServoIdShoulderR, false, true, DYNA_DIR_CCW, HekTuneOverTorqueThDft},
584  {HekServoIdElbow, true, true, DYNA_DIR_CW, HekTuneOverTorqueThDft},
585  {HekServoIdWristPitch, true, true, DYNA_DIR_CCW, HekTuneOverTorqueThDft},
586  {HekServoIdWristRot, true, true, DYNA_DIR_CW, HekTuneOverTorqueThDft},
587 };
588 
589 
590 //------------------------------------------------------------------------------
591 // 5L Arm v2.0
592 //------------------------------------------------------------------------------
593 
594 /*!
595  * \brief Specification of joints.
596  *
597  * \par Data:
598  * joint_name,\n
599  * master_servo_id, slave_servo_id, joint_type, gear_ratio,\n
600  * min_phy_limit(deg), max_phy_limit(deg), limit_types,\n
601  * {
602  * {io_bit_0,
603  * min_edge_pos(deg), min_black_pos(deg),
604  * center_pos(deg),
605  * max_black_pos(deg), max_edge_pos(deg)
606  * },
607  * {io_bit_1,
608  * min_edge_pos(deg), min_black_pos(deg),
609  * center_pos(deg),
610  * max_black_pos(deg), max_edge_pos(deg)
611  * },
612  * calib_pos(deg), balanced_pos(deg), park_pos(deg)\n
613  * parent_link_idx, child_link_index
614  */
615 const HekSpecJoint_T
616  hekateros::HekProdArm5LSpecJoints_2_0[HekProdArm5LDoF] =
617 {
618  { "base_rot",
619  HekServoIdBase, DYNA_ID_NONE, HekJointTypeContinuous, 2.0,
620  0.0, 0.0, HekLimitTypeElecTDC,
621  {
622  { HekIOExpPort0Base0, -3.0, -1.0, 0.0, 1.0, 3.0 },
623  { HekIOExpPort0Base180, 177.0, 179.0, 180.0, 181.0, 183.0 }
624  },
625  0.0, 0.0, 0.0,
626  0, 1
627  },
628  { "shoulder",
629  HekServoIdShoulderL, HekServoIdShoulderR, HekJointTypeRevolute, 2.0,
630  -80.0, 115.0, HekLimitTypePhys|HekLimitTypeElec,
631  {
632  { HekIOExpPort0Shoulder, -69.85, -72.85, 17.5, 115.0, 112.85 },
633  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
634  },
635  0.0, -30.0, -75.0,
636  1, 2
637  },
638  { "elbow",
639  HekServoIdElbow, DYNA_ID_NONE, HekJointTypeRevolute, 4.0,
640  -135.0, 135.0, HekLimitTypePhys|HekLimitTypeElec,
641  {
642  { HekIOExpPort0Elbow, -131.0, -134.0, 0.0, 134.0, 131.0 },
643  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
644  },
645  0.0, 120.0, 130.0,
646  2, 3
647  },
648  { "wrist_pitch",
649  HekServoIdWristPitch, DYNA_ID_NONE, HekJointTypeRevolute, 1.5,
650  -115.9, 115.9, HekLimitTypePhys|HekLimitTypeElec,
651  {
652  { HekIOExpPort0WristPitch, -112.5, -115.5, 0.0, 115.5, 112.5 },
653  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
654  },
655  0.0, 0.0, 50.0,
656  3, 4
657  },
658  { "wrist_rot",
659  HekServoIdWristRot, DYNA_ID_NONE, HekJointTypeContinuous, 1.5,
660  0.0, 0.0, HekLimitTypeElecTDC,
661  {
662  { HekIOExpPort0WristRot0, -15.0, -12.0, 0.0, 12.0, 15.0 },
663  { HekIOExpUnassigned, 0.0, 0.0, 0.0, 0.0, 0.0 }
664  },
665  0.0, 0.0, 0.0,
666  4, 5
667  }
668 };
669 
670 /*!
671  * \brief Specification of servos.
672  *
673  * \par Data:
674  * servo_id, is_master, is_continuous, dir toque_limit(% of max)
675  */
676 const HekSpecServo_T
677  hekateros::HekProdArm5LSpecServos_2_0[HekProdArm5LNumServos] =
678 {
679  {HekServoIdBase, true, true, DYNA_DIR_CCW, HekTuneOverTorqueThDft},
680  {HekServoIdShoulderL, true, true, DYNA_DIR_CW, HekTuneOverTorqueThDft},
681  {HekServoIdShoulderR, false, true, DYNA_DIR_CCW, HekTuneOverTorqueThDft},
682  {HekServoIdElbow, true, true, DYNA_DIR_CW, HekTuneOverTorqueThDft},
683  {HekServoIdWristPitch, true, true, DYNA_DIR_CCW, HekTuneOverTorqueThDft},
684  {HekServoIdWristRot, true, true, DYNA_DIR_CW, HekTuneOverTorqueThDft},
685 };
const HekSpecServo_T HekProdArm5LSpecServos_1_3[]
Specification of servos, v1.3.
Definition: hekProdArm5L.h:99
const HekSpecJoint_T HekProdArm5LSpecJoints_1_1[]
Specification of joints, v1.1.
Definition: hekProdArm5L.h:84
<b><i>Hekateros</i></b> optical limit switches.
const HekSpecServo_T HekProdArm5LSpecServos_1_3_5[]
Specification of servos, v1.4.
Definition: hekProdArm5L.h:105
const HekSpecJoint_T HekProdArm5LSpecJoints_2_0[]
Specification of joints, v2.0.
Definition: hekProdArm5L.h:114
const HekSpecJoint_T HekProdArm5LSpecJoints_1_3[]
Specification of joints, v1.3.
Definition: hekProdArm5L.h:96
Hekateros 5 DoF long robotic arm static specification.
const HekSpecLink_T HekProdArm5LSpecLinks[]
Specification of links.
Definition: hekProdArm5L.h:81
const HekSpecServo_T HekProdArm5LSpecServos_1_1[]
Specification of servos, v1.1.
Definition: hekProdArm5L.h:87
const HekSpecJoint_T HekProdArm5LSpecJoints_1_3_5[]
Specification of joints, v1.3.5.
Definition: hekProdArm5L.h:102
Top-level package include file.
const HekSpecJoint_T HekProdArm5LSpecJoints_1_4[]
Specification of joints, v1.4.
Definition: hekProdArm5L.h:108
const HekSpecServo_T HekProdArm5LSpecServos_2_0[]
Specification of servos, v2.0.
Definition: hekProdArm5L.h:117
<b><i>Hekateros</i></b> product specification base classes.
Hekateros tuning.
Robotic joint specification.
Definition: hekSpec.h:139
const HekSpecServo_T HekProdArm5LSpecServos_1_4[]
Specification of servos, v1.4.
Definition: hekProdArm5L.h:111
Robotic servo specification.
Definition: hekSpec.h:199
const HekSpecServo_T HekProdArm5LSpecServos_1_2[]
Specification of servos, v1.2.
Definition: hekProdArm5L.h:93
const HekSpecJoint_T HekProdArm5LSpecJoints_1_2[]
Specification of joints, v1.2.
Definition: hekProdArm5L.h:90
The <b><i>Hekateros</i></b> namespace encapsulates all <b><i>Hekateros</i></b> related constructs...
Definition: hekateros.h:56