Monthly Archives: June 2014

New Robot Arm

To make the next iteration of the project, I am currently working with the M100RAK V2 robot arm from Robotshop. The M100RAK is  a step up from the OWI robotic arms that I used previously. It’s also roughly ten times more expensive if you also count the fact that the OWI arms require lots of modification to make them accurate enough.


The M100RAK (@$598) is intermediate-sized, this means that it has a reach of ~24inches at full extension. It has a similar reach to that of small industrial robotic arms. However, those are all more expensive (educational versions start at  ~$3800) and (oftentimes) not as straightforward to operate.

The M100RAK V2 is shipped as a kit that needs to be assembled. Since the kit I received differs from the M100RAK V1, most of the parts are different and the kit did not yet seem ready to ship. The kit I received only included  piping with 5/8″ diameter.  I had to go to the hardware store to buy 1/2″ piping and cut it to size because certain fittings required the 1/2″ diameter. Some other stuff (such as the too-short shafts of the large gears) simply did not fit the designated components. However, this does not seem to affect the operation of the arm. I have no doubts that I assembled the robot arm correctly but was still left with lots of components that did not fit. This is obviously weird. I exchanged some messages with the Robotshop tech support. I did not implement the suggestions they made since they did not really make sense. In any case, I hope that they  will improve the kit and the assembly instructions.

When the arm was assembled, I partially disassembled it and one by one connected three servos to the Lynxmotion SSC-32 servo controller and set them to position 1500 before re-assembling the arm. The SSC-32 can move up to 32 servos simultaneously (with appropriate power supply of course). And for somebody who’s been messing around with extremely low cost electronics before, the SSC-32 is a total luxury.

You can access SSC-32 via Python as follows:

import serial
ser = serial.Serial("/dev/tty.usbserial",115200)
ser.write("#0 P1500 #1 P1500 #2 P1490 T1000\r")

#0 is the first servo, #1 is the second servo, and #2 is the third servo. The positions where it is supposed to move are marked with a P. So in this example it is P1500, P1500, and P1490. T1000 means that it will complete the move in 1000 milliseconds (1 second). If you do not put this parameter, it will move at its fastest. This is relatively loud and abrupt. I prefer a more easy-going and quieter speed .   The positions are more or less arbitrary (set by you), however, somewhere I read that P1500 is the middle.  I found that 255-260 is about 90 degrees.  So turning a a servo from the neutral position to about 90 degrees would require you to enter P1760.

The SSC-32 also has a command to tell you when it is busy and when it is not. This can be checked in a while loop in Python:

ser.write("#1 P1500 #2 P1500 T6000\r")
ser.write("Q\r")        #the command Q checks whether the machine is busy or not.
data =      #this reads the first character of the serial response coming from SSC-32 
while data == "+":      #if this character is a "+", the program will check again. 
    ser.write("Q\r")    #are you done yet??
    data =  #response
print "motion done!"    #if the motion is done, the response is "." 
                        #and the program exits the while loop. 

This is it for now. The next post will be about inverse kinematics using the M100RAK. It will be fun.