![]() |
|
George Vastianos |
---|
Dipl. from Electronics Department, Faculty of Technological Applications, Technological Educational Institute of Piraeus, Greece www.vastianos.com |
Table of contents
0. Abstract
1. Robot's hardware
1.1 The AT90S2313 microcontroller
1.2 Hardware implementation of SCROB robot
2. Robot's software
2.1 Subsumption control network
2.2 Decide behavior
2.3 Escape behavior
2.4 Follow behavior
2.5 Software implementation of SCROB robot
2.5.1 Robot's software driver
2.5.2 Implementation of photovoric attitude
2.5.3 Implementation of photophobic attitude
3. Robot's photo gallery
4. References
Keywords: Artificial intelligence & life, bahavior networks, subsumption architecture, behavior-based robots, mobile robotic systems, micro-robotics.
0. Abstract
Subsumption architecture is the result of work by professor Rodney Brooks and the Mobile Robotics Group at the MIT Artificial Intelligence Lab. Brooks' subsumption architecture arose from an attempt to escape the confines of traditional robot control methods and provides a way of combining distributed real-time control with sensor-triggered behaviors. SCROB is a micro-robot that uses subsumption architecture to implement a variety of different attitudes that are consisted from a hierarchical group of behaviors. SCROB's brain is based on a RISC microcomputer that is capable to execute four millions instructions per second. The robot's subsumption control network is implemented by using the software strategy of the cooperative multitasking. The parallel execution of the behaviors is achieved from a group of fifteen finite state machines (FSMs) that are divided in three behaviors.
Notice: This paper is not a tutorial in subsumption architecture. If you don't have background knowledge about this architecture read the references (chapter 4) for further reading...
1. Robot's hardware
1.1 The AT90S2313 microcontroller
The AT90S2313 is a low-power CMOS 8-bit microcontroller based on the AVR RISC architecture. By executing powerful instructions in a single clock cycle, the AT90S2313 achieves throughputs approaching 1 MIPS per MHz allowing the system designer to optimize power consumption versus processing speed.
The AVR core combines a rich instruction set with 32 general-purpose working registers. All the 32 registers are directly connected to the Arithmetic Logic Unit (ALU), allowing two independent registers to be accessed in one single instruction executed in one clock cycle. The resulting architecture is more code efficient while achieving throughputs up to ten times faster than conventional CISC microcontrollers.
The AT90S2313 provides the following features: 2K bytes of In-System Programmable Flash, 128 bytes EEPROM, 128 bytes SRAM, 15 general-purpose I/O lines, 32 general-purpose working registers, flexible timer/counters with compare modes, internal and external interrupts, a programmable serial UART, programmable Watchdog Timer with internal oscillator, an SPI serial port for Flash Memory downloading and two software selectable power-saving modes. The Idle Mode stops the CPU while allowing the SRAM, timer/counters, SPI port and interrupt system to continue functioning. The Power-down Mode saves the register contents but freezes the oscillator, disabling all other chip functions until the next external interrupt or hardware reset.
The device is manufactured using Atmel’s high-density nonvolatile memory technology. The on-chip In-System Programmable Flash allows the program memory to be reprogrammed in-system through an SPI serial interface or by a conventional nonvolatile memory programmer. By combining an enhanced RISC 8-bit CPU with In-System Programmable Flash on a monolithic chip, the Atmel AT90S2313 is a powerful microcontroller that provides a highly flexible and cost-effective solution to many embedded control applications.
The AT90S2313 AVR is supported with a full suite of program and system development tools including: C compilers, macro assemblers, program debugger/simulators, in-circuit emulators and evaluation kits.
1.2 Hardware implementation of SCROB robot
The robot's brain based on the AT90S2313 AVR microcontroller that described above. The microcontroller (IC2) uses a quartz of 4MHz (X1) to achieve a command-execution speed close to 4MIPS (Millions Instructions Per Second). Two photoresistors (PR1,2) have been used as eye sensors and four small switches (SW1,4) as whisker sensors. Also a button (SW5) is used as a special sensor for the training process of the robot. The actuators of the robot are only two: a dc motor (M1) that is installed on a "Move forward/Move Backward-Turn" mechanical chassis and a small piezo electric buzzer (BZ1) that is used for sound production. The "Move forward/Move Backward-Turn" mechanical chassis have been constructed from pieces of an old toy car. This type of chassis is very famous in small toy cars and offers an X-Y locomotion with only one motor!!! The electronic circuit of the robot is the following:
PART | DESCRIPTION |
SW1-4,6 | SPST SWITCHES |
SW5 | SPST BUTTON |
C1,2 | 100nF |
C3 | 330nF |
C4,5 | 22pF |
C6,7 | 4700uF/25V |
D1-4 | 1N4148 |
PR1,2 | PHOTORESISTORS |
R1 | 10K/0,25W |
X1 | 4MHz QUARTZ |
TR1 | BC546 NPN TRANSISTOR |
IC1 | L293B DOUBLE H-BRIDGE |
IC2 | AT90S2313 AVR RISC MICROCONTROLLER |
M1 | DC MOTOR |
BZ1 | PIEZO ELECTRIC BUZZER |
BT1-4 | 1,5V AA BATTERIES |
As you see above, the microcontroller (that has no A/D converter) is connected directly with the photoresistors through two capacitors (C1,2). The way that the microcontroller reads the photoresistors' values based on the RC timing circuits' theory. The microcontroller charges the capacitors for a constant time (assuming that the photoresistors have the maximum resistance) and then measures the time that each capacitor needs to discharge through the photoresistor that is connected to it. The measured times express the luminance values that the photoresistors read.
To save space and make the design simpler, the microcontroller uses its internal pull-up resistors (that are purposed for output-pin configurations) and is connected directly with the switches (sensors) that lead the pull-up resistors to logical ground.
The microcontroller drives its actuators through two amplifiers. The motor is controlled from an H-Bridge amplifier that is embedded in the IC1 chip. The H-Bridge type of amplifiers consisted from four transistors and used to control dc motors. The L293B (IC1) includes two embedded H-Bridge amplifiers. The piezo electric buzzer is controlled from a single-transistor "common-emitter" amplifier that uses a NPN transistor (TR1).
The diodes D1-D4 are used as "flyback" diodes to protect the internal transistors of the H-Bridge from the voltages spikes that are caused during the switching of the motor (inductive load). Also the two large capacitors C1,2 are used to buffer the power supply of the microcontroller from the motor transients and they offer stability of the microcontroller's operation.
2. Robot's software
2.1 Subsumption control network
During the software development process, two different programs were developed to test the subsumption architecture on SCROB's platform. The first program turns SCROB to a photovore and the second to a photophobe robot. In both programs the hierarchy of behaviors described from the same subsumption control network. However there are some minor differences inside the behaviors' structure in each case.
This diagram shows only the hierarchy of the behaviors and their connection with the sensors. Detailed structure descriptions of each behavior and how these are implemented using finite state machines can be found in the following chapters.
2.2 Decide behavior
Decide behavior is the behavior with the highest priority in the network. This behavior "decides" if it's worth for the robot to move around or just stay in its current position. The criterion for this decision is the difference between the current luminance level of the surrounding environment and the threshold luminance level. The threshold luminance level is defined during the robot's training process (read more in chapter 2.5).
In case of the photovoric attitude, the main goal of the robot is to find a place where the LIGHT level is greater than a desired level (threshold). Only in this case the robot will be "satisfied" and will stop move, otherwise it will continue to move around with the "hope" that maybe it will reach its goal... The "decide" behavior for the photovoric attitude is consisted by three finite state machines and based on the condition that the value of the front eye must be GREATER than the threshold value. The structure of this behavior for the photovoric attitude is illustrated bellow:
In case of the photophobic attitude, the main goal of the robot is to find a place where the DARK level is greater than a desired level (threshold). Only in this case the robot will be "satisfied" and will stop move, otherwise it will continue to move around with the "hope" that maybe it will reach its goal... The "decide" behavior for the photophobic attitude is consisted by three finite state machines and based on the condition that the value of the front eye must be LOWER than the threshold value. The structure of this behavior for the photophobic attitude is illustrated bellow:
2.3 Escape behavior
Escape behavior is the behavior with the medium priority in the network. The role of this behavior is to protect the robot's existence from collisions with walls or objects that may appear in front of the robot during its route. This behavior uses the whisker sensors that are activated when they touch objects. This behavior is light independent and for this reason it's used exactly the same in both attitudes. The "escape" behavior is consisted by seven finite state machines and is activated only when the robot is moving (so the "decide" behavior is inactive). The structure of this behavior is illustrated bellow:
2.4 Follow behavior
Follow behavior is the behavior with the lowest priority in the network. This behavior makes the robot to "follow", track or seek for a "light" or "dark" source. This behavior is important for the robot and helps it to reach the final goal for a bright or dark place… The criterion for this behavior is the difference between the current luminance levels of the surrounding environment on the front and back eyes.
The "follow" behavior for the photovoric attitude is consisted by five finite state machines and based on the condition that the robot must move forward only when luminance value of the front eye is GREATER than the value of the back eye. The structure of this behavior for the photovoric attitude is illustrated bellow:
The "follow" behavior for the photophobic attitude is consisted by five finite state machines and based on the condition that the robot must move forward only when luminance value of the front eye is LOWER than the value of the back eye. The structure of this behavior for the photophobic attitude is illustrated bellow:
2.5 Software implementation of SCROB robot
The programming language that was used for the development of the robot’s software was the BASCOM-AVR basic (Version 1.11.6.2) of MCS Electronics. To make easier the development of the new programs for the SCROB platform, the routines for the robot’s initiation, training, sensing and acting have been embedded in the scrob_drv.bas file that works as the robot’s software driver. So when the user starts a new program for the robot, includes the $include "scrob_drv.bas" directive in the source code and all the necessary code for the robot’s control is embedded automatically.
In the driver’s file the Init() subroutine is used for the initiation and is executed automatically during start-up. The Train() subroutine is the second routine that is executed (after the initiation routine) and is used to set the threshold value. During the execution of this routine the train process starts with three short beeps, after this the user must press the train button and hold it pressed, then the buzzer starts to chirp. At this point the microcontroller starts to read the luminance value of the front eye. The chirp continues while the user holds the button pressed. When the button is released, the current luminance value is defined as the threshold value and the train process finishes with a long beep. The Sense() subroutine is used from the user’s program to read the sensors and the Act() subroutine is used also from the user’s program to control the motor actuator. During start-up, after the execution of the initiation and train subroutines the robot’s control passed to the user’s program. The source code of the software driver is listed in chapter 2.5.1.
The two programs that have been developed to implement the photovoric and photophobic attitude and are based on the subsumption architecture are consisted by three parts. The first part is the group of the behavior subroutines. Each behavior subroutine has been written by using the finite state machine diagrams and uses two "personal" variables to store the number of its current active finite state machine and the value of its "local" output. The second part is the subroutine of the cooperative multitasker’s scheduler. This routine is the kernel of all the software that runs in parallel all the processes. The scheduler starts by executing the sense routine of the software driver and continues with the execution of all the behavior subroutines. After the execution of the behavior subroutines the results are stored in the "personal" output variables. Then the scheduler runs the Arbitrate() subroutine. This routine is the third part of the software and within this routine the structure of the subsumption control network is defined. So the arbitrate routine reads all the "personal" output variables and according to the hierarchy decides which output will be forwarded to the robot’s actuators. This allows us to design behaviors that are completely independent from the rest behaviors and can be added or removed easily without reconfiguration of all the software. The only part that needs to be reconfigured is the arbitrate subroutine. At the end the scheduler forwards the selected (by the Arbitrate() subroutine) output to the robot’s motor actuator by executing the Act() subroutine. The source codes of the photovore and photophobe programs are listed in chapters 2.5.2 - 2.5.3.
2.5.1 Robot's software driver
'*************************** '* SCROB - Robot * '* Driver Module * '* R&D by George Vastianos * '*************************** 'Declare module's subroutines Declare Sub Init Declare Sub Sense Declare Sub Act Declare Sub Train 'Declare sensors' variables Dim Button As Bit Dim Front_whisker As Bit Dim Back_whisker As Bit Dim Front_eye As Word Dim Back_eye As Word 'Declare actuators' variables Dim Motor As Byte Const Idle_mode = 0 Const Stop_move = 1 Const Move_forward = 2 Const Move_backward_turn = 3 'Declare general variables Dim Threshold As Word 'Init robot Init 'Train robot Train 'Exit module Goto Exit_module Sub Init '*** Configure robot's sensors *** Config Portb = Input '> Button sensor Set Portb.0 Button_pin Alias Pinb.0 '> Front whisker sensor Set Portb.1 Front_whisker_pin Alias Pinb.1 '> Back whisker sensor Set Portb.2 Back_whisker_pin Alias Pinb.2 '> Front eye sensor Reset Portb.3 Front_eye_pin Alias Pinb.3 '> Back eye sensor Reset Portb.4 Back_eye_pin Alias Pinb.4 '*** Configure robot's actuators *** Config Portd = Output '> Motor actuator Reset Portd.0 Reset Portd.1 Motor_a_pin Alias Portd.0 Motor_b_pin Alias Portd.1 '> Speaker actuator Reset Portd.2 Speaker_pin Alias Portd.2 End Sub Sub Sense '*** Read sensors *** '> Button sensor Button = Not Button_pin '> Whisker sensors Front_whisker = Not Front_whisker_pin Back_whisker = Not Back_whisker_pin '> Eye sensors Config Pinb.3 = Output Config Pinb.4 = Output Set Portb.3 Set Portb.4 Waitms 10 Config Pinb.3 = Input Config Pinb.4 = Input Reset Portb.3 Reset Portb.4 Dim Looking As Bit Front_eye = 65535 Back_eye = 65535 Do Config Pinb.3 = Output Config Pinb.4 = Output Config Pinb.3 = Input Config Pinb.4 = Input If Front_eye_pin = 1 Then Decr Front_eye If Back_eye_pin = 1 Then Decr Back_eye Looking = Front_eye_pin Or Back_eye_pin Loop Until Looking = 0 End Sub Sub Act '*** Write actuators *** '> Motor actuator Select Case Motor '>> Stop move Case Stop_move: Reset Motor_a_pin Reset Motor_b_pin '>> Move forward Case Move_forward: Reset Motor_b_pin Set Motor_a_pin '>> Move backward Case Move_backward_turn: Reset Motor_a_pin Set Motor_b_pin End Select End Sub Sub Train '*** Define threshold light level *** Dim Count_a As Integer Dim Count_b As Integer '> Start train: 3 short beeps For Count_a = 1 To 3 For Count_b = 1 To 500 Set Speaker_pin Waitus 150 Reset Speaker_pin Waitus 150 Next Count_b Waitms 50 Next Count_a '> Wait until button is pressed Bitwait Button_pin , Reset '> Read front eye sensor until button is released Do Sense Threshold = Front_eye For Count_a = 1 To 100 Set Speaker_pin Waitus 50 Reset Speaker_pin Waitus 50 Next Count_a Loop Until Button = 0 '> Train finished: 1 long beep For Count_a = 1 To 2000 Set Speaker_pin Waitus 300 Reset Speaker_pin Waitus 300 Next Count_b Wait 1 End Sub Exit_module:
2.5.2 Implementation of photovoric attitude
'*************************** '* SCROB - Robot * '* Photovoric attitude * '* R&D by George Vastianos * '*************************** 'Include robot's driver $include "scrob_drv.bas" 'Declare behaviors' subroutines, variables & constants '*** Decide behavior *** Declare Sub Decide Dim Decide_state As Byte Decide_state = 1 Dim Decide_output As Byte Decide_output = Idle_mode '*** Escape behavior *** Declare Sub Escape Dim Escape_state As Byte Escape_state = 1 Dim Escape_output As Byte Escape_output = Idle_mode Dim Escape_duration As Byte Escape_duration = 0 Const Duration_max = 10 '*** Follow behavior *** Declare Sub Follow Dim Follow_state As Byte Follow_state = 1 Dim Follow_output As Byte Follow_output = Idle_mode 'Declare arbitrate subroutine Declare Sub Arbitrate '*** SCHEDULER OF COOPERATIVE MULTITASKER *** Scheduler: Do '> Read sensors Sense '> Behaviors Decide Escape Follow '> Subsumption Arbitrate '> Write actuators Act Loop End Sub Decide '*** Decide behavior *** Select Case Decide_state Case 1: If Front_eye > Threshold Then Decide_state = 2 Else Decide_state = 3 End If Case 2: Decide_output = Stop_move Decide_state = 1 Case 3: Decide_output = Idle_mode Decide_state = 1 End Select End Sub Sub Escape '*** Escape behavior *** Select Case Escape_state Case 1: If Front_whisker = 1 Then Escape_state = 2 Else Escape_state = 3 End If Case 2: Escape_duration = Duration_max Escape_output = Move_backward_turn Escape_state = 1 Case 3: If Back_whisker = 1 Then Escape_state = 4 Else Escape_state = 5 End If Case 4: Escape_duration = Duration_max Escape_output = Move_forward Escape_state = 1 Case 5: If Escape_duration = 0 Then Escape_state = 7 Else Escape_state = 6 End If Case 6: Decr Escape_duration Escape_state = 1 Case 7: Escape_output = Idle_mode Escape_state = 1 End Select End Sub Sub Follow '*** Follow behavior *** Select Case Follow_state Case 1: If Front_eye > Back_eye Then Follow_state = 2 Else Follow_state = 3 End If Case 2: Follow_output = Move_forward Follow_state = 1 Case 3: If Front_eye < Back_eye Then Follow_state = 4 Else Follow_state = 5 End If Case 4: Follow_output = Move_backward_turn Follow_state = 1 Case 5: Follow_output = Idle_mode Follow_state = 1 End Select End Sub Sub Arbitrate '*** Implementation of the Subsumption Control Network *** If Decide_output <> Idle_mode Then Motor = Decide_output Elseif Escape_output <> Idle_mode Then Motor = Escape_output Elseif Follow_output <> Idle_mode Then Motor = Follow_output End If End Sub
2.5.3 Implementation of photophobic attitude
'*************************** '* SCROB - Robot * '* Photophobic attitude * '* R&D by George Vastianos * '*************************** 'Include robot's driver $include "scrob_drv.bas" 'Declare behaviors' subroutines, variables & constants '*** Decide behavior *** Declare Sub Decide Dim Decide_state As Byte Decide_state = 1 Dim Decide_output As Byte Decide_output = Idle_mode '*** Escape behavior *** Declare Sub Escape Dim Escape_state As Byte Escape_state = 1 Dim Escape_output As Byte Escape_output = Idle_mode Dim Escape_duration As Byte Escape_duration = 0 Const Duration_max = 10 '*** Follow behavior *** Declare Sub Follow Dim Follow_state As Byte Follow_state = 1 Dim Follow_output As Byte Follow_output = Idle_mode 'Declare arbitrate subroutine Declare Sub Arbitrate '*** SCHEDULER OF COOPERATIVE MULTITASKER *** Scheduler: Do '> Read sensors Sense '> Behaviors Decide Escape Follow '> Subsumption Arbitrate '> Write actuators Act Loop End Sub Decide '*** Decide behavior *** Select Case Decide_state Case 1: If Front_eye < Threshold Then Decide_state = 2 Else Decide_state = 3 End If Case 2: Decide_output = Stop_move Decide_state = 1 Case 3: Decide_output = Idle_mode Decide_state = 1 End Select End Sub Sub Escape '*** Escape behavior *** Select Case Escape_state Case 1: If Front_whisker = 1 Then Escape_state = 2 Else Escape_state = 3 End If Case 2: Escape_duration = Duration_max Escape_output = Move_backward_turn Escape_state = 1 Case 3: If Back_whisker = 1 Then Escape_state = 4 Else Escape_state = 5 End If Case 4: Escape_duration = Duration_max Escape_output = Move_forward Escape_state = 1 Case 5: If Escape_duration = 0 Then Escape_state = 7 Else Escape_state = 6 End If Case 6: Decr Escape_duration Escape_state = 1 Case 7: Escape_output = Idle_mode Escape_state = 1 End Select End Sub Sub Follow '*** Follow behavior *** Select Case Follow_state Case 1: If Front_eye > Back_eye Then Follow_state = 2 Else Follow_state = 3 End If Case 2: Follow_output = Move_backward_turn Follow_state = 1 Case 3: If Front_eye < Back_eye Then Follow_state = 4 Else Follow_state = 5 End If Case 4: Follow_output = Move_forward Follow_state = 1 Case 5: Follow_output = Idle_mode Follow_state = 1 End Select End Sub Sub Arbitrate '*** Implementation of the Subsumption Control Network *** If Decide_output <> Idle_mode Then Motor = Decide_output Elseif Escape_output <> Idle_mode Then Motor = Escape_output Elseif Follow_output <> Idle_mode Then Motor = Follow_output End If End Sub
3. Robot's photo gallery
4. References
|