Visual Basic Cyberguide
The Cyberguide Project was started in March 1995 by the Future Computing
Environments (FCE) group and is headed by Gregory Abowd. The Cyberguide
"vision" is to develop an intelligent handheld tour guide that has information
about surrounding areas and your location. This vision was partially
realized in the Summer of 1995, as a non "position-aware" version of the
Cyberguide was developed on the Newton for the GVU Demo Days. The Cyberguide
continued to evolve, however, with new projects adapting the tool for
wider use and flexibility. Here is a look at the latest
Cyberguide Project Page.
This project continues the developmental work done by those Cyberguide
pioneers. The aim of this venture is to extend the tool's mode of
communication by building a version of Cyberguide portable to a Windows
platform.
Project Features
- An aerial display of the room.
- Icons signifying the location of points of interest in the room.
- A link to a description of each location's topics.
- A tracking device for the current location of the guide.
- An easily maintable list of locations.
Architecture
Introduction
This portion of the design document describes an abstract view
of an idealized version of the Cyberguide project. This team's purpose
is to create a working Cyberguide on the Windows platform. The current
code-base is in the process of being re-engineered to match these
specifications, but this work is not yet complete. The primary goals
of this re-engineering and re-architecting are:
- Extensibility & Flexibility:
We would like the design that we are
developing to be used for different 'versions' of Cyberguide, assuming
that they are all based on the original Apple Newton. If an implementation of
Cyberguide or a similar map-based information tool were to be
constructed on a completely different platform, we hope that this
abstract design can help guide the design of the new platform.
- Modularity:
We would like to be able to keep the different
subsystem components of Cyberguide from interacting with each other in
any kind of specific low-level manner. All objects should communicate
with one another through a defined set of API's consolidated in a
single object.
- Maintainence:
Due to the nature of the Real World Lab, the same
people will rarely work on a project for more than a few quarters,
meaning that code that is in use for a long period of time will
eventually be 'forgotten' - everyone who was around when this code was
written has long since moved on to bigger (and hopefully better)
things. Since we hope that this code-base and overall design will
last the Cyberguide project for a long time, we should expect it to be
forgotten about until someone needs to make some low level changes, at
which time they will need to be able to understand how the existing
Cyberguide code works. This code and design were not created in a
single quarter, they will probably not be able to be understood in a
single afternoon. Keeping the code simple and readable and the coding
standards consistent will be it's single greatest asset towards
achieving longevity.
High Level Architecture

Figure 1: Cyberguide Architecture
Overall, there will be six conceptual modules:
- Control: In our case, the primary functions of this module will
be carried out by the Visual Basic Run-Time system. Our programming
of this module will correspond to our defining new VB "events".
- MapView: This module's purpose is to communicate with the user. It
displays the map and takes requests from the user to launch an
info-browser, a help system, and to look at IT's (Interesting Things).
- Help: This module is a standard windows help file.
Control launches it and it provides no input to the rest of the system.
- Timer: This module will provide a "PositionStrobe" event to
the system at regular intervals. It is too costly for the system to
continuously monitor the serial port(too many hardware interrupts)
, so the users's position will be sampled at regular intervals defined
be this module.
- Info-Browser: This module is responsible for showing the user detailed
IT-info. This is accomplished by launching Netscape. A password prompt
is displayed when users attempt to exit the system.
- Data-Access: This module will be the source for any operating data
for the rest of the system. It is a system information database. Currently
it will contain the map, IT's, IT descriptions, system help, info-pages,
etc. In the future, network access will be received and formatted through
this module.
- Network: This module does nothing now. It is provided as a stub for the
future packet-passing network. It will communicate data only to Data-Access.
- Serial: Right now, this module serves as a position locating function.
It will receive the serial data from the external hardware Motorola control
unit for position information.
Design Specification
This section contains a list of modules, and their functions, inputs, and
outputs. A discussion of the IR positioning system follows.
- MapView:
Function: Accepts a position, displays a map.
Inputs:
- the Map - the image used for the map itself.
- position of IT's - specified in a Latitude, Longitude format.
- position of user - specified in a Latitude, Longitude format.
- Map location - position of the map itself, specified in
Latitude, Longitude.
Outputs:
- Requests to launch the Info-Browser
- Requests to launch the Help system
- Requests to QUIT
- Requests to get a List of Projects/IT's
- Info-Browser:
Function: Displays an IT's detailed info.
Netscape is the browser used.
Inputs:
- a URL - the location of the page containing the
information.
Outputs:
- None - This should feed nothing back to the system.
- Serial:
Function: Reads serial data and converts it to Latitude, Longitude
coordinates.
Inputs:
- Comm Params - read from an INI file on startup
- read position - an event from control, causes Serial
to find Cyberguide's location.
Outputs:
- Lat,Long position - Location of the user, possibly mapped to
discrete locations.
- Network:
Function: (Future) Provides network connectivity. Stored data can
can be kept on a network.
Inputs:
- ?
Outputs:
- ?
- Data Access:
Function: Separates Cyberguide from the data it accesses.
Inputs:
- network data - Anything to the future network.
Outputs:
- operat. database - Currently, this is an on board collection
of INI, map, help files,
- IT info files, etc.
- Help:
Function: Provides the user with a legend and basic usage instructions.
Inputs:
- The help file.
Outputs:
- (none)
- Control:
Note: Although this is included here, we will not be explicitly
coding many of the actions here. This is the Visual Basic
run-time system.
Function: coordinates everything
Inputs:
- Requests to launch the Info-Browser
- Requests to launch the Help system
- Requests to QUIT
- Requests to get a List of Projects/IT's
- PositionStrobe event
Outputs:
- User events
- System events - Hardware, software failures.
- read position - gets a new position from serial
any information gotten
- through Data Access
IR Positioning
The serial interface hardware generates a 3 character code when it detects a
change in position. This code is composed of two numeric characters followed
by a carriage return. This code is received through the MSCOMM control and
is looked up in a table. If the code represents valid position data, it is
converted to a (Latitude,Longitude) coordinate pair and a PositionStrobe
"event" is generated. Converted serial data is then transferred as
input to MapView.
Future plans for the positioning system include GPS. This can be implemented
simply by sending the (Latitude,Longitude) pairs to MapView.
User Interface
Figure 2: Cyberguide User Interface
As Figure 2 illustrates, the user is denoted by the arrow icon.
As he walks toward an Interesting Thing (denoted by a star icon), his
movement will be reflected on the screen by Cyberguide's tracking device.
If he clicks on the star icon, a description of the Interesting Thing
will be displayed.
Additionally, the user may zoom in and out to display less or more of the
screen. The "Center" icon re-alligns the screen in such a way that the
user is centered on the screen.
Back To Project Notebook
Design Document Evaluation
Last Modified 2/08/96 -- Jimmy Billiter