Team 208-a decided early on that a stationary base was the desired design choice for the robot. With the stationary base, the robot will travel out into the playing area only during its turn to retrieve a block. Our design that we envisioned was much like a crane, with a vertically moving block, which a horizontally moving arm can extend from. For block extraction, the final end effector was inspired by a Jenga gun that was discovered on the internet. The idea of having the block punched out of the power was appealing because it didn't require long periods of time touching the tower. Rather it would immediately launch out a block and catch the block on the other side of the tower.
Functional Goals by Prioritization:
- Base does not move.
- Robot uses a solenoid to punch out block into catch.
- Able to drop down around the tower for block access.
The design goal for the robot was to give it the ability to scan/see the tower and make block selection automated. This required the use of 6 IR sensors, 3 in a row, 90 degrees from one another. The robot also will need to sense position, so potentiometers were implemented at each of the joints so position can be determined. In order to receive signals from the 6 IR sensors and the 4 potentiometers and one small servos and control the robot, and Arduino Mega was used. Stacked on top of the Mega was two motor shields, one dedicated to our largest and high current motor, while the other 4 were driven off the other shield. All electronics wereran on a 12 volt system, where power was supplied via a laptop charger.
Functional Goals and Prioritization:
- Robot can detect missing blocks and make block selection.
- Use familiar Arduino Mega
- Implement a higher bit ADC for improved resolution.
The software is essentially an event-driven state machine. The primary states are as follows
- Determine targets-
- decision making algorithm calculates a score for each potential target based on weighted values of the potential target's position within the tower and the sum of weighted values for neighbor blocks that were still present.
- wait-for_turn_signal
- goes into a while loop until the moderator signal reads HIGH
- PD_control-
- Implements a PD-control scheme to drive all motors motors
- polls potentiometer values to drive motors to current goal positions
- Move_vertically
- Implements a P-control scheme to drie only the two motors need to move the arm vertically.
- polls potentiometer values to drive motors to current goal positions
- Read_IR
- polls all IR sensors and calculates an average value for the IR sensor readings at each row of the tower.
- Scan Tower
- Primary mapping subroutine
- calls move_vertically, PD_control , and read_IR to move to each row and scan the blocks in each row
- Extract_block
- calls move_vertically and PD_control subroutines to get into target position
- activates the solenoid relay
- calls move_vertically and PD_control subroutines to move into our home position
- dumps block via servo control
- calls move_vertically and PD_control subroutines to move into our start position
Functional Goals and Prioritization:
- Implement PD control on all motors.
- Program decision making algorithm to select target blocks.
- abstract all subroutines into callable functions to implement as needed.
- Each subroutine, except decision making, is event driven
- all subroutines are driven by the polled potentiometer values, except the read_IR subroutine, which is driven by polling the IR sensors for a programmed number of IR sensor readings.
- Only once a desired state is reached does the system move to a new state and progress forward through the control system.