Software Planning

Notes from brainstorming sess November 23rd, 2010

Performance goals:
 * reliability = moving and kind of sailing
 * navigation accuracy
 * speed of boat
 * collision avoidance (comes after sailing, avoid gps locations, computer vision, radar, interrupts porcupine); think about this for next year

A Testing/Sim program would look like..
 * data in, results out
 * helps to tune algorithm of sailing for efficiency
 * see if servos turn (a way to test before water testing) when they get different data, the way we would expect them to
 * rejecting data properly? watch servos (ie if we tip the boat to 45 degrees)
 * order of testing: code-hardware-land-water
 * fake data -> replace data input functions: (wind = fan, compass = turn it)
 * look for errors

Correct logic includes..
 * heel of boat -> rudder and sail correction
 * direction of wind vs boat ->sail correct, polar plot course selection
 * irons avoidance -> check speed before tacking
 * roll tacking

Considerations when coding:
 * Delay of code
 * accuracy of data
 * correct factors/ equations to account for environment

Checking data:
 * change checks (ie is this number DRASTICALLY different, if so it's probably garbage)
 * change checks rely on previous values
 * $(format); does the data fulfill this? and satisfy it's checksum?
 * averaging data can give a more accurate picture, but -> erase average when appropriate (ie after a tack, the old compass average should immediately be thrown out)
 * how fast can we collect data to average

Other priorities:
 * interrupts
 * simulation
 * shore interactions->do this in 'delays', varying need, test mode, enough to find errors, dump data on finding error, zigbee delay? send basic status + variable + data

In conclusion, Tasks to work on
 * digital pins, RCmode in code
 * interrupts list
 * timers - use for functions which take unknown time sensors
 * wind sensor absolute/relative
 * future - collisions
 * what's limiting data collection speed. -> don't call function unnecessarily. (timer/check data change)
 * interrupts for arduino - RCmode -> pins, timers, turn on/off
 * serial buffer, flushing