修好了

This commit is contained in:
Robofish 2026-02-04 17:39:24 +08:00
parent 3f9f3ef734
commit 6ed012e759
10 changed files with 3625 additions and 3428 deletions

View File

@ -153,40 +153,7 @@
<Name>-U-O142 -O2254 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(5BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32H72x-73x_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32H723VGTx$CMSIS\Flash\STM32H72x-73x_1024.FLM)</Name> <Name>-U-O142 -O2254 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(5BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32H72x-73x_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32H723VGTx$CMSIS\Flash\STM32H72x-73x_1024.FLM)</Name>
</SetRegEntry> </SetRegEntry>
</TargetDriverDllRegistry> </TargetDriverDllRegistry>
<Breakpoint> <Breakpoint/>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>481</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134292468</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>..\User\device\mrobot.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\CtrBoard_H7_ALL\../User/device/mrobot.c\481</Expression>
</Bp>
<Bp>
<Number>1</Number>
<Type>0</Type>
<LineNumber>484</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134292488</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>..\User\device\mrobot.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\CtrBoard_H7_ALL\../User/device/mrobot.c\484</Expression>
</Bp>
</Breakpoint>
<WatchWindow1> <WatchWindow1>
<Ww> <Ww>
<count>0</count> <count>0</count>

File diff suppressed because it is too large Load Diff

View File

@ -484,9 +484,8 @@ void MRobot_Init(void) {
/* 创建互斥锁 */ /* 创建互斥锁 */
ctx.mutex = xSemaphoreCreateMutex(); ctx.mutex = xSemaphoreCreateMutex();
/* 初始化状态 */ /* 初始化状态(保留已注册的设备) */
memset(ctx.devices, 0, sizeof(ctx.devices)); // 注意:不清除 devices 和 device_count因为其他任务可能已经注册了设备
ctx.device_count = 0;
ctx.custom_cmd_count = 0; ctx.custom_cmd_count = 0;
ctx.state = MROBOT_STATE_IDLE; ctx.state = MROBOT_STATE_IDLE;
strcpy(ctx.current_path, "/"); strcpy(ctx.current_path, "/");

View File

@ -14,6 +14,7 @@
#include "component/pid.h" #include "component/pid.h"
#include "device/bmi088.h" #include "device/bmi088.h"
#include "device/device.h" #include "device/device.h"
#include "device/mrobot.h"
#include "module/balance_chassis.h" #include "module/balance_chassis.h"
#include "task/user_task.h" #include "task/user_task.h"
#include <stdio.h> #include <stdio.h>
@ -52,6 +53,20 @@ static const KPID_Params_t imu_temp_ctrl_pid_param = {
/* Private function --------------------------------------------------------- */ /* Private function --------------------------------------------------------- */
/* USER PRIVATE CODE BEGIN */ /* USER PRIVATE CODE BEGIN */
/**
* @brief IMU数据打印回调
*/
static int print_chassis_imu(const void *data, char *buf, size_t size) {
const Chassis_IMU_t *imu = (const Chassis_IMU_t *)data;
return MRobot_Snprintf(buf, size,
" Accel : X=%.3f Y=%.3f Z=%.3f (m/s²)\r\n"
" Gyro : X=%.3f Y=%.3f Z=%.3f (rad/s)\r\n"
" Euler : R=%.2f P=%.2f Y=%.2f (deg)\r\n",
imu->accl.x, imu->accl.y, imu->accl.z,
imu->gyro.x, imu->gyro.y, imu->gyro.z,
imu->euler.rol, imu->euler.pit, imu->euler.yaw);
}
/* USER PRIVATE CODE END */ /* USER PRIVATE CODE END */
/* Exported functions ------------------------------------------------------- */ /* Exported functions ------------------------------------------------------- */
void Task_atti_esit(void *argument) { void Task_atti_esit(void *argument) {
@ -70,7 +85,7 @@ void Task_atti_esit(void *argument) {
PID_Init(&imu_temp_ctrl_pid, KPID_MODE_NO_D, PID_Init(&imu_temp_ctrl_pid, KPID_MODE_NO_D,
1.0f / BMI088_GetUpdateFreq(&bmi088), &imu_temp_ctrl_pid_param); 1.0f / BMI088_GetUpdateFreq(&bmi088), &imu_temp_ctrl_pid_param);
BSP_PWM_Start(BSP_PWM_IMU_HEAT); BSP_PWM_Start(BSP_PWM_IMU_HEAT);
MRobot_RegisterDevice("chassis_imu", &imu_for_chassis, print_chassis_imu);
/* USER CODE INIT END */ /* USER CODE INIT END */
while (1) { while (1) {

View File

@ -9,6 +9,7 @@
#include "bsp/can.h" #include "bsp/can.h"
#include "device/motor_lk.h" #include "device/motor_lk.h"
#include "device/motor_lz.h" #include "device/motor_lz.h"
#include "device/mrobot.h"
#include "module/config.h" #include "module/config.h"
#include "module/balance_chassis.h" #include "module/balance_chassis.h"
/* USER INCLUDE END */ /* USER INCLUDE END */
@ -34,6 +35,29 @@ Chassis_IMU_t chassis_imu;
/* Private function --------------------------------------------------------- */ /* Private function --------------------------------------------------------- */
/* USER PRIVATE CODE BEGIN */ /* USER PRIVATE CODE BEGIN */
/**
* @brief
*/
static int print_chassis(const void *data, char *buf, size_t size) {
const Chassis_t *chassis = (const Chassis_t *)data;
return MRobot_Snprintf(buf, size,
" Mode : %d\r\n"
" IMU : Roll=%.2f Pitch=%.2f Yaw=%.2f (deg)\r\n"
" Motors : J0=%.1f J1=%.1f J2=%.1f J3=%.1f (rpm)\r\n"
" Wheels : W0=%.1f W1=%.1f (rpm)\r\n"
" Output : J0=%.1f J1=%.1f J2=%.1f J3=%.1f\r\n"
" VelX : %.3f m/s\r\n",
chassis->mode,
chassis->feedback.imu.euler.rol, chassis->feedback.imu.euler.pit, chassis->feedback.imu.euler.yaw,
chassis->feedback.joint[0].rotor_speed, chassis->feedback.joint[1].rotor_speed,
chassis->feedback.joint[2].rotor_speed, chassis->feedback.joint[3].rotor_speed,
chassis->feedback.wheel[0].rotor_speed, chassis->feedback.wheel[1].rotor_speed,
chassis->output.joint[0], chassis->output.joint[1],
chassis->output.joint[2], chassis->output.joint[3],
chassis->chassis_state.velocity_x);
return 0;
}
/* USER PRIVATE CODE END */ /* USER PRIVATE CODE END */
/* Exported functions ------------------------------------------------------- */ /* Exported functions ------------------------------------------------------- */
void Task_ctrl_chassis(void *argument) { void Task_ctrl_chassis(void *argument) {
@ -49,6 +73,7 @@ void Task_ctrl_chassis(void *argument) {
/* USER CODE INIT BEGIN */ /* USER CODE INIT BEGIN */
Chassis_Init(&chassis, &Config_GetRobotParam()->chassis_param, CTRL_CHASSIS_FREQ); Chassis_Init(&chassis, &Config_GetRobotParam()->chassis_param, CTRL_CHASSIS_FREQ);
MRobot_RegisterDevice("chassis", &chassis, print_chassis);
/* USER CODE INIT END */ /* USER CODE INIT END */

View File

@ -7,6 +7,7 @@
#include "task/user_task.h" #include "task/user_task.h"
/* USER INCLUDE BEGIN */ /* USER INCLUDE BEGIN */
#include "component/ahrs.h" #include "component/ahrs.h"
#include "device/mrobot.h"
#include "module/gimbal.h" #include "module/gimbal.h"
#include "module/config.h" #include "module/config.h"
#include "bsp/can.h" #include "bsp/can.h"
@ -26,6 +27,25 @@ Gimbal_AI_t gimbal_ai;
/* Private function --------------------------------------------------------- */ /* Private function --------------------------------------------------------- */
/* USER PRIVATE CODE BEGIN */ /* USER PRIVATE CODE BEGIN */
/**
* @brief
*/
static int print_gimbal(const void *data, char *buf, size_t size) {
const Gimbal_t *gimbal = (const Gimbal_t *)data;
return MRobot_Snprintf(buf, size,
" Mode : %d\r\n"
" IMU : Roll=%.2f Pitch=%.2f Yaw=%.2f (deg)\r\n"
" GyroX : %.3f GyroY : %.3f GyroZ : %.3f (rad/s)\r\n"
" Motor : Yaw=%.1f(rpm) Pit=%.1f(rpm)\r\n"
" Output : Yaw=%.1f Pit=%.1f\r\n",
gimbal->mode,
gimbal->imu.data.eulr.rol, gimbal->imu.data.eulr.pit, gimbal->imu.data.eulr.yaw,
gimbal->imu.data.gyro.x, gimbal->imu.data.gyro.y, gimbal->imu.data.gyro.z,
gimbal->feedback.motor.yaw.rotor_speed, gimbal->feedback.motor.pit.rotor_speed,
gimbal->out.yaw, gimbal->out.pit);
return 0;
}
/* USER PRIVATE CODE END */ /* USER PRIVATE CODE END */
/* Exported functions ------------------------------------------------------- */ /* Exported functions ------------------------------------------------------- */
void Task_ctrl_gimbal(void *argument) { void Task_ctrl_gimbal(void *argument) {
@ -39,7 +59,9 @@ void Task_ctrl_gimbal(void *argument) {
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */ uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */
/* USER CODE INIT BEGIN */ /* USER CODE INIT BEGIN */
Gimbal_Init(&gimbal, &Config_GetRobotParam()->gimbal_param, CTRL_GIMBAL_FREQ); Gimbal_Init(&gimbal, &Config_GetRobotParam()->gimbal_param, CTRL_GIMBAL_FREQ);
MRobot_RegisterDevice("gimbal", &gimbal, print_gimbal);
/* USER CODE INIT END */ /* USER CODE INIT END */
while (1) { while (1) {

View File

@ -6,6 +6,7 @@
/* Includes ----------------------------------------------------------------- */ /* Includes ----------------------------------------------------------------- */
#include "task/user_task.h" #include "task/user_task.h"
/* USER INCLUDE BEGIN */ /* USER INCLUDE BEGIN */
#include "device/mrobot.h"
#include "module/shoot.h" #include "module/shoot.h"
#include "module/config.h" #include "module/config.h"
/* USER INCLUDE END */ /* USER INCLUDE END */
@ -22,6 +23,27 @@ Shoot_CMD_t shoot_cmd;
/* Private function --------------------------------------------------------- */ /* Private function --------------------------------------------------------- */
/* USER PRIVATE CODE BEGIN */ /* USER PRIVATE CODE BEGIN */
/**
* @brief
*/
static int print_shoot(const void *data, char *buf, size_t size) {
const Shoot_t *shoot = (const Shoot_t *)data;
return MRobot_Snprintf(buf, size,
" State : %d\r\n"
" Fric0 : %.1f rpm (target: %.1f)\r\n"
" Fric1 : %.1f rpm (target: %.1f)\r\n"
" Fric_Avg : %.1f rpm\r\n"
" Trig : %.1f rpm (angle: %.2f deg)\r\n"
" Output : Fric0=%.1f Fric1=%.1f Trig=%.1f\r\n",
shoot->running_state,
shoot->feedback.fric_rpm[0], shoot->target_variable.target_rpm,
shoot->feedback.fric_rpm[1], shoot->target_variable.target_rpm,
shoot->feedback.fric_avgrpm,
shoot->feedback.trig_rpm, shoot->feedback.trig_angle_cicle,
shoot->output.out_fric[0], shoot->output.out_fric[1], shoot->output.outagl_trig);
return 0;
}
/* USER PRIVATE CODE END */ /* USER PRIVATE CODE END */
/* Exported functions ------------------------------------------------------- */ /* Exported functions ------------------------------------------------------- */
void Task_ctrl_shoot(void *argument) { void Task_ctrl_shoot(void *argument) {
@ -35,7 +57,9 @@ void Task_ctrl_shoot(void *argument) {
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */ uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */
/* USER CODE INIT BEGIN */ /* USER CODE INIT BEGIN */
Shoot_Init(&shoot,&Config_GetRobotParam()->shoot_param,CTRL_SHOOT_FREQ); Shoot_Init(&shoot,&Config_GetRobotParam()->shoot_param,CTRL_SHOOT_FREQ);
MRobot_RegisterDevice("shoot", &shoot, print_shoot);
/* USER CODE INIT END */ /* USER CODE INIT END */

View File

@ -7,6 +7,7 @@
#include "task/user_task.h" #include "task/user_task.h"
/* USER INCLUDE BEGIN */ /* USER INCLUDE BEGIN */
#include "device/dr16.h" #include "device/dr16.h"
#include "device/mrobot.h"
#include "module/shoot.h" #include "module/shoot.h"
#include "module/balance_chassis.h" #include "module/balance_chassis.h"
#include "module/gimbal.h" #include "module/gimbal.h"
@ -27,6 +28,29 @@ Gimbal_CMD_t cmd_for_gimbal;
/* Private function --------------------------------------------------------- */ /* Private function --------------------------------------------------------- */
/* USER PRIVATE CODE BEGIN */ /* USER PRIVATE CODE BEGIN */
/**
* @brief DR16数据打印回调
*/
static int print_dr16(const void *data, char *buf, size_t size) {
const DR16_t *dr16 = (const DR16_t *)data;
return MRobot_Snprintf(buf, size,
" Status : %s\r\n"
" ChLX : %.3f ChLY : %.3f\r\n"
" ChRX : %.3f ChRY : %.3f\r\n"
" ChRes : %.3f\r\n"
" SwL : %d SwR : %d\r\n"
" Mouse : X=%d Y=%d Z=%d (L:%d R:%d)\r\n"
" Keys : 0x%04X\r\n",
dr16->header.online ? "Online" : "Offline",
dr16->data.ch_l_x, dr16->data.ch_l_y,
dr16->data.ch_r_x, dr16->data.ch_r_y,
dr16->data.ch_res,
dr16->data.sw_l, dr16->data.sw_r,
dr16->data.mouse.x, dr16->data.mouse.y, dr16->data.mouse.z,
dr16->data.mouse.l_click, dr16->data.mouse.r_click,
dr16->data.keyboard.value);
}
/* USER PRIVATE CODE END */ /* USER PRIVATE CODE END */
/* Exported functions ------------------------------------------------------- */ /* Exported functions ------------------------------------------------------- */
void Task_rc(void *argument) { void Task_rc(void *argument) {
@ -41,6 +65,7 @@ void Task_rc(void *argument) {
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */ uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */
/* USER CODE INIT BEGIN */ /* USER CODE INIT BEGIN */
DR16_Init(&dr16); DR16_Init(&dr16);
MRobot_RegisterDevice("dr16", &dr16, print_dr16);
/* USER CODE INIT END */ /* USER CODE INIT END */
while (1) { while (1) {

View File

@ -5,7 +5,7 @@ Task_Runtime_t task_runtime;
const osThreadAttr_t attr_init = { const osThreadAttr_t attr_init = {
.name = "Task_Init", .name = "Task_Init",
.priority = osPriorityRealtime, .priority = osPriorityRealtime,
.stack_size = 256 * 4, .stack_size = 256 * 16,
}; };
/* User_task */ /* User_task */