匿名
未登录
登录
丢石头百科
搜索
查看“Tracker Sensor”的源代码
来自丢石头百科
名字空间
页面
讨论
更多
更多
页面选项
查看
查看源代码
历史
←
Tracker Sensor
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
<div class="tabber"> {{外围模块|colorscheme=blue |name = Tracker Sensor |img=[[File:Tracker-Sensor-1.jpg|360px |alt=Tracker Sensor |link=http://{{SERVERNAME}}/shop/Tracker-Sensor.htm | Tracker Sensor]] |category1=AlphaBot |category2=光传感器 |category3=传感器 |brand=Waveshare |feature = 红外循迹传感器 | interface1 =I/Os }} <div class="tabbertab" title="说明"> ==产品概述== Tracker Sensor是红外循迹传感器,常用于制作循迹智能小车。<br /> Tracker Sensor采用ITR20001/T红外反射传感器,ITR2001/T传感器的红外发射二极管不断发射红外线,当发射出的红外线被物体反射时,被红外接收器就收,并输出模拟值。输出模拟值和物体距离以及物体颜色有关。通过计算五路输出的模拟值,判断循迹线位置。 ==规格== *工作电压:3.3V ~ 5V *产品尺寸:78mm × 18mm *探头间距:16mm *固定孔尺寸:3mm *感应距离:1cm ~ 5cm ==主要用途== 智能小车或机器人寻线,避悬崖防跌落等<br /> ==小车循迹原理简介== Tracker Sensor有五路模拟输出,模拟量输出和距离,物体颜色有关。红外反射越强(白色)时,输出越大,红外放射越弱(黑色),输出越小。探测器离黑色线越近输出越小,由此可以通过输出模拟量判断黑线的距离远近。数值越小的传感器离黑线越近。相对于其他只能输出高低电平的轨迹传感器而言,本产品的5路模拟量输出可以反馈黑线的距离,反馈更为准确。<br /> 小车算法可以分为3部分: ===第一部分:归一化校准=== 相同的颜色,距离,不同的探测器输出会有所不同,而且不同环境输出的模拟量范围也不一样。如果采用10位AD采集。理论上输出范围会在0~1023之间。但是实际上输出最小Min会大于0,最大值Max会比1023小。由此为了减少传感器自身以及环境的影响,作归一化处理,归一化处理实际上就是将Min~Max的数值范围转为 0~1范围线性转换如下:<br /> y = (x - Min) / (Max - Min) (其中x为探测器输出值,y为转换后的值,Max、Min分别为输出的最大值和最小值)<br /> 为了数据处理方便可以将数据放大1000倍。则 y = (x - Min) * 1000 / (Max - Min) 转换后数据范围为0~1000.其中1000表示探测器远离黑线,0表示探测器在黑线正中。<br /> 其中Min和Max的值是由程序在运行过程中多次采集传感器的值而获得,并保存起来,采集过程中不断移动小车,使得采集到的最大最小值更加接近实际情况。<br /> ===第二部分:加权平均=== 将五个探测器输出数据通过归一化处理后,得到五个反应探测器离黑线相对距离的数据。为了尽可能准确地确定路线的中心线。通过加权平均的方式将这5个数值转变成一个数值。公式如下:<br /> y = (0 * value0 + 1000 * value1 + 2000 * value2 + 3000 * value3 +4000 * value4) / (value0 + value1 + value2 + value3 + value4) 其中0, 1000, 2000, 3000, 4000分别为从左到右5个探测器的权,value0~value4为探测器归一化后的数据。<br /> 则经过出后的数值范围为0~4000。代表黑线的位置。例如2000则表示黑线在模块的正中间。0表示在黑线在模块的最左侧,4000表示黑线在最右侧。<br /> 为了使模块探测的精度更高,对模块的高度和黑线有所要求。黑线应该等于或略小于探测器的距离(16mm)。高度为黑线在两个传感器正中间时,两个传感器都能够刚好探测到为宜。<br /> ===第三部分:PID控制=== 由第二部分可得到黑线的位置,为了使小车一直沿着黑线走,则必须保证黑线在小车正下方,此时加权平均后的输出应该为2000。为了使小车走的更加平滑,减少左右摇摆。采用位置式PID控制。关于PID算法网上有很多介绍,此处不再详细讲解,只是大概介绍一下。<br /> PID是指通过比例(P),积分(I),微分(D)对误差进行反馈调节。主要算法如下:<br /> proportional = position - 2000; derivative = proportional - last_proportional; integral += proportional; last_proportional = proportional; power_difference = proportional * Kp + integral * Ki + derivative * Kd; 其中:<br /> 理想情况下,加权平均后的输出数据为2000,即黑线在正中间。<br /> 比例项(proportional)为当前的位置(Position)减去目标位置(2000),表示位置误差,正数表示小车偏右,负数表示小车偏左。<br /> 积分项(integral)数据为每次误差的总和,绝对值越大,表示误差累积值越大,表示小车越偏越远了。<br /> 微分项(derivative)为当前误差和上次误差的差值,反映小车的响应速度,数值越大,响应速度越快。<br /> 调节Kp, Ki, kd三个参数可获得最佳性能。先调节Kp参数,Ki, Kd设为0,不断调整Kp值使得小车可以循线,然后调节Ki和Kd值,参数可以设小一点,或者为0。<br /> ==AlphaBot 循迹模块示例程序分析== 下面结合AlphaBot智能小车讲解一下Tracker Sensor循迹程序。这里以Arduino的程序作为示例,Tracker Sensor的库文件主要包含TRSensors.cpp和TRSensors.h两个文件。<br /> TRSensors.cpp主要包含下面这几个函数<br /> TRSensors(); void AnalogRead(unsigned int *sensor_values); void calibrate(); void readCalibrated(unsigned int *sensor_values); int readLine(unsigned int *sensor_values, unsigned char white_line = 0); 其中TRSensors()为初始化函数,初始化相应的管脚,以及申请内存用作存储各个传感器的Max, Min值。<br /> AnalogRead()函数为读取五路探测器的模拟值,AlphaBot是通过TLC1543 AD芯片进行AD转换,而非Arduino芯片的AD管脚。如果将Tracker Sensor接到Arduino的A0~A4管脚需修改此函数。<br /> calibrate()函数为校准函数,通过多次采集数据,确定Max,Min值。故校准阶段时,小车需在黑线中紧贴地面左右摇晃。确保取得的Max,Min准确。 readCalibrated()函数为归一化校准,对应原理的第一部分,通过归一化线性转换,将数据转为0~1000范围内,其中1000表示探测器远离黑线,0表示探测器在黑线正中。<br /> readLine()函数为读取循迹线的位置,对应原理中的第二部分。通过加权平均算出寻迹线的位置。数值范围为0~4000,0表示在黑线在模块的最左侧,4000表示黑线在最右侧。<br /> 原理中第三部分在循迹主程序Infrared_Line_Tracking.ino中实现,主要代码如下。<br /> [[File:Ttacker Sensor-1.png|800px]]<br /> <br /> 通过readline()函数读取寻迹线的位置,然后算出比例项proportional,微分项derivative,<br /> 此处只用了PD算法,没有积分项,而非PID。可以修改对应的PD参数,使性能更佳。<br /> [[File:Tracker Sensor-2.png|800px]]<br /> 最后一步就是通过PD算得的修改项power_difference去调节小车左右轮的PWM值,实现小车沿着寻迹线运动。<br /> ==操作与现象== 本节只是介绍模块的简单测试程序,关于AlphaBot使用Tracker Sensor实现循迹的操作以及示例程序可以参考[http://www.waveshare.net/wiki/AlphaBot AlphaBot的相关资料]。<br /> 下面,以接入微雪[http://www.waveshare.net/shop/XNUCLEO-F103RB.htm XNUCLEO-F103RB (STM32F103R) ]和 [http://www.waveshare.net/shop/UNO-PLUS.htm Arduino UNO]开发板为例。<br /> ① 将配套程序下载到相应的开发板中。<br /> ② 将串口线和模块接入开发板,给开发板上电,打开串口调试软件。<br /> 模块与开发板连接如下表所示:<br /> {|border=2 style="width:800px" |-align="center" |+表1. 模块接入STM32开发板 |- align="center" style="background:#fde" |端口||XNUCLEO_F103RB引脚 |-align="center" |IR1~IR5||A0~A4 |-align="center" |GND||GND |-align="center" |VCC||3.3V |} <br /> {|border=2 style="width:800px" |-align="center" |+表2.模块接入Arduino |- align="center" style="background:#fed" |端口||Arduino引脚 |-align="center" |IR1~IR5||A0~A4 |-align="center" |GND||GND |-align="center" |VCC||5V |} <br /> 串口配置如下表所示:<br /> {|border=2 style="width:800px; background:#eff" |- align="center" |+表3. 串口配置 |-align="center" |style="width:400px"|Baud rate||9600 |-align="center" |Data bits||8 |-align="center" |Stop bit||1 |-align="center" |Parity bit||None |} <br /> ③串口会显示5串数据,分别对应IR1~IR5传感器。数据随着反射距离的远近而改变。当模块没有遮挡时,输出的大概为几十,当模块接近台面时,输出为八九百左右。<br /> </div> <div class="tabbertab" title="资料"> ===文档=== *[http://{{SERVERNAME}}/w/upload/2/2d/Tracker-Sensor-UserManual.pdf 用户手册]<br> *[http://{{SERVERNAME}}/w/upload/b/bc/Tracker-Sensor-Schematic.pdf 原理图/尺寸图]<br> ===程序=== *[http://{{SERVERNAME}}/w/upload/4/45/Tracker_Sensor_Demo.7z 示例程序]<br> ===数据手册=== *[http://{{SERVERNAME}}/w/upload/7/78/ITR20001-T.pdf ITR20001-T_EN]<br> ===软件=== *[http://{{SERVERNAME}}/w/upload/5/5f/Sscom.7z 串口调试助手] <br /><big>批量下载教程——请戳<big><big><big>☛</big></big></big></big>[[File:download-icon.png|link=批量下载教程]] <!--{{Join_us}}--> </div> <div class="tabbertab" title="FAQ"><br /></div> <div class="tabbertab" title="售后"><br />{{Service11}}</div>
该页面使用的模板:
模板:Service00
(
查看源代码
)
模板:Service11
(
查看源代码
)
模板:Tipbox
(
查看源代码
)
模板:外围模块
(
查看源代码
)
返回至
Tracker Sensor
。
导航
导航
首页
最近更改
随机页面
MediaWiki帮助
首页
首页
树莓派
主机
配件包
外壳
键鼠
电源
扩展板
显示屏
墨水屏
摄像模块
通信模块
继电器
电机驱动板
游戏机
产品分类
树莓派
Arduino
micro:bit
STM32
Espressif
WiFi模块
蓝牙模块
无线模块
LoRa模块
4G模块
GSM
GPRS
以太网
导航模块
北斗卫星
GPS
LCD
墨水屏
OLED
摄像头
USB模块
串口模块
RS232
RS485
CAN
传感器
温度模块
湿度模块
气压模块
继电器
电机模块
指纹模块
电平转换
音频模块
编程器
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志