| 
 Narrative Control 
            
                |  | The narrative
                control program of the KidsRoom queries the
                sensor programs for information about what is
                happening in the room at a given time and then
                changes how the room responds so that
                participants are guided through the narrative. |  |  
            
                  Event loop 
                    Vision processes, such as
                    the object tracker, are continuously running
                    and generating data. There are many
                    situations that require an immediate response
                    from the control program. For example, when
                    someone enters the room the system must start
                    tracking the person and the control program
                    must immediately learn of the persons
                    presence. Similarly, if everyone leaves the
                    room, the story must be frozen at its current
                    point instead of continuing on as if there
                    were still participants. Consequently, the
                    control program can never stop and wait for
                    some event at the expense of checking other
                    perceptual input. The main control program is
                    an event loop that continuously monitors the
                    state of the room, checking all inputs as
                    fast as possible all the time. Timers 
                    The control program keeps
                    track of events using timers. Each event has
                    a timer associated with it. When the event is
                    activated, the timer is reset. The event
                    timer can then be queried each pass through
                    the event loop to see if the event has timed
                    out. The most general event timer is simply
                    used to time story events. For example, a
                    timer is initiated for each short segment of
                    the story. If the timer runs out, the
                    narrative control program may then take some
                    action like playing a narration or moving on
                    to another part of the story. Timers are also
                    used to control sound effects and narrations
                    so that sounds dont play on top of one
                    another. For instance, one background sound
                    effect is a looping jungle noise. Each time a
                    sound is played, a timer is set to the time
                    it will take the sound to play. Each loop
                    through the control program where there is a
                    command to play the jungle sound, the timer
                    is queried. If time is up, the sound is
                    played again and the timer is reset. If the
                    time is not expired, the sound is still
                    playing and the control loop does not send
                    the play command again. Since the control
                    program is looping quickly, as soon as the
                    sound stops playing it will play again,
                    creating a continuous loop of forest ambient
                    sound. Narrations are handled in a similar
                    way, to prevent narrations from playing on
                    top of one another or from playing too
                    quickly. Aside from setting the correct time
                    values for each sound, the timer control is
                    relatively transparent to the programmer.  Sensitivity to timing 
                    Although the timer controls
                    are fairly straightforward to program, it was
                    time-consuming to tune the narrative control
                    system so that the room responded naturally
                    throughout each stage of the story. For
                    example, in a given segment of the story, it
                    is possible to program timers so that the
                    interaction feels "right" when one
                    person is in the room following the
                    rooms instructions. However, when three
                    people are in the room and they are not
                    cooperating, additional narrations may be
                    required since room participants may perform
                    actions differently in longer or shorter
                    amounts of time. Consequently, the timing can
                    be thrown off and the room can start to feel
                    unresponsive. Further, the more people that
                    are in the room, the more situations the
                    control program must handle. Handling such
                    problems while maintaining a feel of quick
                    responsiveness without sounding generating
                    repetitive narration required a large amount
                    of effort and experimentation. One area of
                    future research might be to design algorithms
                    that help to automate this process and
                    identify tricky timing situations. Manual intervention 
                    Although the KidsRoom is
                    fully automatic, every once and a while the
                    computer could become confused about the
                    state of the room. For example, if people
                    enter the room too quickly it is possible for
                    the object tracker to ignore one person and
                    think there are fewer people in the room than
                    there actually are. To handle these cases,
                    the control program was designed so that it
                    could be reset at any time or so that the
                    story could be manually advanced to the next
                    short segment at any time. Adding such
                    flexibility creates additional timing
                    complexities. 
                    
                          |