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

Я экспериментирую с BMW Java SDK на новой BMW 116i Innovation Package. Основные вещи как включение и выключение световых сигналов, запуск и остановка двигателя хорошо работают. Что я пытаюсь сделать, теперь то, что для записи каре, которое ограничило бы скорость максимумом, настроенным в профиле драйвера. Идентификационные данные драйвера будут обнаружены, как обычно, через 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);
                }

            }
        });
    }
}

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

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

22
задан lexicore 1 April 2015 в 07:32
поделиться

4 ответа

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

Brake brake = (Brake) mode.getDevice(Devices.BRAKE);
brake.apply(Brake.TO_THE_METAL);
9
ответ дан 29 November 2019 в 05:38
поделиться

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

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

3
ответ дан 29 November 2019 в 05:38
поделиться

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

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

3
ответ дан 29 November 2019 в 05:38
поделиться
Wrench wrench = (Wrench) Toolkit.getToolkit().get(Instruments.WRENCH);
wrench.hit(driver);
7
ответ дан 29 November 2019 в 05:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: