在 Webots 的 highway_overtaking 场景中模拟 Range Rover PROTO 的指示灯

Simulating Indicator Lights for Range Rover PROTO in highway_overtaking scenario in Webots

我正在尝试通过编辑 Webots 中现有的 highway_overtaking.wbt 来模拟超车场景,以观察指示灯在切换车道前转 on/off。如何使用驱动程序库来执行此操作?

在修改后的场景中,我目前只有 3 辆车在中间车道,灰色林肯车在其他 2 辆车之间。我使用 setIndicator() 函数来设置指示灯(如下面的代码片段所示)但是当林肯车超前车时我没有观察到任何变化。

以下是 highway_overtaking.py 文件中修改后的代码片段

if (is_vehicle_on_side("left") and
                (not safeOvertake or sensors["rear left"].getValue() > 0.8 * sensors["rear left"].getMaxValue()) and
                sensors["left"].getValue() > 0.8 * sensors["left"].getMaxValue() and
                currentLane < 2):
            driver.setIndicator(1)
            currentLane += 1
            overtakingSide = 'right'
            lane_change = True
elif (is_vehicle_on_side("right") and
                (not safeOvertake or sensors["rear right"].getValue() > 0.8 * sensors["rear right"].getMaxValue()) and
                sensors["right"].getValue() > 0.8 * sensors["right"].getMaxValue() and
                currentLane > 0):
            driver.setIndicator(2)
            currentLane -= 1
            overtakingSide = 'left'
            lane_change = True

我使用 getIndicator() 函数读取了指示器的值,并观察到当我将其设置为 1 时,指示器值从 0 变为 1。但是我没有观察到 window。请帮忙!

这是由于指示灯的自动禁用行为(当您向与指示灯相反的方向转动方向盘时,指示灯会自动关闭)。 这会导致此模拟出现问题,因为发送到方向盘的命令非常嘈杂。

修复它的一个简单解决方案是使用 'enableIndicatorAutoDisabling' 函数 (https://www.cyberbotics.com/doc/automobile/car-library?tab=python#wbu_car_enable_indicator_auto_disabling) 禁用此自动禁用机制。

但是,要使用此功能,您应该使用 Car class 而不是 Driver 一个(Car class 继承自 Driver class)。 这个需要添加对应的import:

from vehicle import Car

并调用 Car 构造函数而不是 Driver 构造函数:

driver = Car()

另一个小细节,您不应将整数值与 'setIndicator' 一起使用,而应使用预定义值之一,例如:

driver.setIndicator(Driver.INDICATOR_OFF)
driver.setIndicator(Driver.INDICATOR_RIGHT)
driver.setIndicator(Driver.INDICATOR_LEFT)