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

View File

View File

View File

@@ -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);

View File

@@ -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;
// 推送消息

View File

@@ -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
}