03 技术宅教你自制全向麦克纳姆轮战车
让我们来想象一个场景(见图3.1):你深夜开车回家,在小区里转了一圈又一圈,好不容易找到一个车位,但是发现前面的车乱停,剩下的空间正好只能停放你的车,连一点空隙都不给你,你说怎么办?
视频演示二维码
眼睁睁地看着一个车位就是停不进,是不是很不爽?是不是很恼火?于是,新的组合开始了,你有没有想过,当横行霸道的螃蟹遇到了汽车,会发生什么?
这就是神奇的麦克纳姆轮,请感受一波神奇的操作:横向入库(见图3.2)。
图3.1 制作初衷
图3.2 设计目标
麦克纳姆轮具有神奇的全向行动能力,受到很多机器人爱好者青睐,例如RoboMaster机甲大师比赛中,一些机器人采用的就是麦克纳姆轮(见图3.3)。
图3.3 其他运用了麦克纳姆轮的机器人
但麦克纳姆轮动辄几百元的价格,让热爱它的小伙伴们望而却步。那是否麦克纳姆轮就与我们普通创客爱好者无缘了呢?当然不是,本教程就教你自制麦克纳姆轮,并用麦克纳姆轮与其他材料制作出一辆麦克纳姆轮战车。只要你身边有3D打印机和激光切割机(可选),就跟我一起制作出一辆全向小车吧!
3.1 自制麦克纳姆轮
制作麦克纳姆轮所需材料与工具见表3.1。
表3.1 制作麦克纳姆轮所需材料与工具
1 将麦克纳姆轮模型用3D打印机打印出来,每个轮子由1个大轮与9个从动轮组成。左旋与右旋模型各打印两个,从动轮左右通用,打印4×9=36个。
2 将热缩管裁剪至适当长度套在小从动轮上,用镊子夹住,使用热风枪加热热缩管,使热缩管受热缩紧,最后使用美工刀将边缘多余的热缩管割掉,每个小从动轮都如此加工。
3 用大头针穿过从动轮并固定在大轮上,确保足够顺滑即可。
4 重复上述步骤,麦克纳姆轮就制作完成啦!
表3.2 电路部分所需材料
3.2 电路部分
接下来就要开始制作战车的电路部分了。在制作控制电路之前,我们先来进行一步简单的操作:在战车底盘上安装电机。用塑料销钉和电机固定座将4个N20减速电机分别固定在激光切割好的木板底盘上,将麦克纳姆轮安装在电机轴上,如图3.4所示,底盘就制作完成啦。
图3.4 制作麦克纳姆轮战车底盘
电路部分所需材料见表3.2,材料实物如图3.5所示。
图3.5 电路部分实物
接下来我将进行麦克纳姆轮战车控制电路部分的制作。
1 首先将电机与电机驱动板之间焊接好导线,并将各电机信号线以及电源线用杜邦线母头引出待用。
2 准备好前挡板、电池仓挡板以及固定件。
3 安装好电池仓与前挡板。
4 将Arduino核心控制板Athena固定好后,将底板引出信号线与电源线接好。共8根信号线控制4个电机的正反转。
5 将超声波模块和固定座固定好后装在小车上。适当移动电池与零件位置,将小车重心保持在小车中间位置,至此,麦克纳姆轮战车就完成啦!
6 其实它还能换头像呢,我用激光切割出一个酷炫的“麦熊头像”。
图3.6 Arduino核心控制板Athena
此小车采用的是捣鼓车间出品的Arduino核心控制板Athena(见图3.6),它自带传感器与蓝牙接口,可以满足大部分项目需求。
无论是Arduino Uno还是Arduino Nano,都只有6个PWM口(编号分别为3、5、6、9、10、11),无法满足控制4个电机,共需要8个接口输出PWM信号的需求。Arduino MEGA2560有8个以上的PWM接口,但体积过大,不适合该项目。我在引脚分配上做出了调整,使用4个PWM接口与4个数字口就可以实现4个电机的调速,我们知道PWM就是数字口的占空比,当引脚为低电平输出PWM信号时,可以调节速度数值为0~255,该数值为255时电机转速最快;反之,当引脚为高电平输出PWM信号时,调节速度数值也是0~255,数值为255时电机停止,PWM输出0时电机转速最快。这样,只需要在程序中调节PWM信号的参数与数字口的输出,就可以控制电机的速度与旋转方向了,调速说明见表3.3。
表3.3 调速说明
注:表中“1”代表高电平,“0”代表低电平,“PWM”代表调制脉宽波。IN1、IN2控制电机A,IN3、IN4控制电机B。
图3.7 整个麦克纳姆轮战车电路的连接方式
有了Arduino核心控制板Athena的介绍和PWM调速说明,整个战车的电路就很简单啦,电路连接方式如图3.7所示。
3.3 程序编写
麦克纳姆轮与普通轮子的区别在于麦克纳姆轮旋转时,由于存在斜向的从动轮,会同时产生一个斜向的力,当我们控制轮子旋转的速度与方向时,将斜向的力增强或抵消,就可实现小车的全向移动,完成横方移、斜方向移动等普通小车无法完成的高难度动作,如图3.8所示。
麦克纳姆轮战车采用手机App遥控的方式来进行操作,手机端控制采用的是现成的“可控Ctrl”App,手机与战车之间通过蓝牙通信,手机端通过摇杆控制小车的全向移动。
麦克纳姆轮战车下位机端的编程思路是:摇杆通过蓝牙返回Joy_x与Joy_y两个变量,最大为1,最小为-1,两坐标遍历半径为1的圆内。程序中有8个方向移动的子程序,程序思路是摇杆活动半径大于0.5以后,开始判断属于哪个范围内,并执行相对应的子程序。最开始采用的是判断坐标范围,发现效果并不理想,最终采用通过计算tan值判断该点所在象限,从而判断该点所在的区域,这样的方法在内圆内不作执行指令,方便操作。另外可以将整周的圆八等分,算法简洁可靠。摇杆部分算法如下,完整程序请从本书下载平台(见目录)下载。
图3.8 麦克纳姆轮全向移动原理解析
至此,完整的麦克纳姆轮战车就制作完成啦!