无线电轨车模如何感知路障的存在呢?
01 无线电轨
一、问题/目标
在这次夏令营中的无线电轨智能车比赛中, 前两个基本任务是没有设置赛道路障的。 第三个任务是赛道上存在 一个横断路障, 车模需要能够自行检测到直道上的路障存在, 并绕过路障继续前行。 这个路障表面呈现红色, 长度和赛道的宽度相同, 为45厘米, 宽度和高度都是 20厘米。 那么, 车模如何感知赛道上路障并进行绕行的呢?
▲ 图1.1.1 路障的尺寸
二、基本原理
如果车模能够提前感知前面有障碍物, 便可以执行一个固定的转弯动作来绕过这个障碍。 虽然在转弯过程中车模需要离开赛道, 但只要在离开之前车模上的法拉电容充满电, 这个转弯动作是可以完成的, 并在赛道上继续充电前行。 在给定的硬件包中包含一个光电检测管。 它可以通过发送红外光线, 根据障碍物反射光来判断前方是否存在障碍物。 传感器后面还有可以设定灵敏度的螺丝。 三针的接口分别是地线, 电源线和 信号线。 它可以直接与控制板上的光电管接口相连, 这个光电管接口与舵机接口在电源接口的左边, 光电管插座从上往下分别是 信号线, 5V电源和地线。
下面在主控板的原理图上, 找到光电管信号线接入 ESP32的管脚。 这个信号线的名称为 SRN。 找到ESP32 管脚定义, 可以看到它接入芯片第五管脚, 这个管脚在 ESP32 数据手册上显示, 对应的 IO 口的序号为 39。 这很重要, 在软件编程中需要用到这个序号。
三、应用举例
下面通过软件来测试一下路障传感器。 前面是引入 machine 中的 Pin 模块, 以及 time 软件模块。 接下来定义光电管输入管脚, 根据原理图, 我们知道对应ESP32 39 管脚, 该管脚为输入模式。 下面是控制板上的 LED 输出管脚, 对应的 IO2 , 程序运行前输出 测试信息。 主程序循环中, 通过 value 读取 光电管对应管脚的高低状态, 并设置LED对应的管脚的状态与其相同。 因此这一句话中的两个 value 函数, 里面的是读取 光电管的状态, 外部是设置 LED 的状态。 当 LED 管脚为低电平的时候, LED被点亮, LED 管脚为高电平的时候, LED 熄灭。
在Thonny环境中, 新建一个文件, 把该程序拷贝到编辑窗口, 运行。 此时可以看到电路板上 D1 对应的 LED的状态。 它的状态随着传感器前面是否有物体而变化。 比如这里吧传感器针对这桌面, 靠近时对应的信号线为高电平, LED熄灭。 远离时,对应的信号线为低电平, LED点亮。 通过小改锥调整传感器后面的多圈电位器, 可以调整探测距离的远近。
from machine import Pin
import time
BARRIER = Pin(39, Pin.IN)
led0 = Pin(2, Pin.OUT)
print("Test BARRIER sensor:")
while True:
led0.value(BARRIER.value())
time.sleep(0.1)
四、练习/实验
大家可以根据上述原理, 测试传感器不同的检测距离, 在软件中读取传感器信号的状态, 启动车模转向过程。 正确使用这些传感器可以使得车模更好的感知外部环境。 使得它运行更加可靠、稳定。
02 讲座资料
一、讲座视频
无线电轨车模如何感知路障的存在呢?
二、讲座资料
- 清华云盘资料下载 : https://cloud.tsinghua.edu.cn/d/7471180bdb0f4d1ebbc7/
- 无线电轨智能车校内赛 | 如何学习无线电轨车模?
- 基础Python学习网站 Learn Python : https://www.learnpython.org/
■ 相关文献链接:
● 相关图表链接: