Project 2: Get A Grip


The objective of this project was to design a system for securely transferring a surgical instrument to an autoclave for sterilization

After understanding and throughly reading through the project at hand, we began the project by individually identifying the objectives, constraints, and functions. After this we put our ideas together and generated the primary and secondary functions of the system.

We then began a morphological analysis, identifying the means of different functions of the arm such as picking up, placing and facilitating sterilization of the container.

A comprehensive and efficient container design was very important to achieve our objective of transporting and sterilizing the medical tool. We began the container design with some concept sketches.

sketch1.jpg

sketch2.jpg

In this project I took on the role as the administrator for the computing sub team where our goal was to design a computer program for controlling movement of a robotic arm to pick up and transfer a container for sterilization.

We began by creating concept workflows to sort out the functions, conditionals, and design of our program. After comparing and contrasting, we made notes on what may be the most efficient way of completing our task. We then created a pseudocode that highlighted the high level workflow of our program.

One big aspect of this project was the use of muscle sensor emulators to control the robotic arm to perform specific functions. We concluded what functions would occur when the sensors reach a certain threshold.

Preliminary program tasks were planned out and designed by each individual sub-team member in which peer reviews were completed.

Screen Shot 2021-12-01 at 10.29.26 PM.png

Throughout the final weeks, the sub-team worked together to compile and develop the final program, including different functions for each action, including:

def find_target(containerID): # function for identifying container ID target location
    # first row: small red, small green, and small blue target locations respectively
    # second row: big red, big green, and big blue target locations respectively
    target = [[-0.604, 0.239, 0.439], [0.011, -0.65, 0.439], [-0.011, 0.65, 0.439],
             [-0.4, 0.166, 0.2], [0.0, -0.442, 0.211], [0.0, 0.455, 0.228]]

    if containerID == 1: #if container ID is 1, get coordinates for "small red"
        return target[0]
    
    elif containerID == 2: #if container ID is 2, get coordinates for "small green"
        return target[1]
    
    elif containerID == 3: #if container ID is 3, get coordinates for "small blue"
        return target[2]
    
    elif containerID == 4: #if container ID is 4, get coordinates for "big red"
        return target[3]
    
    elif containerID == 5: #if container ID is 5, get coordinates for "big green"
        return target[4]
    
    elif containerID == 6: #if container ID is 6, get coordinates for "big blue"
        return target[5]
def move_effector(target): # function for moving end effector depending on emg muscle sensor values
    print("Waiting to move... (both arms up)")
    print("NOTE: MUST RETURN HOME BEFORE MOVING TO AUTOCLAVE\\n")
    
    
    while True: 
        L_sensor = arm.emg_left()
        R_sensor = arm.emg_right()
        
        if L_sensor > 0.6 and R_sensor > 0.6: # executes function when both arms are up
            arm.move_arm(target[0], target[1], target[2]) #moves arm to desired target location
            time.sleep(1.5)
            break