1

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

在修改后的场景中,我目前在中间车道上只有 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。但我没有观察到窗口上的指示灯改变颜色。请帮忙!

4

1 回答 1

1

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

解决此问题的一个简单解决方案是使用“enableIndicatorAutoDisabling”功能(https://www.cyberbotics.com/doc/automobile/car-library?tab=python#wbu_car_enable_indicator_auto_disabling)禁用此自动禁用机制。

但是,为了使用此功能,您应该使用 Car 类而不是 Driver 类(Car 类继承自 Driver 类)。这需要添加相应的导入:

from vehicle import Car

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

driver = Car()

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

driver.setIndicator(Driver.INDICATOR_OFF)
driver.setIndicator(Driver.INDICATOR_RIGHT)
driver.setIndicator(Driver.INDICATOR_LEFT)
于 2019-08-16T07:49:37.260 回答