6. 悬崖检测

让我们为 PiCar-X 增加一些自我保护意识,让它学会使用自身的灰度模块避免冲下悬崖。

在本示例中,小车将处于休眠状态。如果您将它推到悬崖边缘,它会紧急唤醒, 然后倒退,并说出“危险”。

运行代码

cd ~/picar-x/example
sudo python3 6.cliff_detection.py

代码

备注

您可以 修改/重置/复制/运行/停止 以下代码。但在此之前,需进入源码路径,例如 picar-x/example。修改代码后,您可以直接运行以查看效果。

from picarx import Picarx
from time import sleep
from robot_hat import TTS

tts = TTS()
tts.lang("en-US")

px = Picarx()
# px = Picarx(grayscale_pins=['A0', 'A1', 'A2'])
# 手动修改参考值
px.set_cliff_reference([200, 200, 200])

current_state = None
px_power = 10
offset = 20
last_state = "safe"

if __name__=='__main__':
    try:
        while True:
            gm_val_list = px.get_grayscale_data()
            gm_state = px.get_cliff_status(gm_val_list)
            # print("悬崖状态是:  %s" % gm_state)

            if gm_state is False:
                state = "safe"
                px.stop()
            else:
                state = "danger"
                px.backward(80)
                if last_state == "safe":
                    tts.say("danger")
                    sleep(0.1)
            last_state = state

    finally:
        px.stop()
        print("stop and exit")
        sleep(0.1)

工作原理

检测悬崖的功能如下:

  • get_grayscale_data():此方法直接输出从右到左的三个传感器读数。区域越亮,获得的数值越大。

  • get_cliff_status(gm_val_list):此方法比较三个探头的读数并输出结果。如果结果为 True,则表示检测到小车前方存在悬崖。