Как ограничить скорость с помощью BMW JSDK на 116i программно из Java?

StackOverflow https://stackoverflow.com/questions/2557423

  •  23-09-2019
  •  | 
  •  

Вопрос

Я экспериментирую с BMW Java SDK в новом инновационном пакете BMW 116i.Основные вещи, такие как включение и выключение света, запуск и остановка двигателя, работают нормально.Сейчас я пытаюсь написать карлет, который бы ограничивал скорость до максимума, настроенного в профиле драйвера.Личность водителя будет определена, как обычно, с помощью RFID-считывателя.

Моя проблема в том, что, хотя я могу считать скорость по тахометру, я не могу ее ограничить.Вот над чем я работал до сих пор:

public class SpeenControllingCarlet extends GenericCarlet {

    public void start(final VehicleModel model) throws CarletException {
        RfidReader rfidReader = (RfidReader) model
                .getDevice(Devices.DRIVER_RFID_READER);
        Rfid rfid = rfidReader.getRfid();
        DriverProfile driverProfile = model.getDriverProfileRegistry()
                .getDriverProfile(rfid.toString());
        if (driverProfile == null) {
            return;
        }
        final Double maxAllowedSpeed = Double.valueOf(driverProfile
                .getCustomAttribute("maxAllowedSpeed", "190"));
        Tachometer tachometer = (Tachometer) mode.getDevice(Devices.TACHOMETER);
        tachometer.addSpeedListener(new SpeedListener() {
            public void onSpeedChanged(SpeedChangedEvent speedChangedEvent) {
                if (speedChangedEvent.getCurrentSpeed() > maxAllowedSpeed)
                {
                    Horn horn = (Horn) mode.getDevice(Devices.HORN);
                    horn.beep(440, 2000);
                }

            }
        });
    }
}

Если водитель едет быстрее, чем позволяет профиль водителя, он будет издавать звуковой сигнал в течение двух секунд.

Мой вопрос - есть ли возможность на самом деле предел скорость (а не просто глупый звуковой сигнал)?

Это было полезно?

Решение

Как замедлиться, используя несовершенного человека?Ты тормозишь!То же самое с BMW SDK:

Brake brake = (Brake) mode.getDevice(Devices.BRAKE);
brake.apply(Brake.TO_THE_METAL);

Другие советы

Wrench wrench = (Wrench) Toolkit.getToolkit().get(Instruments.WRENCH);
wrench.hit(driver);

Я думаю (и надеюсь), что это, скорее всего, невозможно, и причины в том, что у производителей автомобилей были бы большие проблемы с законом, если бы они позволили «непрофильным» гаджетам, таким как JVM, встроенная в систему развлечений/навигации, вмешиваться с помощью двигателя или рулевого управления.Это гораздо более серьезный риск для безопасности, чем обычный эксплойт в браузере.

Автомобили с электронным управлением достаточно страшны, поскольку в них отсутствуют детали, доступные конечному пользователю/хакеру.

Ваша большая проблема в том, что вы не учитываете текущее передаточное число при определении частоты вращения двигателя.Смотришь на скорость где-то 190, а тач вернется где-то между 700 и 7000.Вам нужна функция, которая считывает обороты двигателя, передаточное число и диаметр шин и возвращает фактическую скорость.

Или вы можете узнать скорость автомобиля по спидометру или GPS.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top