Пример #1
0
        public CarSteering CalculateCarSteering(Map currentMap)
        {
            CarSteering steering = new CarSteering();

            currentPosition = GetNewCurrentPosition(currentMap, currentPosition);
            currentMode     = GetNewMode(currentPosition);

            if (currentMode == Mode.ON_TRACK)
            {
                steering.speed = DEFAULT_SPEED_IN_MS;
                steering.brake = 0.0d;
            }
            else if (currentMode == Mode.REACHED_DESTINATION)
            {
                steering.speed = 0.0d;
                steering.brake = BREAKING_POWER_ON_DESTINATION;
            }
            else
            {
                throw new ApplicationException("unknown mode!");
            }

            double distanceAndSide        = CalculateDistanceAndSideBetweenLineAndPoint(currentPosition.Value, currentMap.car);
            double distanceRegulatorValue = distanceRegulator.ProvideObjectCurrentValueToRegulator(distanceAndSide);
            double angleRegulatorValue    = angleRegulator.ProvideObjectCurrentValueToRegulator(currentPosition.Value.angle);

            steering.angle = distanceRegulatorValue + angleRegulatorValue;

            return(steering);
        }
Пример #2
0
        //handling external events
        void CarComunicator_evSpeedInfoReceived(object sender, SpeedInfoReceivedEventArgs args)
        {
            currentSpeedLocalCopy = args.GetSpeedInfo();
            Logger.Log(this, String.Format("new current speed value acquired: {0}", args.GetSpeedInfo()));

            //this setter also sends event "evNewSpeedSettingCalculated"
            SpeedSteering = regulator.ProvideObjectCurrentValueToRegulator(currentSpeedLocalCopy);
        }
        void CarComunicator_evSteeringWheelAngleInfoReceived(object sender, SteeringWheelAngleInfoReceivedEventArgs args)
        {
            double calculatedSteering = regulator.ProvideObjectCurrentValueToRegulator(args.GetAngle());

            NewSteeringWheelSettingCalculatedEventHandler newWheelSteeringCalculatedEvent = evNewSteeringWheelSettingCalculated;

            if (newWheelSteeringCalculatedEvent != null)
            {
                newWheelSteeringCalculatedEvent(this, new NewSteeringWheelSettingCalculateddEventArgs(calculatedSteering));
            }
        }
Пример #4
0
 void CarComunicator_evBrakePositionReceived(object sender, BrakePositionReceivedEventArgs args)
 {
     //this will also invoke evNewBrakeSettingCalculated event
     BrakeSteering = regulator.ProvideObjectCurrentValueToRegulator(args.GetPosition());
 }