Wiki source code of SES-PRO Robotic Arm UI

Version 27.1 by Eric Nantel on 2024/10/09 16:05

Hide last authors
Eric Nantel 11.1 1 {{lightbox image="https://wiki.lynxmotion.com/info/wiki/lynxmotion/download/ses-pro/ses-pro-software/ses-pro-arm-ui/WebHome/LSS-PRO-UI.png" width="350"/}}
Eric Nantel 5.1 2
Eric Nantel 7.1 3 [[image:[email protected]]]
Eric Nantel 5.1 4
5 **Table of Contents**
6
7 {{toc/}}
8
Coleman Benson 24.1 9 = Installation =
10
11 Windows 7 Operating System or above
12
Eric Nantel 5.1 13 = Description =
14
Coleman Benson 23.1 15 The Lynxmotion Servo Erector Set Professional (SES PRO) Arm Interface is a simple software which allows a user to control any of the Lynxmotion Professional Modular robotic arms in their default configuration. The two compatible gripper kits which are compatible with the SES PRO system (based on the DH Robotics PGE-50-40 and CGE-10-10 DC grillers) can also be controlled via this interface in each of their possible configurations. The included manual jog feature can be used to either position each joint angle, or move to specific cartesian coordinates. Arm (and gripper) positions can then be recorded as part of the built-in sequencer. A 3D display of the arm shows the position of the arm, and a graph can be used to show various information to the user. In order to get a better understanding of the protocol, commands sent to the arm are shown in the interface, and a user input field are standard.
Eric Nantel 5.1 16
17 = Features =
18
Coleman Benson 23.1 19 * Angular and cartesian positioning of the end effector
20 * 3D graphical display of the appropriate robotic arm and end effector
21 * Sequencer to record and play back frames (single, looped or infinite)
22 * Error checking (speed, temperature etc.)
23 * Command output and user input
24 * Safety (Software E-Stop, Halt&Hold & Limp)
Eric Nantel 12.1 25
Eric Nantel 25.1 26 |(% colspan="2" %)(((
Eric Nantel 25.2 27 = User Guide =
Eric Nantel 25.1 28 )))
Eric Nantel 26.1 29 |(% style="width:26px" %) |(% style="width:1452px" %)(((
Eric Nantel 25.1 30 Pressing the i "Information" icon in the software will bring you to this page. Before proceeding with the guide, it is important to note the following:
31
32 * Neither the servos nor the arm are meant to be operated in proximity of humans as they do not have "collaborative" (COBOT) features and do not detect collision
33 * The servos use stepper motors and do NOT include mechanical brakes. If the stepper motor is unable to retain or move to a desired angle (insufficient torque), the motor will rotate freely as opposed to hold the last position
34 )))
Eric Nantel 25.2 35 |(% colspan="2" %)(((
36 == IMPORTANT ==
37 )))
Eric Nantel 26.1 38 |(% style="width:26px" %) |(% style="width:1452px" %)(((
Eric Nantel 25.2 39 === Payload Considerations ===
40
41 1. The rated payload for each arm does NOT include an end effector, nor any added distance between the center of mass of the payload and the output of the final joint. Each of the two compatible Lynxmotion PRO grippers reduce the maximum payload of each arm, and it is up to the user to known and understand the concept of "torque" and center of mass before adding an end effector and payload.
42 1. The rated maximum payload for each arm (at full reach) is at the rated speed for each motor. Moving any joint at a higher speed will decrease the payload capacity of the robot.
43 1. Although each servo can provide significantly more torque than is needed for the rated payload (and therefore means the arm can support much higher loads at lower speeds, the mechanical and modular structure of the arms may fail. We strongly suggest testing and using each arm in a highly controlled and safe setting where, if a failure should occur with one or more joints, that nothing will break should the arm fall.
44 1. The stepper motors provide the highest torque at low speeds, and lower torque at high speeds. Note that the maxium torque is not at the lowest speed as the torque to rpm curve for each servo resembles a "mountain".
45 )))
Eric Nantel 26.1 46 |(% style="width:26px" %) |(% style="width:1452px" %)(((
Eric Nantel 25.2 47 === Emergency ===
48
49 Before using the arm, it is important that a user know what to do when an issue or emergency arises where the arm must be stopped quickly. The following emergency options are available based on severity:
50
51 **Halt & Hold**
52
53 This will stop every joints and hold them in their last recorded angular positions. The corresponding command is #254H<cr>.
54
55 **Limp**
56
57 All joints will go limp which mean there will be nothing avoiding them to turn freely (potentially causing the arm to fall). The high gear ratio of the strain wave gearing does mean there is some (low) level of resistant to rotation, but the gears and motor are nto "locked" and as such, the arm may fall. The corresponding command is #254L<cr>.
58
59 **Software Stop**
60
61 The E-stop button within the software sets all joints to limp.
62
63 **Hardware E-Stop**
64 A hardware E-stop (push to cut power) button is located on the power supply which will cut electricity to all actuators. Similar to a limp command, this can possibly cause the arm to fall. To reset this button, rotate the red "mushroom" in the direction indicated by the white arrows and it will spring out.
65 )))
66 |(% colspan="2" %)(((
67 == Arm Connection ==
68 )))
Eric Nantel 26.1 69 |(% style="width:26px" %) |(% style="width:1452px" %)(((
Eric Nantel 25.2 70 **Model**
71
72 The software currently supports the following Lynxmotion PRO Arms:
73
74 * 550mm 5DoF
75 * 550mm 6DoF
76 * 900mm 5DoF
77 * 900mm 6DoF
78
79 In practice, each 5DoF arm has joint 4 at a fixed angle, otherwise the arms are identical to the 6DoF. Users can always purchase the missing actuator to upgrade to a 6DoF.
80
81 **COM Port**
82
83 The first joint at the base (J1) must be connected via USB to a computer running the sofware. No other joints should have a USB connection. A USB 3.0 port or higher on the computer is suggested, as the lower communication speeds fo USB 2.0 or 1.0 may impede communication and cause unecessary delay or issues. 
84
85 **Connect**
86
87 Once the COM port has been selection, the CONNECT button can be pressed, and once a servo has been found, the light next to it will go from red to green.
88 )))
89 |(% colspan="2" %)(((
90 == Gripper Controls ==
91 )))
Eric Nantel 26.1 92 |(% style="width:26px" %) |(% style="width:1452px" %)(((
Eric Nantel 25.2 93 **Model**
94
95 The software currently supports two models of Lynxmotion PRO compatible grippers based on DH Robots' PGE-50-40 and CGE-10-10 electric grippers. The Lynxmotion kits include hardware to mount the fingers in multiple different offsets for smaller or larger objects. In the sequencer, the position of the fingers for each gripper are included in the sequencer as J7.
96
97 * PGE-50-40 (40mm default configuration)
98 * PGE-50-40 (60mm configuration)
99 * PGE-50-40 (80mm configuration)
100 * CGE-10-10 (20mm configuration)
101 * CGE-10-10 (40mm configuration)
102 * CGE-10-10 (60mm configuration)
103
104 **COM Port**
105
106 Choose the appropriate COM port to which the gripper is connected (via its own USB cable). If you are not certain, you can check Windows -> Device Manager
107
108 **Baudrate**
109
110 The DH Robotics grippers provide the option to change the baud rate, though the default is 115200. If the gripper is configured by the user to a different baud rate, it is important to select the corresponding baud rate in teh software.
111
112 **Initialize**
113
114 Initializing the gripper opens it fully. This is available should the user encounter issues with positioning and need to re-zero the fingers.
115
116 **Connect**
117
118 Pressing CONNECT establishes a connection to the gripper and goes through the initilization process once, opening the gripper fully. Once connection has been established, the light next to the button will go from red to green.
119
120 **Speed**
121
122 The speed of motion can be adjusted either via the plus or minus buttons or entering a value between 0 and 100 and pressing enter.
123
124 **Force**
125
126 The maximum force exerted by the gripper can be adjusted either via the plus or minus buttons or entering a value between 0 and 100 and pressing enter.
127
128 **Open / Close**
129
130 These are shortcut buttons to either fully open or fully close the gripper.
131
132 **Sequencer**
133
134 The sequencer displays the gripper position as joint 7 (J7).
135
136 HINT: If you want the gripper to open or close on an object only at the end of a motion, create a separate frame where only J7 moves.
137 )))
Eric Nantel 25.3 138 |(% colspan="2" %)(((
139 == 3D Model ==
140 )))
Eric Nantel 26.1 141 |(% style="width:26px" %) |(% style="width:1452px" %)(((
Eric Nantel 25.3 142 The 3D model of the arm is shown as reference at all times. The display also includes a virtual plane to denote  the X-Y plane. The model updates based on the selection of the arm, gripper and finger configuration.
143
144 **View Controls**
145
146 Zoom: Shift + Middle Scroll
147
148 Rotate: Shift + Middle Mouse
149
150 Pan: None
151 )))
152 |(% colspan="2" %)(((
153 == Manual Move ==
154 )))
Eric Nantel 26.1 155 |(% style="width:26px" %) |(% style="width:1452px" %)(((
Eric Nantel 25.3 156 **Angular Control**
157
158 In angular mode, the user can control the angle of each joint
159
160 **Coordinates Control**
161
162 In coordinate control the user can control the cartesian position of the end effector
163
164 **End Effector Lock**
165
166 The orientation of the end effector can be locked.
167 )))
168 |(% colspan="2" %)(((
169 == Direct Command ==
170 )))
Eric Nantel 26.1 171 |(% style="width:26px" %) |(% style="width:1452px" %)(((
Eric Nantel 25.3 172 This section allow the user to send commands using the [[LSS-PRO Communication Protocol>>path:/info/wiki/lynxmotion/view/ses-pro/lss-pro/lss-p-communication-protocol/]] directly if required.
173
174 A few things to keep in mind when using this:
175
176 * Make sure you know what you are doing as you can make the arm move in __dangerous__ ways.
177 * Sending commands does not require ‘#’ and ‘\r’ chars.
178 ** example for #2\r you should enter 2Q and press the "SEND" button
179 * The commands are validated, and it shows a notification in case of error.
180 * The replies of queries are shown in the text field below.
181 )))
Eric Nantel 26.1 182 |(% colspan="2" %)(((
183 == Command Output ==
184 )))
185 |(% style="width:26px" %) |(% style="width:1452px" %)(((
186 //{Coming Soon}//
187 )))
188 |(% colspan="2" %)(((
189 == Telemetry ==
190 )))
191 |(% style="width:26px" %) |(% style="width:1452px" %)(((
192 **Data to Display**
Eric Nantel 25.1 193
Eric Nantel 26.1 194 //{Coming Soon}//
195
196 **Display / Hide Actuator**
197
198 //{Coming Soon}//
199 )))
200 |(% colspan="2" style="width:26px" %)(((
201 == Sequencer ==
202 )))
203 |(% style="width:26px" %) |(% style="width:1452px" %)(((
204 **Frames**
205
206 //{Coming Soon}//
207
208 **Record **
209
210 //{Coming Soon}//
211
212 **Edit **
213
214 Time, angles, gripper
215
216 //Alt + Left Click = Drag time//
217
218 **Reorder**
219
220 //{Coming Soon}//
221
222 **Play**
223
224 //{Coming Soon}//
225
226 **Errors**
227
228 //{Coming Soon}//
229 )))
230 |(% style="width:26px" %) |(% style="width:1452px" %)
231 |(% style="width:26px" %) |(% style="width:1452px" %)
232 |(% style="width:26px" %) |(% style="width:1452px" %)
233 |(% style="width:26px" %) |(% style="width:1452px" %)
234 |(% style="width:26px" %) |(% style="width:1452px" %)
235 |(% style="width:26px" %) |(% style="width:1452px" %)
236 |(% style="width:26px" %) |(% style="width:1452px" %)
237 |(% style="width:26px" %) |(% style="width:1452px" %)
238 |(% style="width:26px" %) |(% style="width:1452px" %)
239 |(% style="width:26px" %) |(% style="width:1452px" %)
240 |(% style="width:26px" %) |(% style="width:1452px" %)
241 |(% style="width:26px" %) |(% style="width:1452px" %)
242 |(% style="width:26px" %) |(% style="width:1452px" %)
243 |(% style="width:26px" %) |(% style="width:1452px" %)
244 |(% style="width:26px" %) |(% style="width:1452px" %)
245 |(% style="width:26px" %) |(% style="width:1452px" %)
246 |(% style="width:26px" %) |(% style="width:1452px" %)
247 |(% style="width:26px" %) |(% style="width:1452px" %)
248 |(% style="width:26px" %) |(% style="width:1452px" %)
249 |(% style="width:26px" %) |(% style="width:1452px" %)
250 |(% style="width:26px" %) |(% style="width:1452px" %)
251 |(% style="width:26px" %) |(% style="width:1452px" %)
252 |(% style="width:26px" %) |(% style="width:1452px" %)
253 |(% style="width:26px" %) |(% style="width:1452px" %)
254 |(% style="width:26px" %) |(% style="width:1452px" %)
255 |(% style="width:26px" %) |(% style="width:1452px" %)
256 |(% style="width:26px" %) |(% style="width:1452px" %)
257 |(% style="width:26px" %) |(% style="width:1452px" %)
258 |(% style="width:26px" %) |(% style="width:1452px" %)
259 |(% style="width:26px" %) |(% style="width:1452px" %)
260 |(% style="width:26px" %) |(% style="width:1452px" %)
261 |(% style="width:26px" %) |(% style="width:1452px" %)
262 |(% style="width:26px" %) |(% style="width:1452px" %)
263 |(% style="width:26px" %) |(% style="width:1452px" %)
264 |(% style="width:26px" %) |(% style="width:1452px" %)
265 |(% style="width:26px" %) |(% style="width:1452px" %)
266 |(% style="width:26px" %) |(% style="width:1452px" %)
267 |(% style="width:26px" %) |(% style="width:1452px" %)
268 |(% style="width:26px" %) |(% style="width:1452px" %)
269 |(% style="width:26px" %) |(% style="width:1452px" %)
270 |(% style="width:26px" %) |(% style="width:1452px" %)
271 |(% style="width:26px" %) |(% style="width:1452px" %)
272 |(% style="width:26px" %) |(% style="width:1452px" %)
273 |(% style="width:26px" %) |(% style="width:1452px" %)
274 |(% style="width:26px" %) |(% style="width:1452px" %)
275 |(% style="width:26px" %) |(% style="width:1452px" %)
276 |(% style="width:26px" %) |(% style="width:1452px" %)
277 |(% style="width:26px" %) |(% style="width:1452px" %)
278 |(% style="width:26px" %) |(% style="width:1452px" %)
279 |(% style="width:26px" %) |(% style="width:1452px" %)
280 |(% style="width:26px" %) |(% style="width:1452px" %)
281 |(% style="width:26px" %) |(% style="width:1452px" %)
282 |(% style="width:26px" %) |(% style="width:1452px" %)
283 |(% style="width:26px" %) |(% style="width:1452px" %)
284
Eric Nantel 27.1 285
286 {{comment}}
Eric Nantel 25.1 287 = =
288
Eric Nantel 15.1 289 = User Guide =
290
Coleman Benson 24.1 291 Pressing the i "Information" icon in the software will bring you to this page. Before proceeding with the guide, it is important to note the following:
Eric Nantel 16.1 292
Coleman Benson 23.1 293 * Neither the servos nor the arm are meant to be operated in proximity of humans as they do not have "collaborative" (COBOT) features and do not detect collision
294 * The servos use stepper motors and do NOT include mechanical brakes. If the stepper motor is unable to retain or move to a desired angle (insufficient torque), the motor will rotate freely as opposed to hold the last position
Eric Nantel 16.1 295
Coleman Benson 23.1 296 == IMPORTANT: Payload Considerations ==
Eric Nantel 16.1 297
Coleman Benson 23.1 298 1. The rated payload for each arm does NOT include an end effector, nor any added distance between the center of mass of the payload and the output of the final joint. Each of the two compatible Lynxmotion PRO grippers reduce the maximum payload of each arm, and it is up to the user to known and understand the concept of "torque" and center of mass before adding an end effector and payload.
299 1. The rated maximum payload for each arm (at full reach) is at the rated speed for each motor. Moving any joint at a higher speed will decrease the payload capacity of the robot.
300 1. Although each servo can provide significantly more torque than is needed for the rated payload (and therefore means the arm can support much higher loads at lower speeds, the mechanical and modular structure of the arms may fail. We strongly suggest testing and using each arm in a highly controlled and safe setting where, if a failure should occur with one or more joints, that nothing will break should the arm fall.
301 1. The stepper motors provide the highest torque at low speeds, and lower torque at high speeds. Note that the maxium torque is not at the lowest speed as the torque to rpm curve for each servo resembles a "mountain".
Eric Nantel 16.1 302
Coleman Benson 23.1 303 == IMPORTANT: Emergency ==
Eric Nantel 16.1 304
Coleman Benson 23.1 305 Before using the arm, it is important that a user know what to do when an issue or emergency arises where the arm must be stopped quickly. The following emergency options are available based on severity:
Eric Nantel 16.3 306
Coleman Benson 23.1 307 **Halt & Hold**
Coleman Benson 24.1 308
Coleman Benson 23.1 309 This will stop every joints and hold them in their last recorded angular positions. The corresponding command is #254H<cr>.
Eric Nantel 16.3 310
Coleman Benson 23.1 311 **Limp**
Coleman Benson 24.1 312
Coleman Benson 23.1 313 All joints will go limp which mean there will be nothing avoiding them to turn freely (potentially causing the arm to fall). The high gear ratio of the strain wave gearing does mean there is some (low) level of resistant to rotation, but the gears and motor are nto "locked" and as such, the arm may fall. The corresponding command is #254L<cr>.
Eric Nantel 15.1 314
Coleman Benson 23.1 315 **Software Stop**
316
317 The E-stop button within the software sets all joints to limp.
318
319 **Hardware E-Stop**
320 A hardware E-stop (push to cut power) button is located on the power supply which will cut electricity to all actuators. Similar to a limp command, this can possibly cause the arm to fall. To reset this button, rotate the red "mushroom" in the direction indicated by the white arrows and it will spring out.
321
322 == Arm Connection ==
323
Eric Nantel 17.1 324 **Model**
Eric Nantel 15.1 325
Coleman Benson 24.1 326 The software currently supports the following Lynxmotion PRO Arms:
Coleman Benson 23.1 327
Coleman Benson 24.1 328 * 550mm 5DoF
329 * 550mm 6DoF
330 * 900mm 5DoF
331 * 900mm 6DoF
Eric Nantel 16.2 332
Coleman Benson 24.1 333 In practice, each 5DoF arm has joint 4 at a fixed angle, otherwise the arms are identical to the 6DoF. Users can always purchase the missing actuator to upgrade to a 6DoF.
334
335 **COM Port**
336
Coleman Benson 23.1 337 The first joint at the base (J1) must be connected via USB to a computer running the sofware. No other joints should have a USB connection. A USB 3.0 port or higher on the computer is suggested, as the lower communication speeds fo USB 2.0 or 1.0 may impede communication and cause unecessary delay or issues. 
338
Eric Nantel 17.1 339 **Connect**
Eric Nantel 16.2 340
Coleman Benson 24.1 341 Once the COM port has been selection, the CONNECT button can be pressed, and once a servo has been found, the light next to it will go from red to green.
Eric Nantel 15.1 342
Coleman Benson 24.1 343 == Gripper Controls ==
344
Eric Nantel 17.1 345 **Model**
Eric Nantel 15.1 346
Coleman Benson 23.1 347 The software currently supports two models of Lynxmotion PRO compatible grippers based on DH Robots' PGE-50-40 and CGE-10-10 electric grippers. The Lynxmotion kits include hardware to mount the fingers in multiple different offsets for smaller or larger objects. In the sequencer, the position of the fingers for each gripper are included in the sequencer as J7.
348
Coleman Benson 24.1 349 * PGE-50-40 (40mm default configuration)
350 * PGE-50-40 (60mm configuration)
351 * PGE-50-40 (80mm configuration)
352 * CGE-10-10 (20mm configuration)
353 * CGE-10-10 (40mm configuration)
354 * CGE-10-10 (60mm configuration)
Eric Nantel 16.2 355
Coleman Benson 24.1 356 **COM Port**
Coleman Benson 23.1 357
Coleman Benson 24.1 358 Choose the appropriate COM port to which the gripper is connected (via its own USB cable). If you are not certain, you can check Windows -> Device Manager
359
Eric Nantel 17.1 360 **Baudrate**
Eric Nantel 16.2 361
Coleman Benson 24.1 362 The DH Robotics grippers provide the option to change the baud rate, though the default is 115200. If the gripper is configured by the user to a different baud rate, it is important to select the corresponding baud rate in teh software.
Coleman Benson 23.1 363
Coleman Benson 24.1 364 **Initialize**
Eric Nantel 16.2 365
Coleman Benson 24.1 366 Initializing the gripper opens it fully. This is available should the user encounter issues with positioning and need to re-zero the fingers.
Coleman Benson 23.1 367
Coleman Benson 24.1 368 **Connect**
Eric Nantel 16.2 369
Coleman Benson 24.1 370 Pressing CONNECT establishes a connection to the gripper and goes through the initilization process once, opening the gripper fully. Once connection has been established, the light next to the button will go from red to green.
Coleman Benson 23.1 371
Eric Nantel 17.1 372 **Speed**
Eric Nantel 16.2 373
Coleman Benson 24.1 374 The speed of motion can be adjusted either via the plus or minus buttons or entering a value between 0 and 100 and pressing enter.
Coleman Benson 23.1 375
Eric Nantel 17.1 376 **Force**
Eric Nantel 16.2 377
Coleman Benson 24.1 378 The maximum force exerted by the gripper can be adjusted either via the plus or minus buttons or entering a value between 0 and 100 and pressing enter.
Coleman Benson 23.1 379
Eric Nantel 17.1 380 **Open / Close**
Eric Nantel 16.2 381
Coleman Benson 24.1 382 These are shortcut buttons to either fully open or fully close the gripper.
Eric Nantel 16.4 383
Coleman Benson 24.1 384 **Sequencer**
385
386 The sequencer displays the gripper position as joint 7 (J7).
387
388 HINT: If you want the gripper to open or close on an object only at the end of a motion, create a separate frame where only J7 moves.
389
Coleman Benson 23.1 390 == 3D Model ==
Eric Nantel 16.4 391
Coleman Benson 23.1 392 The 3D model of the arm is shown as reference at all times. The display also includes a virtual plane to denote  the X-Y plane. The model updates based on the selection of the arm, gripper and finger configuration.
393
394 **View Controls**
395
Coleman Benson 24.1 396 Zoom: Shift + Middle Scroll
Coleman Benson 23.1 397
Coleman Benson 24.1 398 Rotate: Shift + Middle Mouse
399
400 Pan: None
401
Coleman Benson 23.1 402 == Manual Move ==
403
404 **Angular Control**
405
406 In angular mode, the user can control the angle of each joint
407
Eric Nantel 16.4 408 **Coordinates Control**
409
Coleman Benson 23.1 410 In coordinate control the user can control the cartesian position of the end effector
411
412 **End Effector Lock**
413
414 The orientation of the end effector can be locked.
415
Eric Nantel 15.2 416 == Direct Command ==
Eric Nantel 15.1 417
Eric Nantel 15.2 418 This section allow the user to send commands using the [[doc:ses-pro.lss-pro.lss-p-communication-protocol.WebHome]] directly if required.
Eric Nantel 15.1 419
Eric Nantel 15.2 420 A few things to keep in mind when using this:
Eric Nantel 15.1 421
Eric Nantel 15.2 422 * Make sure you know what you are doing as you can make the arm move in __dangerous__ ways.
423 * Sending commands does not require ‘#’ and ‘\r’ chars.
424 ** example for #2\r you should enter 2Q and press the "SEND" button
Eric Nantel 12.1 425 * The commands are validated, and it shows a notification in case of error.
Eric Nantel 15.2 426 * The replies of queries are shown in the text field below.
Eric Nantel 12.1 427
Coleman Benson 23.1 428 == Command Output ==
429
430 //{Coming Soon}//
431
Eric Nantel 16.3 432 == Telemetry ==
433
Eric Nantel 17.1 434 **Data to Display**
Eric Nantel 16.3 435
Coleman Benson 23.1 436 //{Coming Soon}//
437
Eric Nantel 17.1 438 **Display / Hide Actuator**
Eric Nantel 16.3 439
Coleman Benson 23.1 440 //{Coming Soon}//
441
Coleman Benson 24.1 442 == Sequencer ==
Coleman Benson 23.1 443
444 **Frames**
445
446 //{Coming Soon}//
447
448 **Record **
449
450 //{Coming Soon}//
451
452 **Edit **
453
454 Time, angles, gripper
455
Coleman Benson 24.1 456 //Alt + Left Click = Drag time//
Coleman Benson 23.1 457
458 **Reorder**
459
460 //{Coming Soon}//
461
462 **Play**
463
464 //{Coming Soon}//
465
466 **Errors**
467
468 //{Coming Soon}//
Eric Nantel 27.1 469 {{/comment}}
Copyright RobotShop 2018