23

我正在新的 BMW 116i 创新包上试验 BMW Java SDK。基本的东西,比如打开和关闭灯,启动和停止电机工作正常。我现在要做的是编写一个 carlet,它将速度限制在驱动程序配置文件中配置的最大值。将通过 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);
                }

            }
        });
    }
}

如果驾驶员的行驶速度超过驾驶员配置文件允许的速度,这只会发出两秒钟的哔声。

我的问题是 - 是否有可能实际限制速度(不仅仅是愚蠢的哔哔声)?

4

4 回答 4

9

你如何使用不完美的人来减慢速度?你刹车!与 BMW SDK 相同:

Brake brake = (Brake) mode.getDevice(Devices.BRAKE);
brake.apply(Brake.TO_THE_METAL);
于 2010-04-01T00:42:43.670 回答
7
Wrench wrench = (Wrench) Toolkit.getToolkit().get(Instruments.WRENCH);
wrench.hit(driver);
于 2010-04-01T21:43:57.373 回答
3

我认为(并希望)这很可能是不可能的,原因是汽车制造商如果允许像娱乐/导航系统中内置的 JVM 这样的“非核心”小工具进行干扰,将会遇到很多法律问题与电机或转向控制。这比您的普通浏览器漏洞利用更严重的安全风险。

电传飞行汽车足够可怕,因为它没有最终用户/黑客可访问的部件。

于 2010-04-01T00:48:36.220 回答
3

您的大问题是,当您获得发动机转速时,您没有考虑当前的齿轮比。您正在查看 190 左右的速度,而 tach 将返回 700 到 7000 之间的某个位置。您需要一个函数来获取发动机 RPM、齿轮比和轮胎直径,并返回实际速度。

或者您可以从车速表或 GPS 中获取汽车的速度。

于 2010-04-01T00:59:28.433 回答