Internet Controlled Robotic Arm
Internet Controlled Robotic Arm
Saturday, November 19, 2011
From the Rusty Nail Workshop Lab . . .
The motivating factor for the construction of this robotic arm originally came from a tour of the Volvo factory in Göteborg, Sweden. It was during this factory tour that I first saw the massive robotic arms used to pick up car parts and weld them on to the car body. With sparks flying, these were some of the most impressive robots I had ever seen, and if you ever have a chance, take the tour!

(Photo from Volvo Car Corporation)

After trying to implement the inverse kinematics code written by Oleg from Circuits at Home, I quickly came to realize that supplying the arm with x, y, and z coordinates was not the most interesting or practical way to control it. Instead, I came across Travis Smith's internet controlled robotic arm. I had actually conceived of an internet-controlled arm shortly before I purchased it, and this was the evidence needed to convince me that an arm could be controlled over the internet.

After the arm was functional, I continued to work out a few bugs where the Ethernet shield would crash if too many commands were received too fast. By allowing only one command every few seconds from the web site, this problem was eventually solved. I also added a laser pointer to help indicate the direction the arm was pointing, as well as a distance sensor (probably pulled from an automatic faucet), just for fun. The distance sensor is not linear, so I had to model the performance in a simple quadratic equation. It is fairly accurate now, although it still has limitations at far and very close distances.
I contemplated adding a second video camera to show the view from the top, but not only would this increase the project cost, this wouldn't challenge the user as much. I wanted this to be a fun experience for the users, as well as a fun construction project on my end. I eventually added some simple code to prevent the arm from moving beyond some safe limits that I set, which prevented the user from pulling out the servo cables from the servo control board.

To prevent users from trying to put the arm through the table or floor, I picked up the inverse kinematics code again and reviewed the articles written on the web regarding forward kinematics. This was much easier than the inverse kinematics derivation, and I was able to generate a forward kinematics equation to drop into my existing code. After some changes necessitated by the orientation and performance of my arm, the forward kinematics equation is able to prevent the user from putting the end of the gripper through the table. You can see the spreadsheet I created with the equation here. You can download the Visio diagram I made here (same as the picture below).

The entire code for the Arduino board is available here. There are a number of improvements that I'd like to make to the arm, but that would only delay the release of the web site to the general public. I can't wait to see what users can do with the arm!
This was a very rewarding project, and I hope you enjoy using it. As always, drop me a line if you have any questions or suggestions.
You can try out the arm here.
Enjoy!