top of page

UNIFIED ROBOTICS III: Manipulation

In this WPI Robotics Engineering course students were given a pre-built 2-Degree of freedom (DOF) planar arm and were tasked with writing software to manipulate it. The end goal of the course was to have the arm autonomously pick up objects on a conveyor belt with different weights and sort them based on that property.

The arm was connected to a development board made specifically for the arm which featured an atmega644p for the main processor and an atmega328p as a co-processor to drive pwm servos. The motor controllers were on the same board and featured DAC (Digital to Analog Converter) driven high current op-amps. These allowed for 10bit voltage resolution. The 10 bit DAC that was used was an LTC2634 and utilized SPI (Serial peripheral Interface) for communication.

The location and speed of the objects were determined by two sharp IR sensors mounted on the side of the belt. The first IR sensor determined the distance away for the base reference frame of the arm and was also used to capture the first timestamp for calculating speed. The second IR sensor was used to capture the second timestamp needed to calculate the average speed of the object along the belt.

Knowing the displacement away from the base reference frame and the speed of the object, the arm used inverse kinematics to move to an appropriate waiting position until the object was directly under the gripper. Once the arm waited the calculated time, the arm moved the gripper vertically down and grabbed the object. After that, the object was lifted to a standardized location where the weight of the object could be estimated.

The weight of the object was estimated using the charge that a single link took to move the object a known distance. This was accomplished by moving both links to a predefined angle, and then moving just the last link to a different predefined location while integrating current through the motor. This proved to be reasonably consistent after a fair bit of fine tuning.

Based off the weight estimation in the previous step, the arm then put the two different weight classes of objects in two different locations. The heavier object was slowly lowered to the table and then released. The light object was elegantly thrown the other direction as shown in the video.

Here is a video showing the final assembly picking up and sorting object on a moving conveyor belt.

Here is a video showing off the python program written to visualize the arm in real-time and give motion commands. The arm sending x,y positions of the arm joints to the python program over serial using forward kinematics and then the python program sends a desired x,y position for the tool. The atmega644p chip then uses inverse kinematics to determine the appropriate joint angles to achieve this position.


Featured Posts
Recent Posts
Archive
Search By Tags

Success! Message received.

© 2017 by Nick Sorensen

100 Institute Road Box 952, Worcester, MA 01609

bottom of page