RIGHTY THE ARM
Construction of Righty, the robotic arm, was quite simple. First, a motor was fastened to the top of the brick, nice and snug, so that only the actual motor moves/rotates, and that the motor just peaks out of the top of the brick. Two beams are then used to connect the motor to the base of another motor, which is connected to the end effector. We made the end effector from a motor that changes the orientation of the pencil. The pencil is held tight, sandwiched by two gears, one of which is connected to the end effector. This gives it a greater range of motion
Righty has a wide array of motion, and is easily able to cover the entirety of an 8" by 11" sheet of paper. Its full range of motion and use of the end effector can be seen in the videos (1 and 2) below
Challenge 2 was to write a code that would calculate the position of the end effector as the two parts of the arm were manually moved. This was done using simple trigonometry, with the x displacement being calculated using the length of the first motor times the cosine of how much its rotated, plus the length of the second motor times the cosine of how much both motors have rotated. Y displacement was calculated in a similar fashion, using sine instead of cosine. We had to ensure that there was a baseline "0" degree straight line, to use as a reference frame for the other degree measures, and to set up an x-y grid to better understand the position. To do this, we oriented the position of each motor until it read close to 0, and then reassembled the arm in a straight line, using the tan pegs as a reference for 0 degrees. As seen in the video (video 3), this code was very effective at giving a reading of the end effector's position, based on the little x-y grid we had drawn in. While there are slight errors due to the motor (there is some room for the link to shift in place while the actual orientation of the motor doesn't change), the basic position of the end effector is still accurate.
Challenge 3 is where things got a little hairy for Righty. The plan was to use a user inputted variable that would record how many positions the robot was moved manually. This was done using a while loop. This while loop has a pause for 5 seconds. So, every 5 seconds, the robot would record the angle of each motor based on where the user has moved it to. This would be recorded in 2 different lists, motor1_pos and motor2_pos . For example, a list would look like [p1 p2 p3 p4] at the end of 4 iterations. This implementation worked out fine.
In the next step, we used another while loop that would go back through the list saved and have the robot move to that position, using simple python commands. For whatever reason, Righty was simply unable to do this. As seen in our video, it just crumbles in on itself. We even tried controlling the direction of rotation, thinking that the error was Righty's - that he was trying to rotate parts through the brick's space, causing them to collide. But even that did not fix it. We believe the logic of our code is correct and have scoured our code but cannot think of a reason as to why this is occurring.
Righty's full armspan
Close up view of the links connecting each of the motors
Close up view of how the first motor is fixed to the mindstorms brick
Challenge 1: To demonstrate range of motion
Challenge 1: To show end effector movement
Challenge 2: Move end effector and calculate positions
Challenge 3: To record and playback