//-------------------------------------------------
// NAME: M. Benjamin, MIT CSAIL
// FILE: golf.moos
// DATE: Aug 2010
//-------------------------------------------------

ServerHost = localhost
ServerPort = 9000
Community  = henry

MOOSTimeWarp = 1

LatOrigin  = 43.825300 
LongOrigin = -70.330400 

//------------------------------------------
// Antler configuration  block
ProcessConfig = ANTLER
{
  MSBetweenLaunches = 200

  Run = MOOSDB          @ NewConsole = false
  Run = uSimMarine      @ NewConsole = false
  Run = pNodeReporter   @ NewConsole = false
  Run = pMarinePID      @ NewConsole = false
  Run = pMarineViewer   @ NewConsole = false
  Run = pHelmIvP        @ NewConsole = false
  Run = pLogger         @ NewConsole = false
  Run = uTimerScript    @ NewConsole = false
  Run = pSafetyRetreat  @ NewConsole = false
}

//------------------------------------------
ProcessConfig = pSafetyRetreat
{
   AppTick   = 4
   CommsTick = 4

   polygon  = radial:: x=-25, y=-100, radius=12, pts=8, snap=1
   polygon  = radial:: x=150, y=-150, radius=12, pts=8, snap=1
   polygon  = radial:: x=180, y=-60,  radius=12, pts=8, snap=1
   polygon  = radial:: x=60,  y=0,    radius=12, pts=8, snap=1
   duration = 90

   retreat_cue_var     = THREAT_DETECTED
   retreat_message_var = UP_RETREAT
   retreat_notify_var  = SAFETY_RETREAT
   verbose     = true
}

//------------------------------------------
// pLogger config block

ProcessConfig = pLogger
{
  AppTick	= 5
  CommsTick	= 5

  File		= LOG
  PATH		= ./
  SyncLog 	= true @ 0.2
  AsyncLog 	= true
  FileTimeStamp = true

  LogAuxSrc = true
  WildCardLogging = true
  WildCardOmitPattern = *_STATUS
  WildCardOmitPattern = DB_VARSUMMARY
  WildCardOmitPattern = DB_RWSUMMARY
}

//------------------------------------------
// uSimMarine config block

ProcessConfig = uSimMarine
{
  AppTick	= 10
  CommsTick	= 10

  START_X       = 0
  START_Y       = 0
  START_SPEED   = 0
  START_HEADING = 180
  FLOAT_RATE    = 0.05

  PREFIX        = NAV
}

//------------------------------------------
// pHelmIvP config block

ProcessConfig = pHelmIvP
{
  AppTick    = 4
  CommsTick  = 4

  Behaviors  = golf.bhv
  Verbose    = quiet
  Domain     = course:0:359:360
  Domain     = speed:0:4:21
  Domain     = depth:0:500:501
}

//------------------------------------------
// pMarinePID config block

ProcessConfig = pMarinePID
{
  AppTick    = 20
  CommsTick  = 20

  verbose       = true
  depth_control = true

  // Yaw PID controller
  yaw_pid_kp		 = 0.5
  yaw_pid_kd		 = 0.0
  yaw_pid_ki		 = 0.0
  yaw_pid_integral_limit = 0.07

  // Speed PID controller
  speed_pid_kp		 = 1.0
  speed_pid_kd		 = 0.0
  speed_pid_ki		 = 0.0
  speed_pid_integral_limit = 0.07

  //Pitch PID controller
  pitch_pid_kp                   = 0.5
  pitch_pid_kd                   = 1.0
  pitch_pid_ki                   = 0
  pitch_pid_integral_limit       = 0

  //ZPID controller
  z_to_pitch_pid_kp              = 0.12
  z_to_pitch_pid_kd              = 0
  z_to_pitch_pid_ki              = 0.004
  z_to_pitch_pid_integral_limit  = 0.05 

  //MAXIMUMS
  maxrudder    = 100
  maxthrust    = 100
  maxpitch     = 15
  maxelevator  = 13

  // A non-zero SPEED_FACTOR overrides use of SPEED_PID
  // Will set DESIRED_THRUST = DESIRED_SPEED * SPEED_FACTOR
  speed_factor = 20
}

//------------------------------------------
// pMarineViewer config block

ProcessConfig = pMarineViewer
{
  AppTick    = 4
  CommsTick  = 4

  tiff_file            = forrest19.tif
  set_pan_x            = -90
  set_pan_y            = -280
  zoom                 = 0.65
  vehicle_shape_scale  = 1.35
  hash_delta           = 50
  hash_shade           = 0.4
  hash_viewable        = true

  left_context[survey-point] = SURVEY_UPDATES = points = vname=$(VNAME), x=$(XPOS), y=$(YPOS), format=lawnmower, label=delta, width=70, height=30, lane_width=8, rows=north-south, degs=80
  left_context[survey-point] = SURVEY = true

  scope = UP_RETREAT
  scope = SURVEY_UPDATES
  scope = MVIEWER_LCLICK
  scope = GPS_UPDATE_RECEIVED
  scope = TIME_AT_SURFACE

  button_one   = DEPLOY # DEPLOY=true
  button_one   = MOOS_MANUAL_OVERRIDE=false # RETURN=false # SURVEY=true
  button_two   = RETURN # RETURN=true
  button_three = THREAT-DETECT  # THREAT_DETECTED=true
}

//------------------------------------------
// pNodeReporter config block

ProcessConfig = pNodeReporter
{
  AppTick	= 2
  CommsTick	= 2

  vessel_type   = UUV
}

//------------------------------------------
// uTimerScript configuration  block

ProcessConfig = uTimerScript
{
  AppTick   = 4
  CommsTick = 4

  paused      = false
  reset_max   = any
  reset_time  = end
  condition   = TIME_AT_SURFACE > 3   
  upon_awake  = restart
  delay_start = 20:120
  script_name = GPS_SCRIPT

  event       = var=GPS_UPDATE_RECEIVED, val="RCVD_$(COUNT)", time=0.5:1.0
}