top of page

The Team

This robotics class team of myself, Harrison James, and Robert Starr worked together very well and found great success throughout the term. Together, we navigated Matlab for the first time and learned a lot about matlab functions, forward and inverse kinematics, and serial robot control. Unlike other projects, most of this project was a team effort, and so I can't really point to many components and say "I did that". This speaks to the high quality of the entire team, it was great.

Harry James
Robert Starr

Before we get too far, it will be useful to establish the conventions defined by the team. On this page and throughout our lab reports during the term, we used the image to the right to talk about each joint/end effector. This naming convention helped all team members be on the same page when anomalies arose.

​

The "base frame" coordinates that will be referred to is from the frame of the Shoulder. Another name for this is task space points. All of the intermediate frames (the next step!) are used for calculations and don't translate to real life as easily, and so are rarely discussed.

 

Also- a note on notation: c2  refers to cosine of theta2, or the variable angle of the elbow.

RBE 3001 View.jpg
diagram.PNG
DH Parameters

These were the frames our team decided to assign to each joint. Each joint needed its own intermediate coordinate system so that a transformation from joint variables to joint and end effector position could be generated. They followed these rules:

  • Each joint's Z axis is the axis of rotation

  • Each X axis must be normal to previous Z axis

​

These transformations were used to generate the homogeneous transformation matrices.

DHTable.PNG
FinalTransformations.PNG

For the moment, let's leave the math at that. Check out the team report for more details on forward kinematics

Multiplying these matrices together (left to right) results in the final transform from base frame to end effector. Eureka, forward kinematics!

InitialTransformations.PNG

Generated by placing DH table variables in general form transform

Software Setup- Matlab, Nucleo Board Firmware

One of the first difficult MATLAB tasks required was to plot our robot joint movement in 3d space. Before we could do anything, we needed to communicate between MATLAB and the Nucleo board (the microcontroller for this project). 

​

I'll explain it like the course staff did to us: picture a mailbox. The location of this mailbox's memory address is specified before runtime, and is agreed upon by both MATLAB and the firmware. MATLAB can put data in the mailbox or read what is currently in the mailbox. The firmware does the same thing- it can use data in the mailbox to perform operations or write its own data into the mailbox.

​

For example, if we want the robot to move to a specified position, we write to the mailbox in MATLAB, and the firmware will apply PID gains appropriately and then move the servos the specified amount. To measure the output, the firmware can write the encoder positions to the mailbox which can in turn be read and plotted in MATLAB

Post Box
positonplot.PNG
interesting_shape.PNG
Let there be plots!

We will be honest- one of the most difficult part of this project for this team was all of the plots we had to generate along the way.

 

First, it started out just being the end effector position at one point in time. Then it evolved to the whole arm- and then live plotting the whole system in 3d space. 

​

We learned how to use the drawnow and the holdon/holdoff functionality. Also to get proper timing, we had to transition all of our code to use tic and toc. We used plot3d for 3d plots, reading sensor data as we sent the servos to targets.

graph1.PNG
bottom of page