//-------------------------------------------------
// NAME: N. Rypkema, MIT EECS
// FILE: zeta.moos
//-------------------------------------------------

ServerHost   = localhost
ServerPort   = 9000
Community    = zeta

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 = uTimerScript		@ NewConsole = false ~uTimerScriptRangeRequest
  Run = uFldBeaconRangeSensor 	@ NewConsole = false
}

//------------------------------------------
// uTimerScriptRangeRequest config block

ProcessConfig = uTimerScriptRangeRequest
{
  AppTick       = 4
  CommsTick     = 4

  paused     = false
  reset_max  = nolimit
  reset_time = end
  condition  = (NAV_SPEED > 0)

  event = var=BRS_RANGE_REQUEST, val="name=zeta_GT", time=25:35
}

//------------------------------------------
// uFldBeaconRangeSensor config block

ProcessConfig = uFldBeaconRangeSensor
{
  AppTick   = 4
  CommsTick = 4

  // Configuring aspects of the vehicles
  ping_wait      = default = 20
  ping_payments  = upon_accept

  //report_vars    = short

  default_beacon_freq  = never       // Only on request (ping)
  default_beacon_shape = circle
  default_beacon_color = orange
  default_beacon_width = 5
  default_beacon_push_dist = 5000
  default_beacon_pull_dist = 5000

  beacon  = x=300, y=100,  label=01
  beacon  = x=100, y=-200, label=02
  beacon  = x=-300,y=-100, label=03

  verbose = true
  ground_truth = true
  rn_algorithm = uniform,pct=0.02
}

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

ProcessConfig = pLogger
{
  AppTick    = 4
  CommsTick  = 4

  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       = -10
  start_speed   = 0
  start_heading = 180
  prefix        = NAV
  max_deceleration  = 0.1

  dual_state    = true
}

//------------------------------------------
// pAddNoiseSimMarine config block

ProcessConfig = pAddNoiseSimMarine
{
  AppTick	  = 10
  CommsTick	= 10
}

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

ProcessConfig = pHelmIvP
{
  AppTick    = 4
  CommsTick  = 4

  behaviors  = zeta.bhv
  verbose    = true
  domain     = course:0:359:360
  domain     = speed:0:4:21
}

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

ProcessConfig = pNodeReporter
{
  AppTick	= 2
  CommsTick	= 2

  platform_type   = kayak
  platform_length = 3

  alt_nav_prefix = NAV_GT
}
//------------------------------------------
// pMarinePID config block

ProcessConfig = pMarinePID
{
  AppTick    = 20
  CommsTick  = 20

  verbose       = true
  depth_control = false

  // 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

  //MAXIMUMS
  maxrudder    = 100
  maxthrust    = 100

  // Non-zero SPEED_FACTOR overrides SPEED_PID
  // DESIRED_THRUST = DESIRED_SPEED * SPEED_FACTOR
  speed_factor = 20
}

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

ProcessConfig = uTimerScript
{
  AppTick   = 2
  CommsTick = 2

  paused      = false
  reset_max   = unlimited
  reset_time  = end
  condition   = WIND_GUSTS = true
  delay_start = 30
  delay_reset = 10:60
  time_warp   = 0.25:2.0

  randvar = varname=ANG, min=0,   max=359, key=at_reset
  randvar = varname=MAG, min=1.5, max=3.5, key=at_reset

  event = var=DRIFT_VECTOR_ADD, val="$(ANG),{$(MAG)*0.2}", time=0
  event = var=DRIFT_VECTOR_ADD, val="$(ANG),{$(MAG)*0.2}", time=2
  event = var=DRIFT_VECTOR_ADD, val="$(ANG),{$(MAG)*0.2}", time=4
  event = var=DRIFT_VECTOR_ADD, val="$(ANG),{$(MAG)*0.2}", time=6
  event = var=DRIFT_VECTOR_ADD, val="$(ANG),{$(MAG)*0.2}", time=8

  event = var=DRIFT_VECTOR_ADD, val="$(ANG),{$(MAG)*-0.2}", time=10
  event = var=DRIFT_VECTOR_ADD, val="$(ANG),{$(MAG)*-0.2}", time=12
  event = var=DRIFT_VECTOR_ADD, val="$(ANG),{$(MAG)*-0.2}", time=14
  event = var=DRIFT_VECTOR_ADD, val="$(ANG),{$(MAG)*-0.2}", time=16
  event = var=DRIFT_VECTOR_ADD, val="$(ANG),{$(MAG)*-0.2}", Time=18
}

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

ProcessConfig = pMarineViewer
{
  AppTick    = 4
  CommsTick  = 4

  appcast_viewable = true

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

  scope    = LOITER_REPORT
  scope    = LOITER_DIST_TO_POLY
  scope    = USM_FSUMMARY
  scope    = USM_DRIFT_VECTOR_ADD
  scope    = DB_CLIENTS
  scope    = CONVEX_GRID_CONFIG

  action   = UP_LOITER = center_assign = 40,-40
  action+  = UP_LOITER = center_assign = x=100, y=-80

  action   = UP_LOITER = polygon = format=radial, x=0, y=-75, radius=40, pts=6
  action+  = UP_LOITER = polygon = format=ellipse, x=110, y=-75, degs=150, pts=14, major=80, minor=20

  action   = UP_LOITER = center_activate = true
  action+  = UP_LOITER = center_activate = false

  action   = WIND_GUSTS = true
  action+  = WIND_GUSTS = false

  action = UP_LOITER=clockwise=true
  action = UP_LOITER=clockwise=false

  button_one   = DEPLOY # MOOS_MANUAL_OVERRIDE=false # DEPLOY=true
  button_two   = STATION_KEEP=false # LOITER=true # RETURN=false
  button_two   = RETURN # RETURN=true # STATION_KEEP=false
  button_three = SKEEP:true  # STATION_KEEP=true
  button_four  = SKEEP:false # STATION_KEEP=false
}