Come per limitare la velocità con la BMW 116i JSDK sul livello di codice da Java?

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

  •  23-09-2019
  •  | 
  •  

Domanda

sto sperimentando con la BMW Java SDK della nuova BMW 116i Innovation Package. cose di base come accendere le luci e si spegne, avviare e arrestare il bel lavoro del motore. Quello che sto cercando di fare ora è quello di scrivere la Carlet che limiterebbe la velocità al massimo configurato nel profilo del driver. identità pilota sarà rilevato come al solito tramite lettore RFID.

Il mio problema è che anche se posso leggere la velocità dal tachimetro, non posso davvero limitare la velocità. Ecco quello che ho a lavorare finora:

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);
                }

            }
        });
    }
}

Questo sarà solo un segnale acustico per due secondi, se il conducente va più veloce rispetto al profilo driver consente.

La mia domanda è -? C'è una possibilità di realtà Limite la velocità (non solo stupido bip)

È stato utile?

Soluzione

Come si fa a rallentare con l'umano imperfetto? È freno! Stessa cosa con BMW SDK:

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

Altri suggerimenti

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

Credo (e spero) che questo è molto probabile che non è possibile, e le ragioni sono che le case automobilistiche sarebbero in un sacco di problemi legali se hanno permesso "non-core" gadget come una JVM integrata nel intrattenimento / navigazione sistema di interferire con i controlli del motore o dello sterzo. Questo è un rischio per la sicurezza molto peggio di tuo browser media exploit.

fly-by-wire automobili sono abbastanza spaventoso come è senza parti accessibili all'utente finale / hacker.

Il grosso problema è che non stai prendendo il rapporto di trasmissione corrente in considerazione quando si ottiene la velocità del motore. Siete alla ricerca ad una velocità di come 190, mentre il tachimetro sta per tornare da qualche parte tra 700 e 7000. Hai bisogno di una funzione che prende giri del motore, rapporto di trasmissione, e il diametro dei pneumatici, e restituisce velocità effettiva.

In alternativa si potrebbe ottenere la velocità della vettura dal tachimetro o GPS.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top