经常翻车的朋友们都知道,能在翻车后快速摆正车身的车才是好车。 就像动画《四驱兄弟》中展现的那样,在比赛中需要跟着赛车一起跑圈,而且赛车如果被撞翻还需要重新用手扶正,所浪费的时间非常影响比赛结果。 如果小豪和小烈可以拥有一款能通过发挥R128的WiFi&蓝牙特性的平衡小车,从而能通过WiFi或蓝牙连接的方式进行控制,既可以自平衡和转向,又可以远程操控,那冠军岂不是手到擒来。 它,就是可以自平衡的赛车机器人——B_ROBOT_100ASK 项目简介本项目基于jjrobots的开源项目B-ROBOT EVO2进行复刻,与原开源项目不一样的地方是,作者将原本适配的的Arduino控制板移植为DShanMCU-R128s2-DevKit开发板,与此同时还添加了一些功能,比如自平衡功能、WiFi&蓝牙控制、App控制以及语音控制功能,让平衡小车的操控乐趣更上一层楼。 硬件设计本项目中的自平衡赛车机器人的硬件设计结构非常简单,硬件部分主要由R128开发板和几个驱动模块组成。 自平衡机器人选用两个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网络通信控制。
|