Algorithms

Closest Point of Approach detection

Each individual sensor consolidates the sensor readings into a single closes point of approach time stamp for each vehicle that is detected.  This is done through a combination of high-pass, and low-pass filtering of the raw magnetic readings.

Vehicle Velocity Estimation

The collection of closest point of approach time stamps are used to calculate the velocity of the object moving through the sensor field.   The time stamps are combined with a position estimation vector which contains the approximate location of each of the sensor nodes.  A linear regression is the performed on the data to fit a constant velocity trajectory to the sensor data.

The slope of the regression line is proportional to the velocity of the car and the intercept of the line is the time that  the car passed.

Sensor Location Update

In order to update the location of the individual sensors, a the linear regression is used to determine the relative positioning of the individual sensor nodes.  Over time, the position estimation vector will be updated to reflect reality.  The initial position estimation vector is set to place each node 10 feet apart -- the average spacing of motes dropped from the plane.

Depicted is the adjustment of  positions for motes 4 and 5 in the sensor network.  Each node is simply nudged in the direction that would reduce the difference between the measured data and the linear regression.
 
 
 

Jason and Steve prepare the mote dropper for a launch.The motes know the order that they will be dropped in, and use that for an initial guess at their relative locations, which they update as they get more track information.

Software

Multi-hop Messaging

Time Synchronization

It is imperative that the sensor readings from the distributed sensors can be aligned in time with respect to each other.  In order to accomplish this, the sensor network has a distributed clocking mechanism which keeps all node in sync with an accuracy of 1/32 of a second.  This is accomplished by having each node periodically broadcast out its version of the current time. All nodes that hear the broadcast make sure that their clocks are at least caught up to the time that was broadcast.  If any node has fallen behind, then it will advance its clock.  This algorithm allows the entire network to synchronize itself on the clock of the fastest node.  This mechanism can be used to achieve high levels of synchronization because there is very little jitter in the transmission time of the update broadcasts.

Sensor Data Acquisition and Filtering

Each axis of the magnetometers are read 32 times per second.  The sensor readings are then placed into a IFR low pass filter in order to remove noise introduced by the sampling process.  This filter takes the from of FILTER_VAL = (FILTER_VAL * 7 + READING)/8.  Then a second filter process is run to get a lower bound on the frequency of the readings.  Here, SECOND_FILTER_VAL = (SECOND_FILTER_VAL * 7 + FILTER_VAL/8. Finally, the absolute value of the difference of these two values is filtered to determine the rate of change in the frequency band being selected.  If this third filter value exceeds at threshold, then we assume declare that a vechile has been detected.  Here is an excerpt of the C code that is doing the filtering.

ch->first = ch->first - (ch->first >> 3);
ch->first += ch->reading;
ch->second = ch->second - (ch-> second >> 3);
ch->second += ch->first >> 3;
ch->diff = ch->diff - (ch-> diff >> 3);
tmp = ch-> first - ch-> second ;
if(tmp < 0) tmp = -tmp;
ch-> diff += tmp;

Collaborative Signal Processing

In order to determine velocity and direction of the detected vehicles, the individual sensors must collaborate.  A magnetic anomaly alone does not give us any velocity information. However, by combining the sensor readings from several nodes, we are able to determine the velocity of the vehicle.
 
 

Position Estimate Update

Query Response

The vehicle detection information that is calculated by the sensor network is stored inside the network until an opportunity arises to transfer that information back to the base station.  To achieve this, each node remembers the velocity vector information that is calculated in a local EE prom.  At a later time it will report that information in response to a query on the network.  In our demonstration, the query originates from a mote attached to the UAV as it flies over.  As the plane passes over the sensor network, it issues queries to the sensor nodes asking for a report of the vehicles that have been detected.  At this time the sensor nodes stream the data out of their EE proms and up to the mote on the plane.  The same process is used as the plane passes over the base station.  In this case the base station issues the query while the plane responds.  I short, the plane flies over the sensor network and picks up the data.  It then flies over the base station and deposits the data.

Code Size and Component Graph

Here is a graph of the TinyOS components that went into this application.


 
 
 

And we still had 80 bytes of program memory left!

Results