经常翻车的朋友们都知道,能在翻车后快速摆正车身的车才是好车。
就像动画《四驱兄弟》中展现的那样,在比赛中需要跟着赛车一起跑圈,而且赛车如果被撞翻还需要重新用手扶正,所浪费的时间非常影响比赛结果。
如果小豪和小烈可以拥有一款能通过发挥R128的WiFi&蓝牙特性的平衡小车,从而能通过WiFi或蓝牙连接的方式进行控制,既可以自平衡和转向,又可以远程操控,那冠军岂不是手到擒来。
它,就是可以自平衡的赛车机器人——B\_ROBOT\_100ASK
项目简介
本项目基于jjrobots的开源项目B-ROBOT EVO2进行复刻,与原开源项目不一样的地方是,作者将原本适配的的Arduino控制板移植为DShanMCU-R128s2-DevKit开发板,与此同时还添加了一些功能,比如自平衡功能、WiFi&蓝牙控制、App控制以及语音控制功能,让平衡小车的操控乐趣更上一层楼。
硬件设计
本项目中的自平衡赛车机器人的硬件设计结构非常简单,硬件部分主要由R128开发板和几个驱动模块组成。
- 供电模块
自平衡机器人采用锂电池供电的方式,并利用mini360航模电池降压模块来将较进行电压的转化工作,以满足小车设备对电压方面的需求 - 电机驱动模块
自平衡机器人选用两个NEMA17步进电机,并选用DDRV8825步进电机驱动模块来负责与电机之间的控制信息传输。
DDRV8825步进电机驱动模块的体积小,驱动能力强,它只需要一个PWM波就能控制步进电机,同时基本上三个引脚就能完全控制步进电机。
通过该模块可以使小车快速反应R128下达的运动信息,驱动小车本身的轮子进行运动。
- 平衡模块
MPU6050是一种6轴运动跟踪传感器,它包含3轴陀螺仪、3轴加速度计、运动处理器和温度传感器。它可以通过I2C总线接口与微控制器进行通信,并且可以通过辅助I2C总线与其他传感器设备通信。
MPU6050的主要作用是帮助机器人实现姿态感知和运动控制,提高机器人的自主性和灵活性。
遥控手柄UI控制(LVGL)
作者本人还利用R128开发板来移植了一个酷炫的LVGL遥控手柄UI,通过手柄上的菜单栏UI可以选择不同的机器人基础参数设置和进行机器人操控。
在自平衡机器人启动后,可以通过面包板上的两个手柄去遥控机器人的前进后退和转弯,并且在屏幕上还会实时返回机器人的倾斜角度、速度、电量等状态。
实现APP控制
在机器人竞速中,必须要在准确性和速度之间找到平衡。为了更好的反馈给自平衡机器人设置不同参数下的运动状态,作者针对自平衡机器人进行了控制App的适配。
App可以实时显示电池状态和机器人的倾斜角度,操作者只需要通过App中的几个可视化按钮和滑动栏来实时修改其PID,以实现对机器人速度和状态的远程控制。
自平衡机器人的一般行为由一组参数定义:
// NORMAL MODE PARAMETERS
#define MAX_THROTTLE 550 MAXIMUM VELOCITY
#define MAX_STEERING 140 MAXIMUM SPINNING VELOCITY
#define MAX_TARGET_ANGLE 14 MAXIMUM ANGLE REACHED WHEN MOVING
// PRO MODE = MORE AGGRESSIVE (MAXIMUM SETTINGS)
#define MAX_THROTTLE_PRO 860 MAXIMUM VELOCITY. PRO MODE
#define MAX_STEERING_PRO 280 MAXIMUM SPINNING VELOCITY. PRO MODE
#define MAX_TARGET_ANGLE_PRO 32 MAXIMUM ANGLE REACHED WHEN MOVING. PRO MODE
#define KP 0.32 // 0.14
#define KD 0.050 // 0.028
#define KP_THROTTLE 0.075 //0.075
#define KI_THROTTLE 0.1 // 0.1
#define KP_POSITION 0.06 //0.055
#define KD_POSITION 0.45 //0.5
//#define KI_POSITION 0.02
比如:
- 高MAX\_THROTTLE\_PRO值会使机器人更快,但如果不能顺利恢复垂直位置,稳定性会降低。
- 高MAX\_STEERING\_PRO值会让机器人旋转得更快,但转弯时更难精确控制。
- 高MAX\_TARGET\_ANGLE\_PRO值将使机器人减小其相对于地板的角度,但这会使恢复和转弯变得更加困难。
UDP 网络通信控制
这个功能的实现比较简单,利用R128本身自带的WiFi&蓝牙特性,来实现两块R128开发板(机器人自身携带&手上的操控端)的UDP网络通信控制。