如何使用Java以编程方式在116i上限制BMW JSDK的速度?

时间:2010-04-01 00:29:27

标签: java rfid carlet

我正在使用全新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 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:7)

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

答案 2 :(得分:3)

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

线控飞行汽车非常可怕,因为它没有最终用户/黑客可访问的部分。

答案 3 :(得分:3)

您遇到的最大问题是,当您获得发动机转速时,您并未将当前的齿轮比考虑在内。你正在看190的速度,而转速将在700到7000之间返回。你需要一个能够获得发动机转速,齿轮比和轮胎直径的功能,并返回实际速度。

或者你可以从车速表或GPS获得车速。