2.5 机器人小车的大脑:控制器选型
机器人小车的大脑:控制器选型
一些简单的儿童玩具小车基本上都是插上电池打开开关就会跑,他没有避障判断等功能,稍微复杂的加上红外传感器用555定时器和其他集成电路组成循迹小车,但是她也不具备可编程的单片机,儿童载人车更是依靠儿童本身自己进行操作,机器车本身不具备自主能力。再复杂的用51单片机可编程来完成避障和循迹。对于一般本科学校,可能让学生使用51单片机STC或者复杂点的stm32实现一些诸如循迹类,超声波避障类的车。我们在选型的时候考虑到的功能如最上边的表去我们要制作具有自主导航定位避障的无人驾驶机器车,所以使用单纯的51单片机已经不能满足了。我们这里使用stm32的arm单片机结合pid算法完成驱动实时任务的控制。
Stm32是32位的单片机,性能上比51单片机要强很多,处理速度块,内存也相对较大。我们选用的stm32具有72M主频和64Kflash。能完成51不能完成的任务。在一开始的思维风暴图中,我们定义了要实现的功能,所以单纯的stm32并不能够完全满足,比如运行摄像头并快速拍照,录制2秒小视频并上传云端。使用4G/5G的网络技术,运行ros等。
所以我们计划使用stm32控制器+Linux操作系统系统的初步方案。Stm32的实时性能比一般操作系统的响应能力要快很多,stm32中从将引脚置高到用万用表测外部管脚实际输出,只需要纳秒级别可以说是瞬间。而在Linux操作系统中,从将引脚置高,需要经过用户态
,内核态,底层驱动最后到管脚寄存器,这一些列的操作至少需要200us-20ms以上的时间延迟。所以看来,Linux并不适合做实时性非常高的控制。比如,将树莓派的Linux用来控制L298N以此来控制电机,当速度非常快的时候,如果遇到非常紧急情况,20ms的延时将会出现不可小觑的事故。
所以,我们最终选择使用stm32做实时控制,然后通过串口和树莓派相接,接收树莓派的指令来响应动作。同时遇到紧急情况stm32可以自己处理,比如有障碍物的情况下。优先级就要高于指令。
那么树莓派完成哪些工作?
联网需要使用树莓派,树莓派的硬件资源很多,可以考虑用WiFi,以及USB的4G模块,同时一些高级的避障算法vfh,teb,dwa可以在带Linux的系统上运行,摄像头的图像处理和识别可以用opencv库来实现。这都基于Linux的系统,GPS的卡尔曼滤波,imu的ekf滤波都可以同时在Linux系统中完成,并且ROS KINECTIC是基于Ubuntu18 来搭建的。
通过本节内容,基本可以确定我们的控制器用StM32+树莓派。