test bmi088

This commit is contained in:
chenfu
2023-12-03 18:41:36 +08:00
parent e42c77611b
commit c2256da27c
7 changed files with 76 additions and 12 deletions

View File

View File

@@ -1,7 +1,7 @@
# chassis # chassis
@Todo 使用条件编译,选择麦轮(全向轮),舵轮,平衡底盘
## 工作流程 ## 工作流程
首先进行初始化,`ChasissInit()`会被`RobotInit()`调用进行裁判系统、底盘电机的初始化。如果为双板模式则还会初始化IMU并且将消息订阅者和发布者的初始化改为`CANComm`的初始化。 首先进行初始化,`ChasissInit()`会被`RobotInit()`调用进行裁判系统、底盘电机的初始化。如果为双板模式则还会初始化IMU并且将消息订阅者和发布者的初始化改为`CANComm`的初始化。

View File

View File

View File

@@ -8,6 +8,7 @@
#include "message_center.h" #include "message_center.h"
#include "general_def.h" #include "general_def.h"
#include "dji_motor.h" #include "dji_motor.h"
#include "bmi088.h"
// bsp // bsp
#include "bsp_dwt.h" #include "bsp_dwt.h"
#include "bsp_log.h" #include "bsp_log.h"
@@ -45,8 +46,51 @@ static Shoot_Upload_Data_s shoot_fetch_data; // 从发射获取的反馈信息
static Robot_Status_e robot_state; // 机器人整体工作状态 static Robot_Status_e robot_state; // 机器人整体工作状态
BMI088Instance *bmi088; // 云台IMU
BMI088_Data_t bmi088_data;
void RobotCMDInit() 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协议串口需选用添加了反相器的那个 rc_data = RemoteControlInit(&huart3); // 修改为对应串口,注意如果是自研板dbus协议串口需选用添加了反相器的那个
vision_recv_data = VisionInit(&huart1); // 视觉通信串口 vision_recv_data = VisionInit(&huart1); // 视觉通信串口
@@ -275,6 +319,7 @@ static void EmergencyHandler()
/* 机器人核心控制任务,200Hz频率运行(必须高于视觉发送频率) */ /* 机器人核心控制任务,200Hz频率运行(必须高于视觉发送频率) */
void RobotCMDTask() void RobotCMDTask()
{ {
BMI088Acquire(bmi088,&bmi088_data) ;
// 从其他应用获取回传数据 // 从其他应用获取回传数据
#ifdef ONE_BOARD #ifdef ONE_BOARD
SubGetMessage(chassis_feed_sub, (void *)&chassis_fetch_data); SubGetMessage(chassis_feed_sub, (void *)&chassis_fetch_data);

View File

@@ -5,7 +5,6 @@
#include "message_center.h" #include "message_center.h"
#include "general_def.h" #include "general_def.h"
#include "bmi088.h" #include "bmi088.h"
#include "bmi088.h"
static attitude_t *gimba_IMU_data; // 云台IMU数据 static attitude_t *gimba_IMU_data; // 云台IMU数据
static DJIMotorInstance *yaw_motor, *pitch_motor; 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_Upload_Data_s gimbal_feedback_data; // 回传给cmd的云台状态信息
static Gimbal_Ctrl_Cmd_s gimbal_cmd_recv; // 来自cmd的控制信息 static Gimbal_Ctrl_Cmd_s gimbal_cmd_recv; // 来自cmd的控制信息
//static BMI088Instance *bmi088; // 云台IMU static BMI088Instance *bmi088; // 云台IMU
void GimbalInit() 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 // YAW
Motor_Init_Config_s yaw_config = { Motor_Init_Config_s yaw_config = {
.can_init_config = { .can_init_config = {
@@ -149,7 +168,7 @@ void GimbalTask()
// ... // ...
// 设置反馈数据,主要是imu和yaw的ecd // 设置反馈数据,主要是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; gimbal_feedback_data.yaw_motor_single_round_angle = yaw_motor->measure.angle_single_round;
// 推送消息 // 推送消息

View File

@@ -31,12 +31,12 @@ void RobotInit()
#if defined(ONE_BOARD) || defined(GIMBAL_BOARD) #if defined(ONE_BOARD) || defined(GIMBAL_BOARD)
RobotCMDInit(); RobotCMDInit();
GimbalInit(); //GimbalInit();
ShootInit(); //ShootInit();
#endif #endif
#if defined(ONE_BOARD) || defined(CHASSIS_BOARD) #if defined(ONE_BOARD) || defined(CHASSIS_BOARD)
ChassisInit(); //ChassisInit();
#endif #endif
OSTaskInit(); // 创建基础任务 OSTaskInit(); // 创建基础任务
@@ -49,12 +49,12 @@ void RobotTask()
{ {
#if defined(ONE_BOARD) || defined(GIMBAL_BOARD) #if defined(ONE_BOARD) || defined(GIMBAL_BOARD)
RobotCMDTask(); RobotCMDTask();
GimbalTask(); //GimbalTask();
ShootTask(); //ShootTask();
#endif #endif
#if defined(ONE_BOARD) || defined(CHASSIS_BOARD) #if defined(ONE_BOARD) || defined(CHASSIS_BOARD)
ChassisTask(); //ChassisTask();
#endif #endif
} }