// app #include "balance.h" #include "linkNleg.h" #include "robot_def.h" #include "general_def.h" #include "ins_task.h" #include "HT04.h" #include "LK9025.h" #include "controller.h" #include "can_comm.h" #include "super_cap.h" #include "user_lib.h" #include "remote_control.h" #include "referee_task.h" #include "stdint.h" #include "arm_math.h" // 需要用到较多三角函数 #include "bsp_dwt.h" #include "bsp_log.h" // 计时变量 static uint32_t balance_dwt_cnt; static float del_t; // 底盘拥有的实例模块 static INS_t *Chassis_IMU_data; static RC_ctrl_t *rc_data; // 底盘单独调试用 static Chassis_Ctrl_Cmd_s chassis_cmd_recv; // 四个关节电机和两个驱动轮电机 static HTMotorInstance *lf, *lb, *rf, *rb, *joint[4]; // 指针数组方便传参和调试 static LKMotorInstance *l_driven, *r_driven, *driven[2]; // 两个腿的参数,0为左腿,1为右腿 static LinkNPodParam l_side, r_side; static ChassisParam chassis; // 底盘状态 static Robot_Status_e chassis_status; void BalanceInit() { rc_data = RemoteControlInit(&huart3); Chassis_IMU_data = INS_Init(); // 关节电机 Motor_Init_Config_s joint_conf = { // 写一个,剩下的修改方向和id即可 .can_init_config = { .can_handle = &hcan1}, .controller_setting_init_config = { .close_loop_type = OPEN_LOOP, .outer_loop_type = OPEN_LOOP, .motor_reverse_flag = FEEDBACK_DIRECTION_NORMAL, .angle_feedback_source = MOTOR_FEED, .speed_feedback_source = MOTOR_FEED, }, .motor_type = HT04}; joint_conf.can_init_config.tx_id = 1; joint_conf.can_init_config.rx_id = 11; joint[LF] = lf = HTMotorInit(&joint_conf); joint_conf.can_init_config.tx_id = 2; joint_conf.can_init_config.rx_id = 12; joint[LB] = lb = HTMotorInit(&joint_conf); joint_conf.can_init_config.tx_id = 3; joint_conf.can_init_config.rx_id = 13; joint[RF] = rf = HTMotorInit(&joint_conf); joint_conf.can_init_config.tx_id = 4; joint_conf.can_init_config.rx_id = 14; joint[RB] = rb = HTMotorInit(&joint_conf); // 驱动轮电机 Motor_Init_Config_s driven_conf = { // 写一个,剩下的修改方向和id即可 .can_init_config.can_handle = &hcan2, .controller_setting_init_config = { .angle_feedback_source = MOTOR_FEED, .speed_feedback_source = MOTOR_FEED, .outer_loop_type = OPEN_LOOP, .close_loop_type = OPEN_LOOP, .motor_reverse_flag = MOTOR_DIRECTION_NORMAL, }, .motor_type = LK9025, }; driven_conf.can_init_config.tx_id = 2; driven[LD] = l_driven = LKMotorInit(&driven_conf); driven_conf.can_init_config.tx_id = 1; driven[RD] = r_driven = LKMotorInit(&driven_conf); // 状态初始化 chassis_status = ROBOT_READY; DWT_GetDeltaT(&balance_dwt_cnt); } static void EnableAllMotor() /* 打开所有电机 */ { for (uint8_t i = 0; i < JOINT_CNT; i++) // 打开关节电机 HTMotorEnable(joint[i]); for (uint8_t i = 0; i < DRIVEN_CNT; i++) // 打开驱动电机 LKMotorEnable(driven[i]); } void BalanceTask() { }