public override Actuator process(Percept p) { currentTimestamp++; Actuator action = new Nothing(); if (p is LidarSensorInput) { LidarSensorInput lidarPerception = (LidarSensorInput)p; double currDistance = lidarPerception.DistanceTo; if (hasState) { if (currDistance < prevDistance) { double relativeVelocity = (prevDistance - currDistance) / (currentTimestamp - prevDistanceTimestamp); double timeUntilCollision = currDistance / relativeVelocity; if (timeUntilCollision < 5) { action = new Brake(); } } } // Update agent state with new input prevDistanceTimestamp = currentTimestamp; prevDistance = currDistance; hasState = true; } return(action); }
static void Main(string[] args) { LidarSensorInput sensor = new LidarSensorInput(); Agent agent = new SelfDrivingCar(); sensor.DistanceTo = 10; Actuator action = agent.process(sensor); Console.WriteLine(action.ToString()); sensor.DistanceTo = 15; action = agent.process(sensor); Console.WriteLine(action.ToString()); sensor.DistanceTo = 13; action = agent.process(sensor); Console.WriteLine(action.ToString()); sensor.DistanceTo = 10; action = agent.process(sensor); Console.WriteLine(action.ToString()); }