@startuml

class Player {
  + Player()
}

class AMCLSensor {
  - is_action: bool
  - pose: pf_vector_t

  + AMCLSensor()
  + ~AMCLSensor()
  + UpdateAction(pf: pf_t, data: AMCLSensorData): bool
  + InitSensor(pf: pf_t, data: AMCLSensorData): bool
  + UpdateSensor(pf: pf_t, data: AMCLSensorData): bool
}

class AMCLSensorData {
  - sensor: AMCLSensor

  + AMCLSensorData()
  + ~AMCLSensorData()
}

class AMCLOdomData {
  - pose: pf_vector_t
  - delta: pf_vector_t

  + AMCLOdomData()
}

class AMCLOdom {
  - time: double
  - model_type: odom_model_t
  - alpha1: double
  - alpha2: double
  - alpha3: double
  - alpha4: double
  - alpha5: double

  + AMCLOdom()
  + SetModelDiff(alpha1: double, alpha2: double, alpha3: double, alpha4: double)
  + SetModelOmni(alpha1: double, alpha2: double, alpha3: double, alpha4: double, alpha5: double)
  + SetModel(type: odom_model_t, alpha1: double, alpha2: double, alpha3: double, alpha4: double, alpha5: double = 0)
  + UpdateAction(pf: pf_t, data: AMCLSensorData): bool
}

Player --|> AMCLSensor

AMCLSensorData --|> AMCLSensor
AMCLOdomData --|> AMCLSensorData
AMCLOdom --|> AMCLSensor

@enduml
