
/*
 底盘任务

*/
/* Includes ----------------------------------------------------------------- */
#include "chassis.h"
#include "device/motor_rm.h"

/*舵轮舵向校准方法：注释掉关于6020反馈角度的处理以及6020数据的发送这两处(define.h里有快捷方法)，
进debug将四个轮子编码器朝右（左右无所谓，可能会导致5065方向反，在解算里加个负号就行）
查看6020反馈值，将6020反馈值放入motor_offset中*/

/*chassis_t结构体中的内容现在有 move_vec (最终输出速度)   
hopemotorout(期望的底盘输出值)舵轮解算出的各个电机的期望输出值 包括四个6020 和四个3508 
final_out;(经PID计算后的实际发送给电机的实时输出值)  四个6020 四个3508
motorfeedback(电机反馈数据) 四个3508 四个6020 
pid 各个电机的pid参数
ChassisImu_t pos088;  088的实时姿态
 MotorOffset_t motoroffset;	      //5065校准数据
const	Chassis_Param_t *param;     //一些固定的参数
fp32 vofa_send[8];                //vofa输出数据
	LowPassFilter2p_t filled[9];      //低通滤波器
  float keep_angle[4];              // 保持的 6020 角度
*/

/*底盘初始化*/



int8_t chassis_init(Chassis_t *chassis ,const Chassis_Param_t *param, float target_freq )
{
    /*注册电机*/
    for(int i=0;i<4;i++){
    MOTOR_RM_Register(&);
    }
    chassis->param =param;
    //舵轮安装时的6020机械误差，机械校准时1号轮在左前方，所有轮的编码器朝向右面   
	 MotorOffset_t motor_offset = { {271.329506, 330.179474, 208.084482, 29.337082}};
    chassis->motoroffset = motor_offset;
    /*对3508的速度环和6020的角速度以及位置环pid进行初始化*/
    for(int i=0;i<4;i++)
    {
    PID_Init(&chassis->pid.chassis_3508VPID[i], KPID_MODE_NO_D,target_freq,&chassis->param->M3508_param);
    PID_Init(&chassis->pid.chassis_6020OmegaPid[i], KPID_MODE_NO_D,target_freq,&chassis->param->C6020Omega_param);
    PID_Init(&chassis->pid.chassis_6020anglePid[i], KPID_MODE_NO_D,target_freq,&chassis->param->C6020Angle_param);
    }
    /*对遥控器的xyw进行低通滤波*/
    LowPassFilter2p_Init(&chassis->filled[0], target_freq, 20.0f); // vx
    LowPassFilter2p_Init(&chassis->filled[1], target_freq, 20.0f); // vy
    LowPassFilter2p_Init(&chassis->filled[2], target_freq, 20.0f); // vw    
   
    chassis->set_point.yaw=0.0f;
    return CHASSIS_OK;
}





