Main Takeaway
复活汤圆子!
完整地把这个流程跑了一遍,成功让汤圆子较为平滑地实现了三种运动模式——平动,随动,小陀螺。在这个过程中我也收获了很多,在此记录一下!
效果展示
此处仅有小陀螺:(大家应该看不到,因为我存在本地的,哈哈)
底盘运动
汤圆子是舵轮控制,四个舵电机和四个轮电机
可以参考这篇文章对舵轮的姿态解算进行了解四舵轮运动算法解析_4个轮子中心旋转的算法-CSDN博客
速度
坐标系
坐标系有底盘坐标系,云台坐标系和世界坐标系
本来我应该在云台坐标系中来控制云台的,但我先把云台坐标系映射到底盘坐标系中来(错了,因为我不知道云台还有个imu)
流程
我的写代码的过程:
硬件通信配置
CAN通信——can的FIFO0/1的区别我需要都打开吗? done
// CAN1驱动前后航向电机GM6020 done(传参时还需要查看手册) // CAN2驱动前后驱动电机M3508(自带位置反馈??我怎么用)+C620电调+GM6020舵轮yaw 轴电机ID为1 done(传参时还需要查看手册)
现在我能读到所有的速度和位置了,然后进行姿态解算
TIM ——1k done
imu done(零漂计算OK)
IWDG 已放置,搞懂参数done
遥控器配置 数据读取done
底盘初始化 done
yaw轴电机初始化 done
底盘运动控制——3modes done
姿态解算:只改变target
现在得到的都是弧度
在tim中发送控制命令 done
利用遥控器数据写mode+control done
PID done(参数还没调)
云台控制 done
遥控器配置——与控制 done
初始化每个电机的角度、朝向以及imu的方向——进行补偿
对imu的yaw轴以电机的0°为0° done
舵电机的角度补偿——直接看
架构,对代码进行封装
调试
调试第一步:配置看门狗!!!并将看⻔狗的刷新函数放置在遥控器数据接收或解包的地⽅,确保关闭遥控器后程序能及时被杀死!!!!(疯车时用)
在调试过程中,我的车疯过,只有这样才能体会到看门狗的重要性!,且最好在没收到遥控器数据的时候用CAN发送0的命令,这样更加安全
IWDG:在cube的配置中,prescaler和reloadvalue越⼤,看门狗杀死程序的速度越慢(也不能太快)在遥控器指令解包的代码处调⽤看⻔狗刷新函数,可以实现通过看⻔狗可以使得关闭遥控器的时候可以将程序杀死
我的调试流程:
对舵轮云台和imu进行位姿补偿
实现底盘坐标系下的运动指令响应——即正确控制舵轮和云台
并在此时把车架在矿石上调PID
因为架起来和放下来PID肯定是不一样的,此时调可以让你对电机的性能有个大致的了解,云台在这个时候可以调好!
放下车重新调PID
速度给小一点,防止疯车
实现所有底盘运动模式
调试心得
!!!云台和舵电机要用双环PID——外环角度环,内环速度环
PID无量纲!
开始只用了单环——有点小丑了。
先调内环,再调外环,调内环时外环给的值可以大一点。
检查效果:用手拨一下,看看硬不硬!(单环太软了)
在小陀螺模式中,有个舵轮出问题了(缓震结构不能对称下降,导致我有个舵轮在某个角度被拖着走,还造成了——大家在一些其他同样的部位都没出问题的情况下,可以检查一下机械结构是否有什么异常)
舵轮的移动感觉比麦轮更加平滑,麦轮他们的好抖看着
防侧摔,在速度为0停下来的时候先停一下,再变成小陀螺站立的姿势
写在最后
终期考核完结撒花!坤哥现场检验通过,要成为RMer啦!
希望能为战队作出自己的一份贡献。