更新了todo列表

This commit is contained in:
NeoZng 2023-01-08 21:02:02 +08:00
parent 3db2a20a0e
commit 7b5512fb92
7 changed files with 61 additions and 79 deletions

95
TODO.md
View File

@ -10,40 +10,23 @@
### 待完成 ### 待完成
#### bsp_buzzer
- [ ] 添加初始化完成时的音乐播放
### 待优化 ### 待优化
#### bsp_buzzer #### bsp_pwm
需要和**daemon**模块配合。
- [ ] 增加错误或异常提示音
- [ ] 增加功能提示音
#### bsp_led
需要和**daemon**模块配合。这同时会影响到module层的led_task放在这一并解决。
- [ ] 增加错误或异常流水灯
- [ ] 增加功能点灯
- [ ] 是否允许修改预分频计数器?
### 待添加 ### 待添加
#### bsp_spi #### bsp_spi
- [ ] 增加spi的板级支持包供IMU使用和其他外接模块使用 - [x] 待测试BMI088预计1.20前完成)
#### bsp_iic #### bsp_iic
- [ ] 增加iic的板级支持包供磁力计和OLED屏等使用 - [x] 待测试OLEDIST8310预计1.20前完成)
- [ ] 增加软件iic的支持包
#### bsp_gpio #### bsp_gpio
@ -75,33 +58,21 @@
### 待完成 ### 待完成
#### buzzer
- [ ] 使用bsp_pwm添加buzzer模块
- [ ] 添加初始化完成时的音乐播放
#### ==servo_motor== #### ==servo_motor==
舵机模块需要预先定义90/180/360连续旋转的电机类型并且能够设定max和min位置。 舵机模块需要预先定义90/180/360连续旋转的电机类型并且能够设定max和min位置。
- [ ] 编写舵机模块 - [x] 编写舵机模块(待测试和优化)
#### ==daemon==
应用和模块监视功能用于提供掉线和异常检测与应对机制和底层的buzzer、led、oled等配合提供快速的问题定位。
- [ ] 编写daemon
#### LKMotor
LK系列电机目前仅用于平衡步兵驱动轮。后续可能使用其他瓴控电机。
- [ ] 重构LKMotor模块
#### HTMotor
海泰04电机。目前仅用于平衡步兵关节电机。
- [ ] 重构海泰电机模块
#### imu #### imu
- [ ] 增加角速度的反馈,并且能够获取加速度值(目前看来修改反馈数据类型定义即可) - [x] 增加角速度的反馈,并且能够获取加速度值(目前看来修改反馈数据类型定义即可)
#### refereeUI #### refereeUI
@ -124,19 +95,29 @@ LK系列电机目前仅用于平衡步兵驱动轮。后续可能使用其他
### 待优化 ### 待优化
#### imu #### buzzer
需要重写部分数据结构并在bsp_spi完成之后移植到新的bsp上。 > 是否需要在module层就和**daemon**模块配合?
- [ ] 增加错误或异常提示音
- [ ] 增加功能提示音
#### led
> 是否需要和**daemon**模块配合这同时会影响到module层的led_task放在这一并解决。
- [ ] 增加错误或异常流水灯
- [ ] 增加功能点灯
#### BMI088
需要重写部分数据结构并在bsp_spi完成之后移植到新的bsp上。等待bsp_spi的测试
- [ ] 重构imu模块 - [ ] 重构imu模块
#### motor_task
- [ ] 给不同的伺服机构添加不同的执行频率
#### remote_control #### remote_control
- [ ] 将键盘数据解析替换为位域操作 - [x] 将键盘数据解析替换为位域操作(已完成,待测试)
#### referee #### referee
@ -163,6 +144,8 @@ LK系列电机目前仅用于平衡步兵驱动轮。后续可能使用其他
- [ ] 增加3508和2006的开环零位校准函数 - [ ] 增加3508和2006的开环零位校准函数
- [ ] 为实例增加低通滤波系数变量,使不同电机有不同的配置 - [ ] 为实例增加低通滤波系数变量,使不同电机有不同的配置
### 待添加 ### 待添加
#### step_motor #### step_motor
@ -178,9 +161,11 @@ LK系列电机目前仅用于平衡步兵驱动轮。后续可能使用其他
- [ ] 增加扰动观测器,可能需要新增模块 - [ ] 增加扰动观测器,可能需要新增模块
- [ ] 增加模型控制器,可能需要新增模块 - [ ] 增加模型控制器,可能需要新增模块
#### master_process #### ws2816
- [ ] 通过bsp_pwm添加支持
- [ ] 兼容其他通信方式如canspiusb等
@ -200,20 +185,17 @@ LK系列电机目前仅用于平衡步兵驱动轮。后续可能使用其他
- [ ] 键盘控制 - [ ] 键盘控制
- [ ] 鼠标控制 - [ ] 鼠标控制
- [ ] 双板兼容 - [x] 双板兼容(待测试)
#### ==chassis== #### ==chassis==
- [ ] 根据裁判系统的功率数据和超级电容,进行输出限幅 - [ ] 根据裁判系统的功率数据和超级电容,进行输出限幅
- [ ] 双板兼容 - [x] 双板兼容(待测试)
#### ==shoot== #### ==shoot==
- [ ] 优化单发模式的位置闭环(是否要改成速度闭环,然后定时?)
- [ ] 增加卡弹检测和反转 - [ ] 增加卡弹检测和反转
- [ ] 弹仓盖控制需待servo_motor完成 - [ ] 弹仓盖控制需待servo_motor完成
- [ ] 双发射机构兼容
- [ ] 42mm发射机构兼容 - [ ] 42mm发射机构兼容
@ -227,7 +209,6 @@ LK系列电机目前仅用于平衡步兵驱动轮。后续可能使用其他
#### gimbal #### gimbal
- [ ] 增加不同模式之间的过渡(是否有必要?)
- [ ] 增加底盘速度前馈控制 - [ ] 增加底盘速度前馈控制
#### chassis #### chassis
@ -235,7 +216,5 @@ LK系列电机目前仅用于平衡步兵驱动轮。后续可能使用其他
- [ ] 根据电机的实际速度计算底盘的真实运动 - [ ] 根据电机的实际速度计算底盘的真实运动
- [ ] 若为双板根据IMU的数据对电机实际速度进行融合 - [ ] 若为双板根据IMU的数据对电机实际速度进行融合
- [ ] 增加不同模式之间的过渡(是否有必要?)
#### shoot #### shoot

View File

@ -18,7 +18,7 @@ static uint8_t idx;
static USARTInstance *usart_instance[DEVICE_USART_CNT] = {NULL}; static USARTInstance *usart_instance[DEVICE_USART_CNT] = {NULL};
/** /**
* @brief usart service will start automatically, after each module registered * @brief ,,DMA接收,IT和BLOCKING接收
* *
* @todo ,DMA接收,IT和BLOCKING接收 * @todo ,DMA接收,IT和BLOCKING接收
* extern,使module可以控制串口的启停 * extern,使module可以控制串口的启停
@ -78,17 +78,12 @@ void USARTAbort(USARTInstance *_instance, USART_TRANSFER_MODE mode)
* @brief dma/idle中断发生时.uart实例会调用对应的回调进行进一步的处理 * @brief dma/idle中断发生时.uart实例会调用对应的回调进行进一步的处理
* :// * ://
* *
* @todo neozng给HAL库的github repo提了issue, ST在最新的一次更新中为此提供了一个HAL_UARTEx_GetRxEventType() * @note __HAL_DMA_DISABLE_IT(huart->hdmarx,DMA_IT_HT)dma half transfer中断防止两次进入HAL_UARTEx_RxEventCallback()
*
*
* @note because DMA half transfer iterrupt(DMA_IT_HT) would call this callback function too, so we just
* disable it when transfer complete using macro: __HAL_DMA_DISABLE_IT(huart->hdmarx,DMA_IT_HT)
* dma half transfer中断防止两次进入HAL_UARTEx_RxEventCallback()
* HAL库的一个设计失误,DMA传输完成/IDLE中断都会触发HAL_UARTEx_RxEventCallback() * HAL库的一个设计失误,DMA传输完成/IDLE中断都会触发HAL_UARTEx_RxEventCallback()
* DMA半传输中断第一种和第三种情况 * DMA半传输中断第一种和第三种情况
* *
* @param huart uart handle indicate which uart is being handled * @param huart
* @param Size not used temporarily,, * @param Size ,
*/ */
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{ {
@ -109,12 +104,11 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
} }
/** /**
* @brief when error occurs in the process of send/receive,this function will be called * @brief /,,
* then just simply restart send/receive.
* *
* @note most frequent error ex: parity/overrrun/frame error * @note ://
* *
* @param huart uart handle type, indicate where error comes from * @param huart
*/ */
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{ {

View File

@ -126,7 +126,7 @@ static void DecodeDJIMotor(CANInstance *_instance)
static DJI_Motor_Measure_s *measure; static DJI_Motor_Measure_s *measure;
rxbuff = _instance->rx_buff; rxbuff = _instance->rx_buff;
// 这里对can instance的id进行了强制转换,从而获得电机的instance实例地址 // 这里对can instance的id进行了强制转换,从而获得电机的instance实例地址
measure = &((DJIMotorInstance *)_instance->id)->motor_measure; // measure要多次使用,保存指针减小访存开销 measure = &(((DJIMotorInstance *)_instance->id)->motor_measure); // measure要多次使用,保存指针减小访存开销
// 解析数据并对电流和速度进行滤波,电机的反馈报文具体格式见电机说明手册 // 解析数据并对电流和速度进行滤波,电机的反馈报文具体格式见电机说明手册
measure->last_ecd = measure->ecd; measure->last_ecd = measure->ecd;

View File

@ -33,7 +33,7 @@ typedef struct
uint16_t last_ecd; // 上一次读取的编码器值 uint16_t last_ecd; // 上一次读取的编码器值
uint16_t ecd; // 0-8191,刻度总共有8192格 uint16_t ecd; // 0-8191,刻度总共有8192格
float angle_single_round; // 单圈角度 float angle_single_round; // 单圈角度
float speed_aps; // 角速度,单位为:度/秒 rounds per minute float speed_aps; // 角速度,单位为:度/秒 rpm:rounds per minute
int16_t real_current; // 实际电流 int16_t real_current; // 实际电流
uint8_t temperate; // 温度 Celsius uint8_t temperate; // 温度 Celsius

View File

@ -6,7 +6,7 @@ static uint8_t idx;
HTMotorInstance *ht_motor_instance[HT_MOTOR_CNT]; HTMotorInstance *ht_motor_instance[HT_MOTOR_CNT];
/** /**
* @brief * @brief
* *
* @param cmd * @param cmd
* @param motor * @param motor
@ -111,24 +111,28 @@ void HTMotorControl()
pid_measure = *motor->other_angle_feedback_ptr; pid_measure = *motor->other_angle_feedback_ptr;
else else
pid_measure = measure->real_current; pid_measure = measure->real_current;
pid_ref = PID_Calculate(&motor->angle_PID, pid_measure, pid_ref); pid_ref = PID_Calculate(&motor->angle_PID, pid_measure, pid_ref);
if (setting->feedforward_flag & SPEED_FEEDFORWARD)
pid_ref += *motor->speed_feedforward_ptr;
} }
if ((setting->close_loop_type & SPEED_LOOP) && setting->outer_loop_type & (ANGLE_LOOP | SPEED_LOOP)) if ((setting->close_loop_type & SPEED_LOOP) && setting->outer_loop_type & (ANGLE_LOOP | SPEED_LOOP))
{ {
if (setting->feedforward_flag & SPEED_FEEDFORWARD)
pid_ref += *motor->speed_feedforward_ptr;
if (setting->angle_feedback_source == OTHER_FEED) if (setting->angle_feedback_source == OTHER_FEED)
pid_measure = *motor->other_speed_feedback_ptr; pid_measure = *motor->other_speed_feedback_ptr;
else else
pid_measure = measure->speed_aps; pid_measure = measure->speed_aps;
pid_ref = PID_Calculate(&motor->angle_PID, pid_measure, pid_ref); pid_ref = PID_Calculate(&motor->angle_PID, pid_measure, pid_ref);
if (setting->feedforward_flag & CURRENT_FEEDFORWARD)
pid_ref += *motor->current_feedforward_ptr;
} }
if (setting->close_loop_type & CURRENT_LOOP) if (setting->close_loop_type & CURRENT_LOOP)
{ {
if (setting->feedforward_flag & CURRENT_FEEDFORWARD)
pid_ref += *motor->current_feedforward_ptr;
pid_ref = PID_Calculate(&motor->current_PID, measure->real_current, pid_ref); pid_ref = PID_Calculate(&motor->current_PID, measure->real_current, pid_ref);
} }

View File

@ -0,0 +1,5 @@
LK motor
这是瓴控电机的模块封装说明文档。关于LK电机的控制报文和反馈报文值详见LK电机的说明文档。
注意LK电机在使用多电机发送的时候只支持一条总线上至多4个电机多电机模式下LK仅支持接收ID为0x280.

View File

@ -31,7 +31,7 @@ typedef enum
// only for checking // only for checking
SPEED_AND_CURRENT_LOOP = 0b0011, SPEED_AND_CURRENT_LOOP = 0b0011,
ANGLE_AND_SPEED_LOOP = 0b0110, ANGLE_AND_SPEED_LOOP = 0b0110,
ALL_THREE_LOOP = 0b0111 ALL_THREE_LOOP = 0b0111,
} Closeloop_Type_e; } Closeloop_Type_e;
typedef enum typedef enum