一、项目背景

1、研究内容:

    本项目将操纵智能小车实现迷宫寻宝的功能,该小车由旭日X3派和STM32F103联合实现。主要研究智能小车能够实现前进、后退、左右转、刹车、上坡等功能,同时在底层增加红外模块进行循迹,增加超声波模块进行探测。在项目研究后期,我们将使用二轮电机进行小车的操控,在小车轮子和摄像头上尝试使用舵机。

2、项目特色:综合学习调用蓝牙模块、遥控模块、红外模块、上坡PID算法调节、超声波模块完成小车的完整操作,使用上下位机器协同操作。适用于多场景的小车。

3、研究意义:

    智能小车可以在各种各样的环境下高效工作,这将为人们的生活提供高质量的服务,甚至代替人类去恶劣的环境下完成一些勘测任务,如本项目将要完成的迷宫寻宝任务

4、X3派与STM32连接框架

(1)旭日X3派作为上位机,主要负责摄像头识别、神经网络识别以及算法编写。

(2)STM32作为下位机,主要负责电机控制与模块操作。

(3)旭日X3派和STM32之间通过有线串口连接。

二、STM32部分部分

1、实现对颜色传感器的使用

    颜色传感器用白光照射到物体,物体反射回来的光由红光、绿光、蓝光和清 晰(未滤光)光电二极管吸收,产生光电效应,并且产生光电流,四个积分 ADC 同时将放大的光电二极管电流转换为 16 位数字值。转换周期完成后,结果被传 输到数据寄存器,数据寄存器采用双缓冲方式,以确保数据的完整性。

    TCS3472 光电转换器则是基于此原理的一种颜色传感器。根据该原理即可开始代码实现功能。但在代码移植过程中,发现会在HardFault_Handler中卡死,在此记录debug过程。

    可以看到此时LR寄存器的值为0xFFFFFFF9表示中断返回时从MSP堆栈恢复寄存器值,中断返回后进入线程模式,使用MSP堆栈(这种用于不使用PSP只使用MSP堆栈的情况)。

    此时继续查看MSP寄存器的值为0x20000468,在Keil菜单栏点“View”——“MemoryWindows”——“Memory1”,在“Address”地址栏中输入MSP的值,然后在对应的行里找到地址。

    在Keil菜单栏点击“View”——“Disassembly Window”,在“Disassembly”窗口中右击,在下拉菜单中选择“Show Disassemblyat Address...”。在弹出框“Show Code atAdress”的地址框中输入地址0x08001448进行搜索,然后就会找到相对应的代码。这里的代码就是进入循环中断之前的情况。

    找到这个地址后,发现前一部分代码与串口有关,就开始仔细排查串口相关代码。修改后可以进入到颜色传感器模块的代码内部,理论上已经可以进行正常颜色识别。但是颜色传感器还涉及接收数据的积分和转换,还需要进一步学习分析。

2、进一步对循迹进行优化

    由于之前的小车在循迹的过程中,会出现一条线上左右抖动,轨迹曲折的情况。为了改善,可以对循迹功能做进一步优化。

    考虑到小车摆动可能是由于巡线过粗,也就是可以认为是传感器之间的距离过小,或者是小车转向速度过快。以上三个条件可以认为等价。在指定赛道的情况下,只能改变后两个变量。所以进行如下改进:

    首先尝试减速后,对于小弯道,小车运动时的波动情况减少,但对于大弯道,整体的运动速度也会减小。对于无时间要求的项目不失为一种选择。然后是增大传感器间距,将两侧红外对管倾斜,这样也会增加传感器之间的等效间距。对于更粗的线条也可以完成循迹工作。

    此外,如果要进一步优化,还可以考虑在小车前后都加装红外传感器,可以使用分立元件,更便于分配。而要想进一步加快速度,还可以改为边转向边前进。

三、旭日x3派部分

利用x3派作为智能小车的控制端,进行串口通信:

1、x3派的usb串口号:

查阅链接:https://developer.horizon.ai/api/v1/fileData/TogetherROS/index.html

使用USB转TTL模块 / 蓝牙模块,将x3派与下位机进行连接。串口号:’ /dev/ttyUSB0 ‘

串口连接时,需要将杜邦线接入开发板接口3,串口USB转接板接入电脑。连接完成后如下图:

串口通信卡顿问题:

在x3派中运行VScode进行串口通信,在等待下位机发送数据之前,需要先将串口缓冲区清理,否则会出现上位机接收不到下位机返回的数据,串口通信卡顿的现象。

下面是我们总结的使用要点:

(1)获取适配器:如果你的X3派设备没有内置串口接口,你需要获取一个适配器。适配器通常是USB到串口的转换器,可以将设备的USB接口转换为串口接口。

(2)连接适配器:将适配器插入X3派设备的USB接口。确保适配器与设备正确连接,以便建立物理连接。

(3)安装串口驱动程序(如果需要):某些适配器可能需要安装驱动程序才能在设备上正常运行。如果你使用的适配器需要安装驱动程序,请参照驱动程序的安装说明进行操作。

(4)启动串口通信应用程序:在X3派设备上,你需要安装并启动一个支持串口通信的应用程序。这可以是一个终端模拟器应用程序、串口调试工具或其他串口通信工具。你可以通过应用商店搜索相关的应用程序并安装。

(5)配置串口参数:打开串口通信应用程序后,你需要配置串口参数,包括波特率(baud rate)、数据位(data bits)、停止位(stop bits)和奇偶校验位(parity)。这些参数通常在应用程序的设置菜单中找到,你可以根据你的设备和外部设备的要求进行设置。

(6)连接到外部设备:使用合适的串口线缆,将适配器的串口接口与外部设备的串口接口连接起来。确保连接正确、牢固。

(7)进行串口通信:一旦你的X3派设备与外部设备成功连接,并且串口参数正确配置,你就可以开始使用串口进行通信了。你可以发送和接收数据,通过串口与外部设备进行交互。

 

 

2、X3派的摄像头开启

开发板USB Type A接口(接口5和6),支持USB摄像头功能,可自动检测USB摄像头接入并创建设备节点/dev/video8。用户可通过v4l2命令确认USB摄像头工作正常。

运行x3派示例程序,可以更加方便学习如何在x3派中打开摄像头并且完成我们的相关任务。下面是我们总结的使用要点:

(1)打开设备设置:在X3派的主屏幕上,向上滑动或下滑,然后点击设置图标(通常是一个齿轮状图标)来打开设备设置。

(2)寻找摄像头设置:在设备设置界面上,浏览并查找与摄像头相关的选项。通常,摄像头设置可以在"应用"、"隐私"或"设备"等选项下找到。

(3)启用摄像头:在摄像头设置选项中,你应该看到一个开关或复选框,用于启用或禁用摄像头。确保该开关处于打开状态或复选框被选中。

(4)调整其他设置(可选):某些设备可能允许你进行其他摄像头相关的设置,如分辨率、拍摄模式等。你可以根据需要对这些设置进行调整。

    请注意,具体的步骤可能会因X3派使用的操作系统版本、用户界面或定制设置而有所不同。以上步骤提供了一般性的指导,你可能需要根据你的设备和操作系统的实际情况进行微调。

    另外,如果你想在特定的应用程序中打开摄像头(如照相机应用或视频通话应用),你可以直接打开该应用程序并查找相关的设置选项。通常,这些选项会在应用程序的菜单中或应用程序界面的某个位置提供。

 

四、整体架构部分

    最终,我们利用STM32和旭日X3派结合,通过45天的开发,构造了一款智能小车。其中上位机部分主要是通过VSCode使用Python语言来编写。通过45天项目的开发,我们充分体验到了X3派的性价比,体会到了HobotCV比Opencv速度更快、效率更高的特点,下图是我们目前构造的智能小车,最前面是摄像头,中间是旭日X3派,后部是STM32主板和自己制作的STM32扩展版。

   同时,我们对迷宫地图进行了识别和找宝藏。最终可以做到地图的快速识别和宝藏的快速寻找。

五、结语

    本篇博客是【高校合作计划之旭日X3派】约定的最后一篇博客。经过【高校合作计划之旭日X3派】活动,我们拿到了一个性价比很高的新板——旭日X3派,并且成功应用到我们本身的项目开发中。非常感谢古月居对我们项目的支持,以及古月居工程师和客服小姐姐在这45天内有关问题的解答。

    虽然活动结束了,但是我们的项目并没有结束,分享也不会结束。如果后续有涉及到旭日X3派的知识想要分享,我们会首选古月居平台进行博客撰写和知识分享~