Java Lejos自主NXJ机器人线程导致问题

时间:2015-04-27 15:02:04

标签: java multithreading lejos-nxj autonomy

我正在编写一个java代码来控制一个相当简单的机器人,它应该执行以下操作; PID线跟踪器,超声波检测和颜色检测。

由于这是我在java中的第一个程序,我显然有很多关于OOP的知识。

机器人在轨道上运行,其中线路上有颜色,机器人应定期检查,如果找到,则根据其读取的颜色采取不同的行动。

因此,在伪(java)-code:

之后,该过程应该有点类似
Initialize and calibrate sensors.
while (! Button.ENTER.isDown)
Run PID-controller
If (ColorSensorColor = 0 || ColorSensorColor = 2)
    if (color = 0)
        turn left
    if (color = 2)
        turn right
while (UltraSonicDistance < 30cm)
    free-roll motors

因此,我的问题是;如何构造两个可以与主线程并行运行ColorSensor和UltraSonicSensor的线程?

最新的实际代码位于here

最后,感谢您的所有意见 - 我已经搜索了interwebz以获得良好的教程,但似乎我没有太多的脑筋来理解所有OOP的母亲。

1 个答案:

答案 0 :(得分:0)

/ p / javahelp kindle上的

/ u / evil_burrito回答了以下工作建议:

首先,您可能想要考虑一个实时JVM,如果您还没有。如果您的控制器必须不间断运行,那么可能需要考虑。 FWIW,RT根本不是我的专业领域。 但是,关于线程的基本问题更容易回答。 为每个超声波传感器和颜色传感器创建一个内部类。让这些类实现Runnable。在run方法中,检查适当的传感器并更新外部类中的volatile变量。 使用ScheduledExecutorService为每个类执行传感器检查(创建内部类的实例并将其提交给执行程序,以1ms或100微秒的间隔运行,或者其他任何操作)。 主类可以只监视volatile变量的值,并决定无中断地做什么。