拿到S1后,首先把麦克纳姆轮的运动学原理仔细研究了一下,参考https://blog.csdn.net/banzhuan133/article/details/69229922的文章,结合S1自身的坐标轴和角速度方向定义,得出了S1的逆运动方程(正运动方程可很方便的推导出)如下图。根据底盘中心各项速度可方便得出各轮子的速度(除以周长得出转速),且视频教程中并没有给出加角速度的逆运动学公式,比大师之路给出的叠加法更直接。这里也必须指出大疆已经把各轮子的转速得出的底盘运动速度进行了封装,直接使用chassis_ctrl.move_with_speed(vx,vy,w)函数即可得出自己想要的运动方向,但能深入了解其背后的原理也正式大疆教育机器人的初衷嘛!!
作为CodeMaster的报名作品,我利用固定大小的线速度和角速度实际上做圆周运动的原理,ω*r=v,即角速度乘以圆周半径等于切线速度,给定底盘的角速度、线速度,就可以得到圆周运动的圆心和半径。本次通过调整底盘的角速度、线速度,让S1自行画了一个如下图参数的“心形”图案,完美展示了机甲大师麦克纳姆轮全向运动的优势。
以下就分别就半径30cm的半圆、90cm的圆弧的参数设计大概做个介绍:
1.若取ω=60°/s,r=0.3m,可得出v=0.314m/s,为简单起见,可令vtx=0.314m/s,vty=0m/s。再计算运动时间=180°/ω=3s。即可实现心形左上半圆的绘制(见代码)。
2.若取ω=35°/s,r=0.9m,可得出v=0.548m/s,为简单起见,可令vtx=0.548m/s,vty=0m/s。再计算运动时间=71°/ω=2.03s。即可实现心形右下圆弧的绘制(见代码)。
尚需完善的地方:
1.测试为木地板,轮子容易打滑,没转完一圈后编写了自动调整为初始化位置效果并不理想,有待到橡胶场地试验一下。
2.S1的陀螺仪传感器对方位比较准确,但通过麦轮对位置的丈量不知是场地原因还是什么,并不很可靠。
3.底盘运动到指定位置的时间与理论计算的时间并不十分耦合,是否因为理论计算中涉及到的小数,在S1的封装中给取整造成的不得而知。调试程序中尚需在理论值附近调参才能得到比较理想的效果。