Two-axis Robotic Arm

3D Printing
FPGA
Robotics

A two-axis, fully 3D printed robot arm that is controlled by an FPGA. We implemented a system that takes an image provided by a user, extracts the primary lines using cascaded computer vision algorithms, and draws the image with an arm, whose movement control is computed completely on an FPGA. I implemented the inverse kinematics, which translates the coordinates in the x- and y- axes to angles that the arm joints needed to achieve. We chose to put the computation on an FPGA for the speed of parallel computation and learning experience. We used SystemVerilog with 64-bit double-precision floating-point computations for the most precision that current technology provides. Upon review of the literature, there exist multiple ways to determine the joint angles of a kinematic chain given a target position. The three that I focused on testing and implementing in a Python simulation included Forward and Backward Inverse Kinematics (FABRIK), the Jacobian Pseudoinverse (which simply becomes the Jacobian inverse due to the square nature of the jacobian matrix for two joints in two dimensions), and a simple geometric method. I also designed the physical arm enclosure and learned about different mechanical design techniques: how to design for additive manufacturing and the importance of gear ratios in the resolution of the final project. Many issues with the final product stemmed from the aforementioned lack of resolution. Due to the nonlinearity of the SCARA topology when moving joint angles, we found it difficult to draw a straight line when the system constrained the minimum distance between points to a large value on a scale of 0.25 inches. Plotting points closer together effectively eliminates the nonlinearity because when you “zoom into” a line far enough, it seems locally linear, much like taking the derivative evaluated at a particular point. What you can see in the simulation is the arm following very finely plotted points that the Jacobian pseudo-inverse method could follow due to the high fidelity of the simulation. The fault in this is its unrealistic representation of the real world. When I modified the simulation to plot based on moving each joint by 1.8 degrees, emulating our stepper motors, similar results to the real world movement were seen in the simulation.

0 Lifts 

Artifacts

Name Description
Project Github The link to the project Github. This contains mechanical drawings and files as well as all source code.   Link
Video A project recap video.   Link