1、前言html
最近参加了RT-Thread官方发起的RT-Robot Car DIY活动,借此机会想总结一些本身本科四年的所学的部分知识。git
也能够帮助到那些须要的小伙伴(能够参考个人代码中对RT-Thread的can设备驱动的使用方法,对IIC驱动的使用方法,mpu6050+hmc5883的初始化和数据读取的方法,RT-Thread硬件定时器的使用方法,滑动窗口滤波的链表实现,pid结构的代码参考,pid参数调试方法等)github
2、演示算法
github连接(包括整个keil工程的代码,原理图和PCB,机械图纸和一些参考资料):https://github.com/iamluoyijie/funny_car多线程
小车实物:app
两个演示视频连接:https://v.youku.com/v_show/id_XNDMzNzExODMyMA==.html框架
https://v.youku.com/v_show/id_XNDMzNzExODMxNg==.html编码
3、详细步骤线程
硬件上,MCU选用stm32f407zgt6,imu选用gy-86(mpu6050+hmc5883+ms5611)。电机为大疆无刷电机m2006,电机驱动为电调c610,因此选用6s航模锂电池,因此须要设计24V转5v,5v转3.3v稳压电路,分别使用lm2576-5.0和asm1117-3.3稳压芯片,因为电调使用can总线通讯,因此须要单片机外接can芯片,选用TJA1050,除此以外就是MCU的一些接口电路,包括led,key,sw下载接口、多路串口、PWM和IO。总得来讲比较简单(须要注意一点是:电池24v输出到电调24v输入,是在pcb上走线,单路额定电流10A,线宽须要注意,最好双面都布线)。这是AD18的PCB工程连接,。这是pcb的3d图:设计
机械上,须要根据电机尺寸单独设计电机支架和小车底板,三视图以下所示:
软件上,我是使用的这个目录下的bsp:https://github.com/RT-Thread/rt-thread/tree/v4.0.0/bsp/stm32f4xx-HAL,须要的功能能够在rtconfig.h文件中开启对应的宏。
4、不足分析与接下来继续要作的工做。
一、速度内环的pid效果不太理想,500的电机目标转速,实际转速波动有正负50。角度外环0度的指望角度,有正负0.5度的波动,小车运动过程当中,速度过快就会倒。我感受最重要的缘由就是电池过重,致使小车重心偏高,其次就角度更新频率太慢,电机转速值不许,pid参数也不是最优。
二、代码上,使用了太多全局变量。led的状态显示没好好弄,ps2的好多按键没利用上。
三、接下里的工做就是,使用RT-Thread的IPC机制,尽可能减小全局变量的使用。 经过yaw角度或电机编码器,实现转向环 速度 的闭环控制。增长 前进 和 转向 的位置控制。(前面的都是速度控制),也就是说还要增长3组pid控制。
四、可能会从新设计电机支架,把电池放到电机下面,下降平衡车重心。会增长树莓派,用opencv实现简单的目标跟踪等工做。