\documentclass[onecolumn,letterpaper,11pt]{article}

%===================================================================
\input{common_latex/common_latex_packages}
\input{common_latex/common_latex_definitions}
\input{common_latex/common_latex_memo_format}
%===================================================================

\begin{document}

\begin{labcover}
\labtitle{Release Notes Trunk}
\vspace{0.1in}
\labdate{January 2019}
\vspace{0.1in}
\labauth{Michael Benjamin, mikerb@mit.edu}
\labauth{Department of Mechanical Engineering}
\labauth{MIT, Cambridge MA 02139}
\labtoc{small}
\end{labcover}

\wikidoc{file=Memo.RelNotes}
\wikidoc{auth=mikerb@mit.edu}

%====================================================================
\section{Core Helm}
%====================================================================

\subsection{pHelmIvP (IvPCore)}

\begin{packed_itemize}

\item
All behaviors may now designate themselves optionally as a
"constraint" behavior, through the virtual function
IvPBehavior::isConstraint() which by default returns false. Many of
built-in helm behaviors are constraint behaviors, e.g.,
AvoidCollision, AvoidObstacle, MaxDepth. When the Helm detects a
collection of IvP Functions consisting solely of a group of constraint
behaviors, i.e., no goal behaviors like Waypoint, it will NOT publish
any of the DESIRED_* values. If this happens only for one iteration,
it will just quietly not post anything. If it persists for more than
one iteration, it will produce an allstop. This was to handle cases
where a mission would transition from one state to another via
endflags/conditions, but during one transition iteration there would
only be constraint behavior(s), which could produce a
non-deterministic desired_* posting for one iteration.

TODO: make this an optional but highly recommended configuration with "goal_mandatory=true"

o When behaviors post to BHV_EVENT, this is posted as any other variable, but now also
  will be posted in the AppCasting events of the pHelmIvP AppCast output. Behavior
  authors can use postEventMessage() or postRepeatableEventMessage(). Each function
  simply accepts a string but will also append on the beginning the behavior instance
  name.

o Behaviors have a new virtual function checkParamCollective() which is called upon helm
launch for each new behavior as it is built, including template behaviors. It allows the
behavio author to have a function where the overall set of parameters is validated for
correctness. Some behaviors have parameters that may each individually be OK, but taken
together may be invalid. An example is say, min_range and max_range. In this function we
can check that min_range is not more than max_range for example. 

\end{packed_itemize}

lib_ivpcore (IvPCore)
---------------------------------------------------
o IvPBox class: Added "plat" field to the IvPBox class to allow
  instances to be tagged upon creation in an IvP function as either
  plateau or basin pieces.  This allows the IvPBuild Reflector tool to
  accept plateaus and basins from Refineries, and ensure that these
  pieces are not evaluated using the Regressor, but instead are just
  set to the min (basin) or max (plateau) values if the AOF is defined
  to support known min/max values.

o IvPDomain class: Added a few utility functions for finding 
  closest domain values given another domain value.

lib_ivpbuild (IvPBuild)
---------------------------------------------------
o Regressor: The regressor now looks for IvP pieces that were tagged
  as plateaus or basins and sets their weight directly if applicable.
o OF_Reflector: The reflector, when accepting plateaus and basins from
  refineries, will now tag them as such, to allow the Regressor to
  handle them by setting their weights directly (instead of sampling)
o BuildUtils: Added two useful utilities. The first, testRegionsApart()
  will test whether any pair of boxes, in a give vector of boxes, 
  intersects one another. The second, makeRegionsApart() will take a
  given set of boxes and return a new set where any pair of boxes that
  intersected is replace by a set of non-intersecing boxes. Boxes of 
  lower "plat magnitude" will be subtracted from boxes of higher plat
  magnitude. This a useful utility for designers of behavior refineries.
o RT_UniformX: The UniformX regression tool has been augmented to check
  basins and plateaus, if they exist, to ensure they do not overlap. 
  This should not really be the case if the users of the RT_UniformX
  tool have done their job correctly, but it is checked for here anyway
  and dealt with if need be, to ensure that a valid IPF is generated
  by this tool. An IPF is valid if each point in the decision space is
  contained by one and only one piece.


\item {\em alogcat (new)}: Concatenate two alog files
\item {\em pBasicContactMgr}:
\end{packed_itemize}

Addedthe contact\_max\_age\_history parameter to guard against
unbounded memory growth if the systemis producing many unique
  contact IDs over a long period of time.


%====================================================================
\subsection{Quick Summary of IvP Behavior Mods and Additions}

\begin{packed_itemize}
\item {\em Waypoint}: conditional trackline following during avoidance
\item {\em AvdColregsV17}: Use of refineries to capture plateaus, and
  mods to mode logic and objective function form
\item {\em AvoidCollision}: Use of refineries to capture plateaus
\item {\em AvoidWalls(new)}: conditional trackline following during
  avoidance
\item {\em Laader (new)}: Follow lead vehicle based on breadcrumbs
\item {\em MaxSpeed (new)}: Limit the maximum speed of the vehicle
\end{packed_itemize}

%====================================================================
\subsection{Quick Summary of Documentation Mods and Additions}

\begin{packed_itemize}
\item {\em uFldCollisionDetect}: Substantial additions and corrections
\item {\em pMarineViewer}: New documenation on commander pop-up window 
\item {\em uQueryDB (new)}: New Documentation
\item {\em uPlotViewer (new)}: New documenation
\item {\em pEvalLoiter (new)}: New documenation
\end{packed_itemize}

%====================================================================
\subsection{Automated Testing}

Automated testing and the tools, unit tests, and test autonomy missions
are being released with Version 19.1 and will continue to grow with
later releases.




%====================================================================
\subsection{Release Notes in Detail}

%====================================================================
\subsection{To-Do List}


\begin{packed_itemize}
\item {\em Waypoint capture bias}:

  Currently, as we approach a waypoint, there is no bias to either
  side of the waypoint w.r.t. capture criteria. It might make sense
  to look at the next turn and see if it makes sense to bias the
  capture to the direction of the next turn.
  
\item {\em A pEvalWaypoint app}:

  Similar to the pEvalLoiter app, a waypoint eval can evaluate the
  vehicle with respect to hitting the waypoints and penalizing big
  deviations from the trackline.

\item {\em A pEvalObstacle app}:

  Shoreside app for detecting collisions or proximities to
  obstacles. Perhaps this is the same app as the random obstacle
  generator?

\item {\em pHelmIvP}: behaviors may be queried for their
  list of legal parameters. Perhaps also with default values.
  Perhaps also with info on allowable values.

\item {\em bhvinfo app}: A command line utility that will (a)
  list legal behavior parameters, (b) provide behavior synopsis,
  (c) provide example configuration block, (d) list quick
  gotchas on parameer setting.

\item {\em IPF piece defaults}: Smarter default configuration for
  certain behaviors on their piece distribution. Some behaviors have
  defaults of a certain piece size. If the IvP domain grows, by
  someone inadvertantly growing for example the resolution of
  speed choices, the number of pieces skyrockets and may affect
  CPU load.

\item {\em Bare Stearagewy}: The collision avoidance behavior
  needs to be modified to reflect this.

\item {\em uSimMarine}: Can we use trig caching to improve
  performance? Perhaps build pMonitorCPU first?.

\item {\em pObstacleManager}: Documentation.

\item {\em Waypoint Behavior}: Documentation for temp turning off trackline following

\end{packed_itemize}




\end{document}



