
Aria 2.5.1
February 20, 2007
---------------------------

 * Adds support for gyro-corrected heading automatically calculated by the
   microcontroller firmware (requires updated firmware), and for obtaining the
   odometry calculation delay (firmware's delay between reading odometers and reporting
   heading and pose to to the client). If the firmware supports it, ARIA now
   normally uses the firmware's integrated gyro heading rather than calculating 
   it on the client side.
 * Fixes memory leak in ArNetworking (some stored packets were not deleted if
   ArNetPacketSenderTcp was destroyed)



Aria 2.5.0
December  1, 2006
---------------------------

Important Changes and Bug Fixes:
 * Modified ArPTZ so that the functions for pan and tilt take doubles
   instead of integers so we can get finer grained movement, updated
   ArVCC4, ArSonyPTZ, ArAMPTU, and ArDPPTU for this.  Tested ArVCC4
   and ArSonyPTZ and they worked fine, if there are problems with this
   or with the AMPTU or ArDPPTU send email to aria-users.  Modified
   ArServerHandlerCamera to fix for the change too.
 * ArNetworking: Removed some functions from ArServerInfoStrings to manually
   add items.  Instead, ArServerInfoStrings receives data from Aria's new
   ArStringInfoGroup global data store.
 * ArActionDesired behavior changed slightly in that now for the
   transMaxVel, transNegMaxVel, transAccel, transDecel, rotMaxVel,
   rotAccel, and rotDecel can now just use the slowest value (so that
   if you have multiple things trying to set a maximum speed they
   don't have to coordinate each can just set the slowest and the
   slowest is what is used) (note of course that decel uses the
   fastest decel instead).  You can specify the old behavior when you
   do the sets on these if you want to (its not recommended and won't
   work with the built in actions).
 * All libraries are built with -fPIC for greater binary compatability when
   linking at runtime.
 * Added Aria::parseArgs() and Aria::logOptions(), and the functions
   Aria::addParseArgsCB()  and Aria::addLogOptionsCB() for classes/modules 
   to add functors that parseArgs() and logOptions() call; modified all 
   the things that parse arguments and log options to use these new functions 
   (old code will still work since the functions still work when called directly, 
   but this usage is deprecated)
 * ArNetworking: ArServerBase and ArClientBase should be threadsafe, 
   you shouldn't need to worry about locking and unlocking them when doing
   things and may cause problems if you do   
 * ArServerBase::broadcastPacketTcp and
   ArServerBase::broadcastPacketUdp will no longer take clients to not
   send the data too, this is because that behavior does not work with
   the central server... there's now a WithExclusion command for each
   of these if you need that behavior (its not recommended)
 * Python wrapper now requires Python 2.4, except on RedHat 7.3 where it 
   still uses Python 2.2 (which is the last Python released for RHL).
   You can install python2.4 if on Debian, or download for Windows or other 
   systems at <http://www.python.org/download/releases/2.4.4>.

Enhancements: 
 * Added new ArSonarAutoDisabler that turns off the sonar if the
   robot is stopped for a period of time and re-enables them when the robot
   moves; ArNetworking's ArServerModeStop no longer turns off the sonar.
 * Made ArArgumentParser::loadDefaultArguments so it can put them in
   something other than the first position
 * Modified ArConfig so that it can save unknown sections and
   parameters, so that information isn't lost if nothing knows about it
   this run
 * Added ArActionDriveDistance, an action which will just take a
   distance and drive forward that distance
 * ArNetworking: Added ArServerMode::setWillUnlockIfRequested and
   getWillUnlockIfRequested to get the info about whether we'll unlock
   if requested or not (so other things can tell if docking is forced
   or not)
 * ArNetworking: Added code so that ArServerMode can keep track of
   which data (commands) belong to which mode and a test program for
   that (ArNetworking/tests/modeInfoClient.cpp) and added the new call
   to ArServerMode::addData to all existing ArServerModes.
   ArNetworking clients can get this information
 * Added new simulator commands to ArCommands enum
 * Added support for SICK reflectance (for reflector markers); also
   added support for retrieving extended-info laser packets from the
   simulator (which contain reflectance information)
 * ArNetworking: Added boolean to ArServerMode::lockMode (defaults to
   old behavior) which indicates if the mode will unlock if requested
   or not and added ArServerMode::willUnlockIfRequested to get the
   info about whether we'll unlock if requested or not
 * ArNetworking: Added code to ArServerBase so that clients can get
   which mode is active and if its locked or not, and if it'll unlock
   if requested or not
 * New class ArSystemStatus (for Linux only).
 * Modifed some code in ArKeyHandler and ArNetworking/ArNetpacketReceiverTcp 
   so that they'd work better on Mac OS X
 * There's now network usage tracking in ArNetworking (by packet type)
   see logTracking and resetTracking in ArServerBase, there's also an
   ArServerSimpleServerCommands that'll let you do these things over
   the network
 * Fixed a crash bug on shutdown with adding actions to ArActionGroups
   then deleting them
 * Fixed the Aria::signalHandlerCB and Aria::exit so that it
   couldn't loop anymore (previously it would loop if you did an
   Aria::shutdown and that caused a segfault)
 * Added ArServerClient::hasGroupAccess so that an ArNetworking call
   can check to see if a client has access to some group, note that
   this is generally not needed since the command won't be called if
   the user doesn't have access to that group (its for the next enhancement)
 * Made ArServerModeRatioDrive so that if a user didn't have access to
   unsafe drive mode and tried to drive the robot while it was in
   unsafe mode the mode would kick back over into safe driving mode
 * Made ArSickLogger so that it takes in a robot joy handler too and
   changed the way it takes goals a little, now if you press a button
   for a goal you have to let it go before another goal is taken (this
   is instead of a time/distance/turn based check) Also changed it so
   that if you were adding goals it'd only check if you had a
   keyhandler, it wouldn't add a keyhandler
 * Made ArServerModeMapping so that when it makes a new ArSickLogger
   it passes in Aria::getJoyHandler and Aria::getRobotJoyHandler as
   well as now telling it to add goals
 * ArServerHandlerCamera now has different modes and can look at goals
   as it is driving to them, look at points, and can adjust its
   position relative to the image, and some commands to set the
   position on the camera but play well with the modes while doing
   it... 
 * Added ArNetServer calls to send to a specific client, this is so
   that one doesn't have to worry about if the socket was closed or
   not... this may have a better method later
 * Added some calls to the ArServerHandlerConfig to make it a little
   more generically usable
 * Added requestOnceUdp and findCommandByName to ArClientBase
 * Added examples/gotoActionExample.cpp
 * Added ArRobot::getRobotLengthFront and ArRobot::getRobotLengthRear 
   with associated entries in the parameters file, if either value is
   zero then it will be set to half of the robot length
 * Added ArRobot::getAbsoluteMaxTransAccel,
   ArRobot::getAbsoluteMaxTransDecel, ArRobot::getAbsoluteMaxRotAccel,
   and ArRobot::getAbsoluteMaxRotDecel which will report the top
   values (accel and decel are the same on the pioneers now but
   someday may not be)... these (like the versions for the max vels)
   are set from the config packet if its there, otherwise they are set
   to an arbitrary value (unlike the max vel ones which come from a
   param file).... made ArActionMovementParams use this value
 * ArMapObject now has getFromToSegments which can get the rotated
   line segments so that everyone doesn't have to calculate the
   rotated rectangles on their own
 * New ArGPS, ArGPSConnector and ArNovatelGPS classes to receive data
   from Global Positioning System devices, and the Novatel ProPak G2 
   in particular.
 * Made ArRobot so that it has a new method isTryingToMove that is set
   to true if the robot is trying to move even if it isn't moving
   (this is mainly for where the robot isn't moving because an action
   is stopping it from hitting something), there's a forceTryingToMove
   to go with this for things that want the robot always look like its
   trying to move
 * Made ArSonarAutoDisabler so that it'd use the new isTryingToMove
   flag and so that it would assume its the only thing changing the
   sonar, since the ArRobot::areSonarEnabled will return false if the
   robot has no sonar, or if they are disabled
 * Added a flag to range devices so they can say if they're location
   dependent or not (for use with the next enhancement)
 * Added a flag to the ArRobot functions that check all the range
   devices to say whether to ignore range devices that are location
   dependent (so that its easy to say ignore forbidden lines from the
   robot joystick)
   

Aria 2.4.3
December 7, 2005
---------------------------

 Uses -fPIC flag when building Linux shared libraries for greater compatability.

Aria 2.4.1
October 14, 2005
---------------------------

Fixes:
 * Moved accessors for protected static members in ArSoundPlayer out of header file 
   (MSVC tried to inline them, and failed to link because the members were not
   exported from the DLL)

Aria 2.4.0
September 15, 2005
---------------------------


Fixes:
 * Made ArActionDeceleratingLimiter honor the UseEStop flag
 * Changed ArSignalHandler_LIN to work with the newer
   Linux kernels/libs (e.g. in Debian), changes are documented in runThread 
   for the curious (It seems that if you try and hit control c in near the 
   time of a system call sometimes it will break signal handling but that 
   looked like it happened before this revision too)
 * Improvements to ArSocket so that it doesn't try and look up
   localhost when it opens (since it uses INADDR_ANY anyways, and all
   the look up would do is slow down things on some machines without
   DNS setup), also in Linux a failed lookup on a host will no longer
   then try localhost (it never should have)
 * Changed ArAnalogGyro so that if it got no encoder readings from
   the robot but did get readings from the gyro that it would just use the
   gyro readings
 * Revamped ArActionInput... 
   * removed deltaHeading and deltaVel function from ArActionInput
     (since they weren't used and are broken), if you need them send
     email to the aria-users list and we'll put it (or something that
     takes care of that function) back in...
   * added setHeading and made the stuff there simpler
 * Made it so that sonar readings are set to be ignored until they have gotten
   data

Important Changes:
 * If ArRobot can't find a parameter file for a robot AND has no internal
   parameters for the robot type, it will now fail the connection rather than 
   using (probably unsuitable) default values.
 * The wrapper Java code is now distributed as Aria.jar and
   ArNetworking.jar rather than separate .class files.

Enhancements:
 * Added access to ArRobot for the interpolated encoder position, this is 
   now used for the encoder pose on the SICK raw readings 
   (ArRobot::getEncoderPoseInterpPosition)
 * ArSick::processPacket: the name and meaning of the deinterlacePose
   is now deinterlaceDelta, I don't imagine anyone uses it except for
   some internal code or I'd make it more backwards compatible
 * Added ArServerInfoStrings to the ArNetworking library, it can send
   arbitrary strings from a server out to MobileEyes for MobileEyes to
   display
 * Added the ability to log abitrary strings (ie like above) to
   ArDataLogger
 * Added ArConstFunctors and ArConstRetFunctors so that you could use 
   the above string functions with the const functions in ArRobot.
   * NOTE: In a future release some currently non-const methods will become
     const. 
 * Generalized some ArSoundsQueue callbacks. Some public methods have been deprecated.
   addItem(ItemType, const char*, int) has been replaced by addItem(Item), and
   createDefaultSpeechItem() and createDefaultFileItem() were added.
 * Added a setIgnoreThisReading on the ArSensorReading class
 * ArNetworking library now has Python and Java wrappers! (Thanks to Swig)
 * Changed things a little so that ArRangeBuffer now additionally has
   getClosestPolarInList and getClosestBoxInList so that you can do
   these operations on arbitrary lists of readings (for instance from
   transformed readings) more easily (you can also just make your own buffer)
 * Added a targetPose to ArRangeBuffer box checking so that you can
   see if a point is closer to someplace other than the robot
 * ArArgumentParser functions now generally have arguments so you
   avoid just get one argument (previously it'd always recurse and
   find you the last argument)





Aria 2.3.3
May 31, 2005
---------------------------

Fixes:
 * Position mode can display some new flags
 * Initialize a variable in position mode



Aria 2.3.2
May 24, 2005
---------------------------

Fixes:
  * Cleans up some warning messages seen in Windows
  * Companion to ARNL 1.3-2 with important fixes.
  * Fixes uninitialized variable in ArModePosition.


Aria 2.3.1
May 23, 2005
---------------------------

Fixes:
  * Fixed a bug in the filtering of ArRangeDevice readings that caused odd 
    behavior in Windows
  * Put a log message into the default signal handling if exit was occuring

Enhancements:
  * Modified ArServerModeStop so it doesn't always turn off sonar when stopped 
    (depends on an argument in the constructor), SONARNL uses the new behavior 
    so that you don't need to move before you can localize


Aria 2.3.0
May 16, 2005
----------------------------

Critical Changes:

  * Aria::exit has been enhanced with callbacks (see Aria::addExitCallback) 
    and will now just exit the program instead of trying to get threads to cooperate.  
      * This has been made the default way to exit on signals (segfaults 
        and control C for instance). 
      * Exit has also been made the default way that ArRobot will call if escape is
        pressed to shut things down (see ArRobot::setKeyHandler for the
        way to use the old behavior).  
      * Aria::init and ArRobot::ArRobot now have new parameters to control 
        this behavior. Java code will require updating for this new parameter.
    This is so that things can be more consistent between programs and exit 
    conditions with less code required in the programs, generally it just works
    better.
  * SRIsim binary has been removed. Use MobileSim instead.
  * MS Visual C++ 6 project files have been moved into the vc++6 subdirectory,
    and are no longer maintained. Use Visual C++ 7.1 (.NET) instead.

Fixes:
  * Bug fix in ArSoundsQueue::resume().
  * ArFileParser can now remove its remainder handlers in remHandler

Enhancements:
  * ArMap now deals with lines (for SONARNL, MobileSim, etc.)
  * ArMap now deals with RouteInfo (for ARAM, just ignore for Aria and Arnl)
  * Added ability to track velocities coming back from the robot, see 
    ArRobot::setLogVelocitiedReceived, also added it to 
    ArServerSimpleComMovementLogging
  * Added ability to track packets received and sent more easily, see
    ArRobot::setPacketsReceivedTracking and
    ArRobot::setPacketsSentTracking.  Also added these to the
    ArServerSimpleComMovementLogging.
  * polySegments shape added to ArDrawingData

Aria 2.2-0
March 29, 2005
----------------------------

Critical Changes:
  * Sonar position parameters are now given from center of rotation 
  * Replaced old ArSpeech library with three new rewritten libraries.

Fixes:
  * Bug fix in ArNetworking TCP packet sender which might have caused some
    data to be lost
  * Removed problematic methods ArPTZ::getReal{Pan,Tilt,Zoom}
  * Removed all the references to using a std::string in ariaUtil's ArUtil 
    that would allocate or modify memory since if used in windows dll's 
    these'll cause major problems, made them take char *, 
    ArUtil::splitString is removed (use ArArgumentBuilder), commented out
    stripDir and stripFile since they have problems and it doesn't seem 
    worth fixing 

Enhancements:
  * ArRobot returns the actual battery voltage from the robot (Rather than
    scaling to 13v) if you call ArRobot::getRealBatteryVoltage and have a 
    recent OS on the microcontroller (otherwise gives the scaled value)
  * New robot parameter files for SH-based robots (p3dx-sh, p3at-sh,
    patrolbot-sh, peoplebot-sh, powerbot-sh). Fixed P3AT's laser Y position
    to 0. 
  * ArConfig: improved error handling, sections now operate fully and permit 
    the same parameter in multiple sections to be handled properly.
  * New ArUtil and ArMath functions: findMax, findMin, log2, isOnlyAlphaNumeric
  * ArActionTriangleDriveTo improved for greater accuracy
  * ArRobot::getRobotLength() and ArRobot::getRobotWidth() added
  * ArActionMovementParameters added, it can set all the vels and accels/decels
    in the action so that you can have different action groups drive more 
    differently easier
  * New Joydrive and Input classes (ArActionRatioInput and ArRatioInput*), 
    and server mode and handlers in ArNetworking for "Ratio drive", 
    to which you give front/back/left/right percentages of a maximum velocity.
    Server can also enable/disable safe drive mode.
  * New ArRobotJoyHandler class for getting joystick information from recent
    OS on the microcontroller
  * New ArNetworing classes: ArServerSimpleOpener, ArClientSimpleConnector.
  * New class: ArActionGotoStraight
  * New class: ArDataLogger
  * Changed ArRobot::moveTo to keep range devices locked the whole time its
    modifying things and now it doesn't use applyTransform (which probably
    shouldn't be used)
  * Added new action ArActionDeceleratingLimiter which will crank up the
    deceleration to avoid a collision if it needs to (up to throwing an estop)
  * New ArActionGroupNewInput using the new ArioInput
  * New ArSoundsQueue and ArSoundPlayer classes
  * New speech synthesis and recognition design, with implementations using
    Festival and Cepstral (synthesis) and Sphinx (recognition) in separate
    libraries.  Aria now has a common base class for synthesis, ArSpeechSynth.
    (Replace old ArSpeech library)
  * ArKeyHandler supports more special function keys  
  * ArSimpleConnector may be used in Java and Python by passing in the
    language's normal argv object (main() argument in Java, sys.argv in Python)
  * New classes in ArNetworking in ArServerFileUtils and ArClientFileUtils for
    transfering files over the ArNetworking connection, really only works in 
    Linux (and is mostly for the new feature in Mapper3)
  * User and password information can now be required to connect with 
    ArNetworking, see the ArNetworking overview in the documentation for more 
    details (and ArNetworking/examples/serverDemo.userInfo);

Aria 2.1-3
October 12, 2004
----------------------------
  * Special prerelease, with various Aria changes, and new ArSpeech_* setup [reed]

Aria 2.1-2
??
----------------------------
  * Special prerelease? 

Aria 2.1-1
23 August 2004
---------------------------
  
  ?

Aria 2.1
11 August 2004
----------------------------
  
  ArRangeDevices now have some information about how they should be
  drawn in programs like MobileEyes (see the ArNetworking notes on
  ArServerInfoDrawings).  See setCurrentDrawingData and
  setCumulativeDrawingData.

  ArTCM2 class added to handle the TCM2 compass.

  ArRobot now has information about the IR on a robot (stored in the .p
  files).

  ArSick can now ignore readings at certain angles (stored in the .p
  files).

  demo now has a command mode which will send commands down to the robot
  directly.  This stops state reflection (with the new
  ArRobot::stopStateReflection) so you can send motion commands to the
  robot without problems.

  demo's position mode can now activate and deactivate the gyro and now
  has a mode where it can control just one of heading or velocity.

  demo now has a mode for viewing the TCM2 compass data.

  New range devices, ArForbiddenRangeDevice (makes forbidden lines in a
  map into range device readings), ArBumpers (makes bumper triggers into
  range device readings), and ArIRs (makes IRs into range device
  readings).

  You can now activate and deactivate the ArAnalogGyro.

  ArActionBumpers now works dynamically with differing bumper numbers.

  ArArgumentBuilder will now take a set of strings (addStrings) and will
  allow you put put them a particular place in the list.

  ArArgumentParser will now let you load default arguments that will
  then be parsed as if passed in on the command line
  (loadDefaultArguments loads these).  This is for things like passing
  in the robot port or laser port to all your programs.  See the class
  description for more details.  Aria::init and Arnl::init add files to
  the list, for Aria its the file /etc/Aria.args and environmental
  variable $ARIAARGS and for Arnl it adds /etc/Arnl.args and
  environmental variable $ARNLARGS.  The parser therefor has a function
  checkHelpAndWarnUnparsed to call instead of the old check against
  argc.  If you use this new feature you'll want to check against
  parser.getArgc if you care about variable count since after
  loadDefaultArguments is called the parser will no longer be using
  the argc passed in (since it had to add).

  ArSimpleConnector can now configure a sick to use the different number
  of degrees and the different increments.

  ArVCC4 can now handle some other Cannon camera types.

  Changed things to check #ifndef WIN32 instead of #ifdef linux to make
  things easier for people using Aria on non linux but still unix
  platforms.

  The priorities for ArConfig are now different (there are only 3).

  ArNetworking Changes
  --------------------

  ArServerInfoDrawing takes range devices (or all the range devices on a
  robot) and provides it through an ArNetworking server (to draw in MobileEyes). 
  They will then be drawing by MobileEyes.  The supported types
  right now are PolyDots (takes a list of points and draw dots of a
  given size at those points), PolyPoints (takes a list of points and
  draw small points at those points), PolyLine (takes a list of points
  through which it draws a line), PolyArrow (takes a list of points
  through which it draws arrows pointing at the robot).
  ArServerInfoDrawing can also just take a functor which'll return a
  packet to draw so that you can draw whatever arbitrary information you
  like.

  ArServerHandlerCommands provides a list of commands through the ArNetworking
  server, and calls a functor or a functor with string argument when the command
  is received (These are displayed as "Custom Commands" in MobileEyes).

  ArServerSimpleCommandsUC is a class which will hook into
  ArServerHandlerCommands and let you send commands to the
  microcontroller (uC).  Note that if you use motion commands with this
  the ArRobot state reflection on the server is still going on so you'll
  want to hold enter (for the tool) or control s (for the toolbar) in
  MobileEyes.

  New ArServerHandlerCamera class to control an ArPTZ through ArNetworking

  ArHybridForwardVideo will connect to a running video server and
  forward video from that server out through its server.
  These video servers are either our color tracking
  software (ACTS, purchased separately) or our SAV (software a/v)
  transmission software (free to all our customers).

  ArClientBase::logDataList will now log not only the name and
  description of the data available but also the return description and
  argument description.

  ArNetPacket now has doubleToBuf and bufToDouble.

  ArServerHandlerMap now optionally take a map instance in the
  constructor in which case it won't worry about loading a map itself
  and will instead use the given map (and hook into the its map
  reloaded callback).

  ArConfig information can be passed from the server to the client and
  vice versa now.  MobileEyes has a GUI editing tool for configuration
  data (ARNL guiServer lets people edit arnl.p).

  ArClientBase requestOnceWithString does a request once on the given
  name using a packet with the string passed in put in the buffer.




Aria 2.0
11 February 2004
----------------------------

  ArNetworking library added! ARNL and MobileEyes were also released.

  ArConfig now a new class ArConfigArg instead of ArArg, ArConfigArg can
  also makememory to hold things and is more set up for working with
  ArNetworking (and hides some things from people just trying to use the
  base ArArg stuff).  ArConfig::writeFile now writes priorities of the
  config out but has a parameter not to.

  ArConfig now has sections to it and doesn't need to be subclassed
  from, there is also an Aria::getConfig so that you can have one config
  for all the options in a program without as much coordination
  required.

  The demo program and ArSimpleConnector now have shortcuts for arguments
  along with a new flag -connectLaser which will have it connect the
  laser (only in demo and ArNetworking example serverDemo right now).
  You can also now just pass one hyphen (-) but two (--) will still work
  fine.

  The simulator will now use rotational and translational accelerations
  and decelerations independently and respond appropriately to these.
  Previously rotational acceleration was linked to translational
  acceleration and there was no deceleration parameter as acceleration
  parameter was used for deceleration too.  If you set the accel/decel
  params in your robot's parameter file these will be sent to the
  simulator which will respond appropriately.  Note that too large
  values will cause the simulator to act erratically.

  ArRangeDevice now has generic code to keep current and cumulative
  readings.

  Signal handling should work appropriately now.

  New params in the parameter file.  GyroScaler and LaserTh, RobotWidth
  and RobotLength.  GyroScaler is used with an ArAnalogGyro to calibrate
  it (figure out the error and then adjust this scaler to compensate).

  There is new code in that deinterlaces sick laser readings if you are
  operating at 1/2 degree increments (the reading aren't interlaced with
  any other mode).  Mapping does not yet take advantage of this.

  ArArgumentParser has some new functions to make life easier and now
  tries parsin with a - extra)

  ArUtil has a few new functions e.g.  ArUtil::atof which deals with inf 
  and -inf correctly (to help Windows).

  ArNetServer can log data sent and received.

  ArRobot has some new functions (requestIOPackets, stopIOPackets,
  requestEncoderPackets, stopEncoderPackets, getIOAnalogVoltage (which
  like all the getIO calls you need to call requestIOPackets to use),
  getLeftEncoder and getRightEncoder (which you have to call
  requestEncoderPackets to use))

  There's a new class ArLineFinder which finds lines from a range device
  that puts in rawReadings which at this point is really only the ArSick
  class.  It will find the lines in a reading which can be used to do
  different things.  ArActionTriangleDriveTo now exists which uses this
  class, these are used with the docking stations that we have.

  Other miscellaneous small fixes.



Aria 1.3-2
8 September 2003
----------------------------

  RequestIOPackets was on for all robots instead of just the newer
  PeopleBots which wound up sending too much data and broke a few
  things.  Its off now except for the PeopleBots that need it, but the
  following fixes are in place so that things will still work well with
  that amount of data.

  Before if you had a lot of data (a gyro, lots of sonar data, and were
  requesting IO) you could wind up where Aria would spend all of its
  time receiving data and none doing anything with it, this was only at
  9600 baud and more data than most people ever send back and forth.  It
  did this because it tried to process all incoming data before running
  its loop, now it'll only try to do this for a half a cycle's worth of
  time.

  The warning messages for when things take too long now clearly
  indicate that they are in fact merely warnings.

  A new release of AROS should be out this week, if you are using this
  version (1.9) or newer and are connecting over a serial port the
  connection will be automatically shifted up to 38.4 baud after the
  connection is made.  Aria sends a command to the robot to tell it to
  change baud rates, then changes its own baud rate in reflection.  If
  either side doesn't hear from the other for a half second it fails
  back over to the previous baud rate.  You can disable this behavior by
  changing SwitchToBaudRate to 0 in your parameter files.  You can also
  set it higher (up to 115200) if you wish, you must use the normal baud
  rates of 9600 19200 38400 56800 or 115200.


Aria 1.3 ?
11 August 2003
----------------------------

  (BasicSuite Mapper and LaserMapper (ScanStudio) were both also released) 

  Code for the new gyroscopic correction system is integrated in with
  the base level Aria code.  The class is ArAnalogGyro.  If your robot
  has a gyro mode then in the Aria demo in position mode the raw gyro
  and raw robot headings will show up.

  ArRobot now requests a configPacket from the robot after it connects
  and waits for that before saying it is connected (it times out within
  a few seconds so it will work okay with pioneer 1s and other old
  robots, but everyone with anything but a pioneer 1 should get the new
  AROS or P2OS version since it has one critical bug fix).

  ArActions have gotten a major upgrade as they can now set the
  accelerations and decelerations the robot uses.  The values an action
  sets will be used as long as an action sets an accel, decel, or rot
  vel max when an action isn't setting them anymore these values all
  reset to the values the robot had at connection (the reason the
  configPacket reader was implemented).  trans vel max is still taken
  care of in software.  You can also set these values on the robot so
  that ArRobot will ignore the ones from the configPacket, look at
  setRotVelMax, setRotAccel, setRotDecel, setTransVelMax, setTransAccel
  and setTransDecel.  You can now also use rot vel with the actions,
  note that this does not mix at all with the heading modes and that
  whichever mode is used first is what will be used the other will be
  ignored.

  ArRobot has a stabilizing time that can be set with
  ArRobot::setStabilizingTime so that it will wait a set amount of time
  after the initial connection is made before saying it is connected and
  calling the connect callbacks.  This stabilizing time right now is
  only used for the gyro (since needs to find the center while the
  robots not moving before it can be used).  

  There is now a warning time for the robot cycle time
  (ArRobot::setWarningTime).  If the robot sync tasks take longer than
  this time a warning is issued.  If any individual task takes longer
  then that task is also warned over.  Default is 200 ms, 0 disables it.

  The sick filtering code has been changed.  Look at that class for
  specifics but one main thing is that readings will now be filtered and
  thrown away if they are too old, but this like all filtering is
  configurable.  There was code that ignored some readings on the sides
  of the robot but this was gotten rid of since it sometimes caused
  trouble because it would sometimes hold readings that should have been
  discarded.

  New class called ArConfig for having configuration
  files of different sorts, the mechanism that reads/writes .p files was
  overhauled to use this instead of the old ArPref* system that has been
  removed.  The new system is much more robust and usable than the old
  system.

  The wrapper.i file needed for rebuilding the Java and Python wrappers
  is now included.  If you have any trouble with the wrappers in the
  stock Aria please send me an email.

  The demo and anything using the ArSimpleConnector can now change the
  baud by using the switch --robotBaud in the command line.

  The code for ArVCC4 has been upgraded a little bit and now has the
  ability to enable or disable the getting of the position from the
  camera.

  The option not to do state reflecting has been removed from the
  constructor since no one I'd heard of used it and it was making things
  too complicated for little benefit.

  The general Aria static class now has functions for setting and
  getting ArJoyHandlers like it has for key handlers.

  ArUtil had strcasecmp functions added for comparing the cases of
  strings and char *s without paying attention to case.  Also has a
  function call to convert a value to true or false for easier
  logging/understanding.  There's also a function to lower an entire
  string.

  A few other minor bug fixes and additions.

Aria 1.2
4 March 2003
----------------------------

  Aria now supports Java and Python (Wrappers generated by Swig).  
  A number of names of member functions have changed to accomodate this 
  (since they were keywords in one of these languages).  The most important 
  one is that the different print members are now called log (since thats 
  what they do).  

  There are a couple of more complicated features that don't work yet in
  these languages.  The only unimplemented feature of SWIG is virtual
  function overloading which means that you will not be able to make
  your own ArActions in Java or Python, but you can always add them to
  the C++ library and use them in Java or Python.  
  You also will not be able to make your own ArFunctors
  for callbacks, but again where thats needed you can make objects in
  the C++ library and use them in Java or Python.  For this deficiency
  language specific workarounds could likely be written by users, which
  I could incorporate or if there are large numbers of people using
  these wrappers we may develop these on our own.

  Also note with python, if you use non-interactive mode the program
  will crash on exit.  In interactive mode you should do
  robot.disconnect(); Aria.shutdown() before you exit to avoid a crash,
  or you can add these to the simple.py for non-interactive mode.

  Note that there are no Java or Python wrappers for anything but Aria.
  If people use this wrapper and want wrappers for the other packages I
  will probably make them.  If you use either of the wrappers and have
  feedback about it, feel free to send it to me.

  ArSick now has a cumulative buffer (it had none before) which
  is filtered for readings that the laser doesn't see anymore (ie
  transient obstacles).

  ArRangeDevice now has a buffer that is ArPoseWithTime instead of
  ArPose, people may need to change their iterators.  Cumulative
  readings older than a certian time can now be flushed.

  Accessors in Aria are now const.  Some functions have both a const and
  non const function.  No one should really even notice this except for
  the people who want to use it.

  The Cannon VCC4 camera got an improvement in that it now uses
  bidirectioncal communication.

  New ArSimpleConnector class that should make it easier to connect to
  the simulator or real robot with an ArRobot or ArSick.  Also supports
  the command line options the demo uses.  It is used in
  examples/demo.cpp examples/wander.cpp examples/teleop.cpp
  examples/sickWander.cpp examples/sickTeleop.cpp.

  As always there were more bug fixes and improvements.


Aria 1.1-11b
29 Jan 2003
---------------------------

  * Fixes errors in windows packages

Aria 1.1-11
23 Jan 2003
----------------------------

   ?

Aria 1.1-10
13 November 2002
----------------------------

   ?

Aria 1.1-8
10 October 2002
----------------------------

   ?

Aria 1.1-7 ?
5 September 2002
----------------------------

  * The addition of new robot types for use with the new H8 controller
  * Preventing the robot from jumping to the origin on connect
  * Fixed a memory leak in ArBasePacket
  * Fixed a corrupted file in the Windows distribution of ArSpeech.


Aria 1.1-5 ?
12 July 2002
----------------------------

  This mostly fixes some problems with sonars from an over-agressive other
  bug fix I did.  It didn't process the last parameter of the sonar and
  wound up thinking it was pointing forward (0, 0, 0).  It has a few
  other small fixes but nothing major (some previous parsing errors used
  to crash Saphira but Kurt fixed it so it didn't).

  This may fix the sonar localization issue reported today, I'm not
  sure.  If not you can try doing an mcSetGauss after moving a robot
  back to locate the samples there.  If that works and it isn't an issue
  let me know.


Aria 1.1-2
10 May 2002
----------------------------

  * rewritten ipthru program (examples/ipthru.cpp)
  * Fixes and minor additions 

Aria 1.1 
11 March 2002
----------------------------

  * ArSick class added to support the Sick laser rangefinder.
  * New unified demo program that'll control basically everything on the
    robot, gripper, camera, all that.  
  * New examples sickWander.cpp and sickTeleop.cpp which
    demonstrate how to configure the laser.


Aria 1.0-3
26 February 2002
----------------------------

  * ArActionGroup added.
  * Minor bug fixes.


Aria 1.0-2
??
----------------------------

   ?

Aria 1.0-1
??
----------------------------

   ?


Aria 1.0
21 December 2001
----------------------------

  * First full, official ARIA release!

  * ArAction::run renamed to ArAction::fire
  * Better documentation
  * ArKeyHandler added


Aria 0.71
8 November 2001
----------------------------

Fix to the simulator in Windows

Aria 0.7
6 November 2001
----------------------------

First public beta

You can now do a setPort on an ArSerialConnection or ArTcpConnection 
instead of having to open it... the robot connect will then open it 
(and fail if it can't open it).  The only time you really need to open 
it yourself is if you want to do error checking and do different 
things if the open fails.

The sync loop now just waits in the packet handler all the time, and
the packet handler finally returns (which runs the main sync loop) as
soon as it gets a SIP from the packet.  There is a flag to the ArRobot 
contructor if you don't want to use this new behavior.


Aria 0.6
13 September 2001
----------------------------

  * Internal beta

