0%

电控培训(4)

Main Takeaway

复活汤圆子!

完整地把这个流程跑了一遍,成功让汤圆子较为平滑地实现了三种运动模式——平动,随动,小陀螺。在这个过程中我也收获了很多,在此记录一下!

效果展示

此处仅有小陀螺:(大家应该看不到,因为我存在本地的,哈哈)

底盘运动

,姿态解算时输入这三个参数,就能实现底盘控制

  • 坐标系

    坐标系有底盘坐标系,云台坐标系和世界坐标系

    本来我应该在云台坐标系中来控制云台的,但我先把云台坐标系映射到底盘坐标系中来(错了,因为我不知道云台还有个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啦!

希望能为战队作出自己的一份贡献。

References