Frage

Ich bin auf dem neuen BMW 116i Innovationspaket mit dem BMW Java SDK zu experimentieren. Grundlegende Dinge wie das Licht Ein- und Ausschalten, Starten und Stoppen des Motors funktionieren. Was ich versuche jetzt zu tun ist, dass eine carlet zu schreiben, die die Geschwindigkeit auf das Maximum im Fahrerprofil konfiguriert begrenzen würde. Treiber Identität wird wie gewohnt über RFID-Lesegerät erfasst werden.

Mein Problem ist, dass wenn ich die Geschwindigkeit des Tachometers lesen kann, kann ich nicht wirklich die Geschwindigkeit begrenzen. Hier ist, was ich habe Arbeit so weit:

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

            }
        });
    }
}

Dies wird nur Piepton für zwei Sekunden, wenn der Fahrer geht schneller als das Fahrerprofil ermöglicht.

Meine Frage ist - gibt es eine Möglichkeit, tatsächlich Grenze die Geschwindigkeit (nicht nur dumm Piepen)

War es hilfreich?

Lösung

Wie Sie langsam den unvollkommenen Mensch mit nach unten? Sie bremsen! Das Gleiche gilt für BMW SDK:

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

Andere Tipps

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

denke ich (und hofft), dass dies sehr wahrscheinlich nicht möglich, und die Gründe dafür sind, dass die Automobilhersteller in vielen rechtlichen Schwierigkeiten wären, wenn sie „non-core“ Gadgets erlaubt wie eine JVM in die Unterhaltung / Navigation gebaut System mit der Motor oder Lenkbarkeit interferieren. Das ist ein viel schlechtes Sicherheitsrisiko als der Durchschnittswert des Browser nutzen.

Fly-by-Wire-Autos sind unheimlich genug, wie es ohne Endbenutzer / Hacker zugängliche Teile ist.

Ihr großes Problem ist, dass Sie nicht das aktuelle Übersetzungsverhältnis berücksichtigt, wenn Sie die Motordrehzahl zu bekommen. Sie suchen mit einer Geschwindigkeit von wie 190, während der tach irgendwo zwischen 700 zurückkehren wird und 7000. Sie benötigen eine Funktion, die Motordrehzahl, Übersetzungsverhältnis und Reifendurchmesser und kehren tatsächliche Geschwindigkeit nimmt.

Oder Sie könnten das Auto Geschwindigkeit vom Tachometer oder GPS erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top