避障

在这个项目中,帕克会在前进的同时检测前方的障碍物,当障碍物太近时,它会改变前进的方向。

运行代码

cd /home/pi/picar-x/example
sudo python3 avoiding_obstacles.py

运行代码后,帕克会向前走。

如果检测到前方障碍物的距离小于25cm,则向左转。

若左转后方向无障碍物或障碍物距离大于25cm,则继续前进。

代码

from picarx import Picarx


def main():
    try:
        px = Picarx()
        # px = Picarx(ultrasonic_pins=['D2','D3']) # tring, echo
        px.forward(30)
        while True:
            distance = px.ultrasonic.read()
            print("distance: ",distance)
            if distance > 0 and distance < 300:
                if distance < 25:
                    px.set_dir_servo_angle(-35)
                else:
                    px.set_dir_servo_angle(0)
    finally:
        px.forward(0)


if __name__ == "__main__":
    main()

这个怎么运作?

picarx 模块中还导入了 ultrasonic 模块,我们可以用其封装的一些功能来检测距离。

from picarx import Picarx

因为 picarx 模块中导入了 ultrasonic 模块,我们可以直接用 px.ultrasonic.read() 来获取距离。

px = Picarx()
px.forward(30)
while True:
    distance = px.ultrasonic.read()

下面的代码片段读取超声波模块报告的距离值,如果距离低于 25 厘米(10 英寸),它将把转向伺服从 0°(直线)设置为 -35°(左转)。

while True:
    distance = px.ultrasonic.read()
    print("distance: ",distance)
    if distance > 0 and distance < 300:
        if distance < 25:
            px.set_dir_servo_angle(-35)
        else:
            px.set_dir_servo_angle(0)