From c2256da27cedf97f1f46e2ad14663c7afc86973b Mon Sep 17 00:00:00 2001 From: chenfu <2412777093@qq.com> Date: Sun, 3 Dec 2023 18:41:36 +0800 Subject: [PATCH] test bmi088 --- application/chassis/balance.h | 0 application/chassis/chassis.md | 2 +- application/chassis/mecanum.h | 0 application/chassis/steering.h | 0 application/cmd/robot_cmd.c | 45 ++++++++++++++++++++++++++++++++++ application/gimbal/gimbal.c | 29 ++++++++++++++++++---- application/robot.c | 12 ++++----- 7 files changed, 76 insertions(+), 12 deletions(-) create mode 100644 application/chassis/balance.h create mode 100644 application/chassis/mecanum.h create mode 100644 application/chassis/steering.h diff --git a/application/chassis/balance.h b/application/chassis/balance.h new file mode 100644 index 0000000..e69de29 diff --git a/application/chassis/chassis.md b/application/chassis/chassis.md index 6f04688..b5e1b1b 100644 --- a/application/chassis/chassis.md +++ b/application/chassis/chassis.md @@ -1,7 +1,7 @@ # chassis - +@Todo 使用条件编译,选择麦轮(全向轮),舵轮,平衡底盘 ## 工作流程 首先进行初始化,`ChasissInit()`会被`RobotInit()`调用,进行裁判系统、底盘电机的初始化。如果为双板模式,则还会初始化IMU,并且将消息订阅者和发布者的初始化改为`CANComm`的初始化。 diff --git a/application/chassis/mecanum.h b/application/chassis/mecanum.h new file mode 100644 index 0000000..e69de29 diff --git a/application/chassis/steering.h b/application/chassis/steering.h new file mode 100644 index 0000000..e69de29 diff --git a/application/cmd/robot_cmd.c b/application/cmd/robot_cmd.c index 6a989ce..ee9d3b9 100644 --- a/application/cmd/robot_cmd.c +++ b/application/cmd/robot_cmd.c @@ -8,6 +8,7 @@ #include "message_center.h" #include "general_def.h" #include "dji_motor.h" +#include "bmi088.h" // bsp #include "bsp_dwt.h" #include "bsp_log.h" @@ -45,8 +46,51 @@ static Shoot_Upload_Data_s shoot_fetch_data; // 从发射获取的反馈信息 static Robot_Status_e robot_state; // 机器人整体工作状态 +BMI088Instance *bmi088; // 云台IMU +BMI088_Data_t bmi088_data; void RobotCMDInit() { + BMI088_Init_Config_s bmi088_config = { + .cali_mode = BMI088_CALIBRATE_ONLINE_MODE, + .work_mode = BMI088_BLOCK_TRIGGER_MODE, + .spi_acc_config = { + .spi_handle = &hspi1, + .GPIOx = GPIOA, + .cs_pin = GPIO_PIN_4, + .spi_work_mode = SPI_IT_MODE, + }, + .acc_int_config = { + .GPIOx = GPIOC, + .GPIO_Pin = GPIO_PIN_4, + .exti_mode = GPIO_EXTI_MODE_RISING, + }, + .spi_gyro_config = { + .spi_handle = &hspi1, + .GPIOx = GPIOB, + .cs_pin = GPIO_PIN_0, + .spi_work_mode = SPI_IT_MODE, + }, + .gyro_int_config = { + .GPIO_Pin = GPIO_PIN_5, + .GPIOx = GPIOC, + .exti_mode = GPIO_EXTI_MODE_RISING, + }, + .heat_pwm_config = { + .htim = &htim10, + .channel = TIM_CHANNEL_1, + .period = 1, + }, + .heat_pid_config = { + .Kp = 0.5, + .Ki = 0, + .Kd = 0, + .DeadBand = 0.1, + .Improve = PID_Trapezoid_Intergral | PID_Integral_Limit | PID_Derivative_On_Measurement, + .IntegralLimit = 100, + .MaxOut = 100, + }, + }; + bmi088 = BMI088Register(&bmi088_config); rc_data = RemoteControlInit(&huart3); // 修改为对应串口,注意如果是自研板dbus协议串口需选用添加了反相器的那个 vision_recv_data = VisionInit(&huart1); // 视觉通信串口 @@ -275,6 +319,7 @@ static void EmergencyHandler() /* 机器人核心控制任务,200Hz频率运行(必须高于视觉发送频率) */ void RobotCMDTask() { + BMI088Acquire(bmi088,&bmi088_data) ; // 从其他应用获取回传数据 #ifdef ONE_BOARD SubGetMessage(chassis_feed_sub, (void *)&chassis_fetch_data); diff --git a/application/gimbal/gimbal.c b/application/gimbal/gimbal.c index 9968cee..b42178e 100644 --- a/application/gimbal/gimbal.c +++ b/application/gimbal/gimbal.c @@ -5,7 +5,6 @@ #include "message_center.h" #include "general_def.h" #include "bmi088.h" -#include "bmi088.h" static attitude_t *gimba_IMU_data; // 云台IMU数据 static DJIMotorInstance *yaw_motor, *pitch_motor; @@ -15,12 +14,32 @@ static Subscriber_t *gimbal_sub; // cmd控制消息订阅者 static Gimbal_Upload_Data_s gimbal_feedback_data; // 回传给cmd的云台状态信息 static Gimbal_Ctrl_Cmd_s gimbal_cmd_recv; // 来自cmd的控制信息 -//static BMI088Instance *bmi088; // 云台IMU +static BMI088Instance *bmi088; // 云台IMU void GimbalInit() { - gimba_IMU_data = INS_Init(); // IMU先初始化,获取姿态数据指针赋给yaw电机的其他数据来源 + //gimba_IMU_data = INS_Init(); // IMU先初始化,获取姿态数据指针赋给yaw电机的其他数据来源 + BMI088_Init_Config_s imu_config = { + .work_mode = BMI088_BLOCK_PERIODIC_MODE, + .spi_acc_config = { + .spi_handle = &hspi1, + .GPIOx = GPIOA, + .cs_pin = GPIO_PIN_4, + .spi_work_mode = SPI_BLOCK_MODE, + }, + .spi_gyro_config = { + .spi_handle = &hspi1, + .GPIOx = GPIOA, + .cs_pin = GPIO_PIN_4, + .spi_work_mode = SPI_BLOCK_MODE, + }, + .heat_pwm_config = { + .htim = &htim10, + .channel = TIM_CHANNEL_1, + .period = 1, + } - // bmi088=BMI088Register(&imu_config); + }; + bmi088=BMI088Register(&imu_config); // YAW Motor_Init_Config_s yaw_config = { .can_init_config = { @@ -149,7 +168,7 @@ void GimbalTask() // ... // 设置反馈数据,主要是imu和yaw的ecd - //gimbal_feedback_data.gimbal_imu_data = *gimba_IMU_data; + gimbal_feedback_data.gimbal_imu_data = *gimba_IMU_data; gimbal_feedback_data.yaw_motor_single_round_angle = yaw_motor->measure.angle_single_round; // 推送消息 diff --git a/application/robot.c b/application/robot.c index 3102179..7124ab4 100644 --- a/application/robot.c +++ b/application/robot.c @@ -31,12 +31,12 @@ void RobotInit() #if defined(ONE_BOARD) || defined(GIMBAL_BOARD) RobotCMDInit(); - GimbalInit(); - ShootInit(); + //GimbalInit(); + //ShootInit(); #endif #if defined(ONE_BOARD) || defined(CHASSIS_BOARD) - ChassisInit(); + //ChassisInit(); #endif OSTaskInit(); // 创建基础任务 @@ -49,12 +49,12 @@ void RobotTask() { #if defined(ONE_BOARD) || defined(GIMBAL_BOARD) RobotCMDTask(); - GimbalTask(); - ShootTask(); + //GimbalTask(); + //ShootTask(); #endif #if defined(ONE_BOARD) || defined(CHASSIS_BOARD) - ChassisTask(); + //ChassisTask(); #endif } \ No newline at end of file