拼合式QR地图及识别车研究与设计
2024-04-06陈小顺魏子韬
陈小顺 魏子韬
关键词: 巡线定位;STM32F103;人机交互;QRCode
中图分类号:TP391 文献标识码:A
文章编号:1009-3044(2024)03-0011-04
0 引言
物联网沙盘可以用来构建楼盘、城市、工厂、农业、交通系统或其他复杂的环境,嵌入传感器与执行器,通过系统控制交互,模拟真实世界各种情境。通常沙盘平台的大小比例固定,运行在沙盘道路上的循迹车多以黑白轨迹循迹方式呈现,物联网系统操作复杂,交互手段单一,缺乏交互性能[1]。循迹车作为传统单片机项目,随着单片机性能提升,ROS的发展,以机器视觉为主的循迹车在各个行业扮演着越来越重要的角色,车辆能够循迹定位的方法众多。朱林海等人使用光电传感器检测道路位置,进而控制小车循迹行进[2]。聂宁等人使用TSL1401线性CCD实时获取车道线信息,控制车辆循迹[3]。徐鹏飞等人通过机器学习方法,使用Lenet-5神经网络模型,训练道路数据,完成循跡功能[4]。杨璞采用基于RGB-SLAM方法对机器人进行室内定位,进而完成循迹与定位控制[5]。黄凤英采用RFID室内定位技术,通过无源RFID系统与标签反射链路通信过程计算得出具体物体位置,进而控制车辆行进[6]。程智余等人提出基于AprilTag二维码定位和IMU信息融合的机器人室内定位技术,能够精准获取机器人姿态误差,完成室内定位及轨迹修正[7]。
1 地图块与识别车设计
1.1 地图块设计
如图1 所示,一个地图块的长宽高为10×10×3.5cm,分为地图块盖板和地图块底部两部分,地图盖板厚度为0.5 cm,地图块厚度为3 cm,地图块盖板顶部用于喷绘地图。盖板底部和地图块采用圆形薄片钕磁铁吸合,地图块四周按照N、S磁极顺序排列。
根据不同风格主题,设计不同类型地图块,将各个地图块拼接形成完整的地图,如表1所示,道路类型编码预留数量可包含20种,分别为:泥路、水泥路、柏油路、石子路、可行驶草地、水路、桥……
如图2所示,将地图块按照地图类型吸合成为大型地图,识别车根据地图码运行于地图块上。
1.2 QRCode 地图编码设计
QRCode即二维码(如图3所示),是日常生活中使用最频繁的编码类型,在一个矩形平面上通过黑、白像素点在矩阵中的不同行列的分布对信息进行编码[8]。
选取编码为170号的道路地图块为例,将地图块盖板顶部划分为5×5网格区域,按照公式1所示内容填充网格区域二维码数据。
A = a + x*215+ y*212(1)
其中,A为对应网格区域中方格的内部数值及名称,(x , y)为自右下角起的A方格坐标,a 为表1中该地图块类型编码。
如图4所示,地图块网格右下角显示地图块类型为编号170,自右下角开始,从右向左每列递增32 768 即 215,从下至上每行递增4 096 即212。存放在二维码中供以识别车识别的数据即为图4中网格数据。
识别车进一步处理数据,将5×5的网格区域数据转换为18位二进制。如图5所示,其中每个二进制的低9位为地图的类型码,高6位为地图块坐标码,中间为保留字段。识别车将在该地图块所识别的编码与二进制000, 000, 000, 111, 111, 111做与运算,即可得当前地图块编号。
如图5 所示,地图编码右移12 位后,与二进制000, 111做与运算,可得所在列坐标,与二进制111,000做与运算可得所在行坐标。
如图6所示,坐标(2,2)为地图块中心,坐标行列中含数字2的点码组成十字形状,根据地图块的组合,即可形成网状路径。识别车可根据扫描识别的坐标值完成巡线与定位。
编码为170的泥路地图块如图7所示,背景图片大小与地图块盖板大小一致 (10×10 cm) ,背景图片划分5×5 个1×1 cm 的二维码区域,通过Python qrcode 库,按照编码排列公式,批量生成每个地图块中的25 个二维码编码。
将编码融合于地图背景中,每个二维码编码由透明背景颜色和编码颜色两个部分组成,编码颜色根据背景图片设为相近颜色。使用Pillow库的ImageColor 模块,将背景图像转换为RGB模式。代码调用getcol?ors()函数计算每个二维码的1×1cm区域图像中每个像素的颜色,并对其进行计数,获取图像中最多颜色,记作C。在一张RGB图片,像素值的范围是0~255,其中0表示最暗,255表示最亮。
如公式(2) 所示,取颜色C三个通道计算C平均值,根据平均值计算二维码编码颜色Cnew,使得二维码颜色与背景颜色形成对比,背景颜色较暗时,二维码颜色较亮,背景颜色较亮时,二维码颜色较暗。使用Pillow库的Image.putalpha()方法,调整二维码图像的透明度为65%,背景图片透明度为0%,使用Image.blend()方法融合二维码与背景。
如图8所示,将不同类型的地图块吸合在一起组合成一个拔萝卜的场景地图。如图9所示,地图块之间依靠磁片吸合,识别车运行于地图块上。
1.3 识别车框架设计
硬件总体结构框架如图10 所示,识别车采用STM32F103 为控制核心,以XM1605CMOS 图像传感器、VL6180X光学激光测距传感器组成点码采集模块,用于采集地图信息。控制器根据接收到的信息,解码识别当前地图块所含信息,控制执行模块完成巡线,在OLED显示屏上显示地图信息,通过ASR语音模块播报当前位置信息。使用者通过ASR语音模块语音唤醒词与设备交互。
地图点码识别由XM1605 CMOS 图像传感器完成,传感器拥有640×480像素分辨率,通过串行信号控制采集QRCode数据,识别景深4.0~18.0 cm,最小识别10×10 mm二维码,可接受360°旋转、倾斜±45°、偏转±45°解码识别。主要有VCC(供电3.3V)、RX(串口接收)、TX(串口发送)、DM(USB D-)、DP(USB D+)、TRIG(识别信号触发)。
VL6180X光学激光测距传感器,采用时钟信号控制测量光从物体表面反弹所需时间,进而判断物体接近程度,测量范围5~100 mm,使用I2C通信模式。
ASR语音模块内置FLASH4MB,包含RNN算法,支持完成语音识别、声纹识别、语音增强、语音检测、360°拾音等功能。内置39种合成人物语音播报声,语音识别距离10m,识别响应时间小于0.1s。语音指令分为欢迎词、唤醒词、命令词、回复词4个部分,外接麦克风、喇叭完成语音控制及反馈。
OLED显示屏分辨率128×64,使用SSD1306控制芯片,采用I2C通信模式,显示颜色为蓝色。
图11中识别车顶部通过卡口与螺丝与识别车中部固定连接,顶部前端固定安装液晶显示屏和LED灯条。
图12中,识别车中部与识别车底部通过螺丝固定连接,在识别车中部上端嵌入图像传感器用以扫描识别地图码,识别车中部上端固定安装扬声器、麦克风、集成语音控制模块。
如图13所示,识别车底部两侧固定安装N20电机与车轮,电机中间安装有VL6180X光学激光测距传感器,底部后端固定安装万向轮,底部上端固定安装锂电池与电机驱动模块,识别车长宽分别为10×10×8 cm。
1.4 识别车功能设计
识别车具有识别地图块信息、定位、巡线、语音交互、状态显示功能。
识别车CMOS图像传感器识别口距离地图码高5cm,地图码排列密度可保证识别车识别口范围内至少可以完整显示一个二维码。识别车启动后,当激光测距传感器检测车辆已放置平面,启动图像传感器检测点码,通过运算得出识别车所在地图块类型。通过点码识别确认当前车辆大致位置,车身原地顺时针旋转,同时开启图像传感器检测点码,根据坐标变化确定当前识别车的方位,旋转并移动识别车,使得车头朝向正右方,识别口正下方坐標为(1,2)。
表2中记录人机交互中,语音控制部分的语音指令,通过语音指令控制,可以控制车辆行驶于地图上。
如图14所示,识别车打开电源开关,通电启动。语音模块播报欢迎信息。点码采集模块判断车辆是否在地图上,若在地图上,则顺时针旋转进行位置校正,确定初始位置后,播报并显示当前地图信息,否则进行语音提示,告知用户将车辆放置于地图上。随后进入循环,等待用户语音指令,例如:前进1格、向左转、向右转、后退1格等命令,车辆结合当前所在地图位置完成指令动作,并将执行信息语音播报并实时显示。
2 结论
在沙盘场景中,灵活性、复用性使得沙盘主题丰富,通过集成语音模块,车辆依据点码信息识别所在地图块信息后,通过扬声器播报当前信息,麦克风获取用户指令,在液晶屏上显示文字信息, LED灯条显示运行状态,如此整体达到了识别车与用户交互的功能。通过地图块四周按照NS极性顺序设置有磁铁,在需要更换地图大小形状时仅需将地图块重新排列吸合成所需形状,地图盖板根据新地图场景重新贴铺。在需要更换地图场景时,仅需将已完成的场景盖板从地图块上摘下,从而可回收未损坏的设备材料,进行二次利用,从而节约设备材料资源,当地图块盖板受损需要进行维修时,因设置有磁贴,直接摘下即可更换新的地图盖板,如此整体达到便于维修更换主题的优点。通过地图盖板已喷绘融合二维码的地图信息组成的平台场景,配以识别车,车辆通过图像传感器,依据点码排列信息识别所在地图块信息,包含车辆当前所在地图块位置、地图块类型信息。通过车辆原地旋转扫描识别获取地图位置信息,进而调整车辆基准方向与位置,如此整体达到识别车与地图交互的优点。
【通联编辑:唐一东】