200 likes | 353 Views
Control. Some Material taken from RobotSubsumption.pdf. Remember Where Are We Going?. Sumo-Bot competitions. Controlling Robot Movement Based on Photo-Resistor Readings. ' -----[ Constants ]--------------------------------------- LeftDark CON 108 RightDark CON 114
E N D
Control Some Material taken from RobotSubsumption.pdf
Remember Where Are We Going? Sumo-Bot competitions
Controlling Robot Movement Based on Photo-Resistor Readings ' -----[ Constants ]--------------------------------------- LeftDark CON 108 RightDark CON 114 LeftWhite CON 20 RightWhite CON 22 ' Average light sensor value LeftThreshold CON LeftWhite + LeftDark / 2 RightThreshold CON RightWhite + RightDark / 2 ' -----[ Variables ]---------------------------------------- timeLeft VAR Word timeRight VAR Word ' -----[ Main Routine ]------------------------------------ DO GOSUB Test_Photoresistors GOSUB Navigate LOOP
Code ' -----[ Subroutine - Test_Photoresistors ]-------------- Test_Photoresistors: HIGH 6 ' Left RC time measurement. PAUSE 5 RCTIME 6, 1, timeLeft HIGH 3 ' Right RC time measurement. PAUSE 5 RCTIME 3, 1, timeRight RETURN
Code ' -----[ Subroutine - Navigate to avoid light ]------------- Navigate: IF (timeLeft < LeftThreshold) AND (timeRight < RightThreshold) THEN PULSOUT 13, 650 ‘ go backwards PULSOUT 12, 850 ELSEIF (timeLeft < LeftThreshold) THEN PULSOUT 13, 800 ‘ go right PULSOUT 12, 600 ELSEIF (timeRight < RightThreshold) THEN PULSOUT 13, 600 ‘ go left PULSOUT 12, 800 ELSE PULSOUT 13, 850 ‘ go forwards PULSOUT 12, 650 ENDIF PAUSE 20 RETURN
Read photo- resistors backup turn right turn left go forward Finite State Machine (FSM) Representation both high left low right low both low
Controlling Robot Movement Based on Proximity Measurement ' {$STAMP BS2} ' {$PBASIC 2.5} ' -----[ Pins ]----------------------------------- Trigger PIN 0 Echo PIN 1 ' -----[ Variables ]----------------------------- samples VAR Nib ' loop counter pWidth VAR Word ' pulse width sonic sensor rawDist VAR Word ' filtered distance cm VAR Word inches VAR Word irDetectLeft VAR Bit irDetectRight VAR Bit pulseCount VAR Byte ' -----[ Constants ]----------------------------------- Trig10 CON 5 ' trigger pulse = 10 uS ToCm CON 30 ' conversion factor to cm
Code ' -----[ Main Routine ]----------------------------------- DO GOSUB Read_IR GOSUB Read_Sonar IF (sonarForward = 0) THEN GOSUB Forward_Pulse ELSEIF (irDetectLeft = 0) THEN GOSUB Turn_Left ELSEIF (irDetectRight = 0) THEN GOSUB Turn_Right ELSE GOSUB Forward_Pulse ENDIF LOOP
Code ' -----[ Subroutines ]------------------------------------- Read_IR: FREQOUT 8, 1, 38500 irDetectLeft = IN9 FREQOUT 2, 1, 38500 irDetectRight = IN3 RETURN Read_Sonar: rawDist = 0 FOR samples = 1 TO 5 ' take five samples PULSOUT Trigger, Trig10 ' 10 uS trigger pulse PULSIN Echo, 1, pWidth ' measure pulse rawDist = rawDist + (pWidth / 5) PAUSE 10 NEXT IF ( ((rawDist / ToCm) */ $03EF) ) < 36 THEN sonarForward = 0 ELSE sonarForward = 1 ENDIF RETURN
Code ' -----[ Subroutines ]-------------------------------------- Forward_Pulse: PULSOUT 13, 850 PULSOUT 12, 650 RETURN Turn_Left: PULSOUT 13, 650 PULSOUT 12, 650 RETURN
Code ' -----[ Subroutines ]-------------------------------------- Turn_Right: PULSOUT 13, 850 PULSOUT 12, 850 RETURN Back_Up: PULSOUT 13, 650 PULSOUT 12, 850 RETURN
No Obj Obj left Obj right Obj forward Read IR & Sonar Go forward turn right turn left go forward Finite State Machine (FSM) Representation
go forward turn left turn right backup Read photo- resistors How to Put It Together? No Obj Obj left Obj right Obj forward Read IR & sonar Go forward turn right turn left go forward both high left low right low both low
Possible Problems • Jerky or halting movement • Chase object over boundary • Never detect opponent • More?
Possible Solution • Subsumption Architecture A programming process by which one behavior subsumes, or over-rides another based on an explicit priority that we have defined. First described by Dr. Rodney Brooks in "A robust layered control system for a mobile robot,” IEEE Journal of Robotics and Automation., RA-2, April, 14-23, 1986. • FSM with exit conditions
Go forward Go backwards turn teft turn right read IR & sonar and set nextState variable read Photoresistors and set nextState variable check nextState variable and branch FSM
backup turn right turn left go forward read Photoresistors and set nextState variable check nextState variable and branch Read IR Alternative FSM Go forward turn right turn left go forward
Program High-Level Outline • Declare pin assignments, constants and variables • Initialize thresholds • Wait the required start delay • Read boundary line sensors and move accordingly • If the boundary line is not detected, read proximity sensors and move accordingly • Repeat steps 4 and 5 until completion
Main Loop Do GOSUB Read_Line_Sensors IF (lightLeft < leftThresh) AND (lightRight < rightThresh) THEN GOSUB About_Face ' boundary ahead ELSEIF (lightLeft < leftThresh) THEN GOSUB Spin_Right ' boundary to left ELSEIF (lightRight < rightThresh) THEN GOSUB Spin_Left ' boundary to right ELSE PULSOUT LMotor, LFwdFast PULSOUT RMotor, RFwdFast GOSUB Search_For_Opponent ENDIF Loop
Possible Enhancements • Optimize the position of the sensors • Optimize your mechanical design for fighting • Consider using lego components including motors • Design against being pushed out of the ring • Optimize the code to maximize bot performance • Evaluate tradeoffs in movement choices and sensor reading • Optimize the programming constructs that you use to increase processing speed • BRANCH value, (Case_0, Case_1, Case_2) • LOOKUP Index, (Value0, Value1, ...ValueN), Variable • LOOKDOWN Target, {ComparisonOp} [Value0, Value1, ...ValueN], Variable