线路跟踪

本项目将使用灰度模块使帕克沿线向前移动。 使用深色胶带使线条尽可能平滑,转弯幅度不要太大,避免帕克脱轨。

运行代码

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

运行代码后,帕克会沿着线向前移动。

代码

from picarx import Picarx

if __name__=='__main__':
try:
    px = Picarx()
    px_power = 10
    while True:
        gm_val_list = px.get_grayscale_data()
        print("gm_val_list:",gm_val_list)
        gm_status = px.get_line_status(gm_val_list)
        print("gm_status:",gm_status)

        if gm_status == 'forward':
            print(1)
            px.forward(px_power)

        elif gm_status == 'left':
            px.set_dir_servo_angle(12)
            px.forward(px_power)

        elif gm_status == 'right':
            px.set_dir_servo_angle(-12)
            px.forward(px_power)
        else:
            px.set_dir_servo_angle(0)
            px.stop()
finally:
    px.stop()

这个怎么运作?

picarx 模块中也导入了灰度传感器模块 grayscale_module ,我们可以用其中的一些方法来检测黑线。

检测黑线的函数如下所示:

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

  • get_line_status(): 该函数将根据三个探测器检测到的值生成一个动作。有四种类型的动作: forward 、 left 、 right 和 stop 。

这些动作的触发条件如下: 模块中默认分配了一个数值作为检测到黑色还是白色的阈值。 当三个探针的检测值均大于阈值时, 表示探头感应到的是白色,没有检测到则为黑线, 检测到黑线会使 get_line_status() 返回一个 stop 参数。

  • 如果右侧(也是第一个)探针检测到黑线,则返回 right

  • 如果中间探针检测到黑线,则返回 forward ;

  • 如果左探针检测到黑线,则返回 left