comments on the NEST Challenge Architecture Document

advertisement
Cory,
This document is a good attempt at specifying the pursuer-evader problem’s required
interfaces. I have, however, some observations that might be useful. You’ll find those
observations below. Feel free to pass this on for further comment if you wish.
Michael Lemmon
Dept. of Electrical Eng.
University of Notre Dame
lemmon@nd.edu
574-631-8309
It is necessary to make a distinction between specifying “services”, “algorithms”, and
“components”. This document seems to concentrate on the component/algorithm
interfaces and this may unduly restrict M/W providers. We’ve had an opportunity to
think about these interfaces because our baseline demo had to wrestle with the problem of
integrating multiple NEST services from our own programmers on a single platform. In
specifying service interfaces it is necessary to be clear about the messages going into and
out of the service (which is done in the initial document), but it is also necessary to place
some specifications of a quantitative nature. I use the interface to the pursuer as an
example. How often do the pursuers expect to receive messages? How regular these
messages should be? How accurate should the position/velocity estimates be? What is
the agreed upon format for specifying target identity? Should the messages be time
stamped, so that “stale” estimates can be discarded? How regularly should the pursuer
receive estimates? ……..
So with this observation in mind, I suggest the following:
1. Specify the PURSUER’s interface to the sensor network.
a. The specification should consist of a list of the “modules/components” with a
list of messages that the pursuers expect from the sensor network with
specifications on the format of the messages, AM channels used, and
quantitative specs on the rate at which the messages should be delivered as
well as the accuracy of the data. The list in the initial document is a good
start, but it is lacking in details on the actual message format, etc. This has to
be nailed down so that M/W providers can cleanly separate their work from
those at Berkeley concerned with the pursuer/evader software. You can think
of this as a specification for the “pursuer service”.
b. A clear description of what the pursuer service does with the information
provided and sent to the sensor network.
c. A picture that graphically shows the interface. Something like the following:
module pursuer
function: catch
evaders using
sense_net estimates
module sense_net
function: generate
estimates of evader
position/velocity…
interface EvaderDetected
(AM, DEST?, pos.,vel., ident, tstamp)
AM=51;DEST=BCAST or SPECIFIC; pos
accuracy =?; vel accuracy =?; Ident = ?;
Tstamp =?; message frequency and other
specs=?; Purpose = get sense_net estimates.
interface RequestEntry
(AM, DEST?, ID_number)
AM=52;DEST=BCAST or SPECIFIC;
ID_number = ?; Purpose: request entry to
network.
interface PurserMsg( format);
specs on data fields;
purpose of messages
specs on message frequency
2. Specifications on the coordination of NEST services
a. What we’ve found is that NEST services (synchronization, localization,…)
may all execute in a concurrent fashion. It is useful for a node to be able to
respond to sync messages from another node, even though it may be actively
doing something else. Moreover, it is unrealistic to expect that all nodes in
the network will be doing the same thing at the same time. So, if developers
use a paradigm that supports concurrent execution of services, you will need
to specify some way in which to coordinate the services. I think this is
missing from the initial document.
b. What we’ve done is provide a high-level “coordination service” that
periodically requests NEST services to do something, handles signals from
services that trigger the initialization of other NEST services. We’ve
implemented this as a state machine. An example of what we’ve done is
shown graphically below. I think we need something like this to be specified
at the beginning so that other NEST middleware providers have a clear
understanding of how their services will interface with others. I believe, we
can provide some initial functionality based on what the sensor-network
algorithm is going to look like and then let providers make changes to this if
needed. What will remain fixed is the I/F between the sensor network and the
pursuer and the coordinator and the constituent NEST services.
c. A possible graphic for this is shown below. What I’ve shown here is an
interface to a higher level user_app and the coordinator. We probably don’t
need this higher level user_app for the sensor network. But this type of
architecture could also be used on the pursuer and evader and I expect the
user_app in this case would the the control algorithms governing the pursuer’s
motion. The interface between the coordinator and NEST service consists of
two type s of objects; a command and a signal from the service. The
command is used to place the service in some specified set and the event
should be something like a service done/ timedout/ or other thing. I believe
we should probably specify a basic list of service signals (like “done”) as well
as service commands. But the format should be kept sufficiently flexible that
M/W providers can add their own signals and commands while working
within the framework provided by the specification document.
Module: user_app
Interface between NEST service and some
user application. This is probably not
needed her, but we have some projects
where this has become an issue.
Module: NEST_coordinator
I/F between
NEST
coordinator and
Services.
Service event:
done/timeout/etc.
Service command:
start, sleep, ….
Service 1
Service 2
3. Specifications for services should provide some sort of conceptual framework that
everyone can fit into. We’ve found it useful to think of each service as having three
distinct substates: The service can be actively requesting information from the
network. We’ve usually done this in a periodic manner. The service can be passively
responding to signals from the external environment (this can include sensors or
messages over the network), or the service can be disabled. Commands from the
coordinator determine which of the substates the service will enable/disable. In order
to specify a service, therefore, we need to do the following:
a. Describe the service’s functionality.
b. Describe module’s interface in a way reminiscent of the specifications on the
puruser/sensor_network interface. These specifications should include the
following: prototype declarations for each variable in the command/signal
passed generated by the module. A clear description of what that variable is.
What the proper range of values for the variable will be. How frequently the
messages should be sent and so on.
c. We’ve found it useful to divide the interface to the service component as
shown below. Commands from the coordinator (or other components) that
initiate active tasks within the service. Signals from sensors or the network
that initiate passive tasks within the service, and then the commands/signals
that are generated by the component within response to these active/passive
tasks. We can view a service graphically as shown below:
d. Finally, we need a list. My list of NEST services basically corresponds with
the initial documents. I have one major variation that focuses on a module
that implements a shared memory service. This would be used by each
module to store and manipulate “data” about the node’s neighborhood in a
mutually exclusive manner. These are specs on services, rather than
components.
i. Clock synchronization service
ii. Localization service:
iii. Target Detection/Estimation service:
iv. Route Discovery Service:
v. Message Routing/Streaming Service:
vi. Telemetry Service (I believe the initial document refers to this as the
debugger service).
vii. Calibration service
viii. Data Service
EVENTS signaled back
to coordinator such as
SYNC_DONE or
SYNC_BROKEN
Commands from
coordinator:
START
CLOCK_SYNC
AM_MSG’s to neighbors
or
commands to other components.
AM_MSG’s
sync messages
Audio signals from
Microphone.
Download