上传了所有todo任务,为底盘新增了超级电容模块

This commit is contained in:
NeoZng 2022-12-05 22:07:44 +08:00
parent 9c9ea14bde
commit 6d4a0cb148
9 changed files with 280 additions and 13 deletions

View File

@ -87,7 +87,26 @@
} Motor_Controller_s;
```
数据类型单一、结构不复杂的类型以`_t`后缀结尾表明这是一种数据type复杂的结构体类型使用`_s`结尾表明其功能和内涵多structure
数据类型单一、结构不复杂的类型以`_t`后缀结尾表明这是一种数据type复杂的结构体类型使用`_s`结尾表明其功能和内涵多structure。对于某个bsp、module其类型结构体应该称为`xxxInstance`:
```c
typedef struct _
{
CAN_HandleTypeDef *can_handle; // can句柄
CAN_TxHeaderTypeDef txconf; // CAN报文发送配置
uint32_t tx_id; // 发送id
uint32_t tx_mailbox; // CAN消息填入的邮箱号
uint8_t tx_buff[8]; // 发送缓存,最大为8
uint8_t rx_buff[8]; // 接收缓存
uint32_t rx_id; // 接收id
uint8_t rx_len; // 接收长度,可能为0-8
// 接收的回调函数,用于解析接收到的数据
void (*can_module_callback)(struct _ *); // callback needs an instance to tell among registered ones
} CANInstance;
#pragma pack()
```
## BSP层(Board Sopport Package)

241
TODO.md
View File

@ -0,0 +1,241 @@
# Work To be done & optimized
- **待完成**:不完成可能导致整车功能不完整
- **待优化**:对已有的功能进行性能提高/模块解耦/可维护性增强
- **待添加**:不紧急的/锦上添花的功能
**==标为黄色高亮的代表紧急程度高。==**
## BSP
### 待完成
#### bsp_buzzer
- [ ] 添加初始化完成时的音乐播放
### 待优化
#### bsp_buzzer
需要和**monitor**模块配合。
- [ ] 增加错误或异常提示音
- [ ] 增加功能提示音
#### bsp_led
需要和**monitor**模块配合。这同时会影响到module层的led_task放在这一并解决。
- [ ] 增加错误或异常流水灯
- [ ] 增加功能点灯
### 待添加
#### bsp_spi
- [ ] 增加spi的板级支持包供IMU使用和其他外接模块使用
#### bsp_iic
- [ ] 增加iic的板级支持包供磁力计和OLED屏等使用
- [ ] 增加软件iic的支持包
#### bsp_gpio
- [ ] 增加GPIO引脚的控制有待商榷是否需要单独添加HAL实际上已经提供较好的封装
#### bsp_usb
- [ ] 增加usb的支持用于虚拟串口或和PC进行高速通信
#### bsp_blueteetch
- [ ] 增加蓝牙功能,方便调试和测试
#### bsp_wifi
- [ ] 增加无线网络功能,方便调试和测试
---
## Module
### 待完成
#### ==servo_motor==
舵机模块需要预先定义90/180/360连续旋转的电机类型并且能够设定max和min位置。
- [ ] 编写舵机模块
#### ==monitor==
应用和模块监视功能用于提供掉线和异常检测与应对机制和底层的buzzer、led、oled等配合提供快速的问题定位。
- [ ] 编写monitor
#### LKMotor
LK系列电机目前仅用于平衡步兵驱动轮。后续可能使用其他瓴控电机。
- [ ] 重构LKMotor模块
#### HTMotor
海泰04电机。目前仅用于平衡步兵关节电机。
- [ ] 重构海泰电机模块
#### imu
- [ ] 增加角速度的反馈,并且能够获取加速度值(目前看来修改反馈数据类型定义即可)
#### refereeUI
- [ ] 提供UI绘制封装
- [ ] 绘制电容剩余容量/当前底盘状态/当前云台状态/底盘位置/射表
- [ ] 绘制视觉识别UI/识别状态/击打状态
#### ==master_machine==
- [ ] 增加IMU数据的时间戳
- [ ] 增加加速度计数据
- [ ] 重构seasky protocol的接口
- [ ] 增加数据未更新的处理
#### LQR
- [ ] 通用的LQR控制器
### 待优化
#### imu
需要重写部分数据结构并在bsp_spi完成之后移植到新的bsp上。
- [ ] 重构imu模块
#### motor_task
- [ ] 给不同的伺服机构添加不同的执行频率
#### remote_control
- [ ] 将键盘数据解析替换为位域操作
#### referee
- [ ] 优化三个裁判系统模块的组织关系
#### message_center
- [ ] 增加队列剩余信息和数据时间戳的支持
#### can_comm
- [ ] 增加can_comm数据未更新的处理
#### controller
- [ ] 增加前馈数据
#### user_lib
- [ ] 将所有通用的计算函数和常用函数汇集在此
#### dji_motor
- [ ] 增加3508和2006的开环零位校准函数
- [ ] 为实例增加低通滤波系数变量,使不同电机有不同的配置
### 待添加
#### step_motor
- [ ] 增加步进电机模块
#### referee_communication
- [ ] 增加裁判系统多机通信功能
#### controller
- [ ] 增加扰动观测器,可能需要新增模块
- [ ] 增加模型控制器,可能需要新增模块
#### master_process
- [ ] 兼容其他通信方式如canspiusb等
---
## APP
### 待完成
#### ==robot_cmd==
- [ ] 键盘控制
- [ ] 鼠标控制
- [ ] 双板兼容
#### ==chassis==
- [ ] 根据裁判系统的功率数据和超级电容,进行输出限幅
- [ ] 双板兼容
#### ==shoot==
- [ ] 优化单发模式的位置闭环(是否要改成速度闭环,然后定时?)
- [ ] 增加卡弹检测和反转
- [ ] 弹仓盖控制需待servo_motor完成
- [ ] 双发射机构兼容
- [ ] 42mm发射机构兼容
### 待优化
#### robot_cmd
- [ ] 解耦各个应用的运行模式
- [ ] 优化消息发布和接收性能
#### gimbal
- [ ] 增加不同模式之间的过渡(是否有必要?)
- [ ] 增加底盘速度前馈控制
#### chassis
- [ ] 根据电机的实际速度计算底盘的真实运动
- [ ] 若为双板根据IMU的数据对电机实际速度进行融合
- [ ] 增加不同模式之间的过渡(是否有必要?)
#### shoot

View File

@ -34,8 +34,9 @@
static CANCommInstance *chasiss_can_comm; // 双板通信CAN comm
IMU_Data_t *Chassis_IMU_data;
#endif // CHASSIS_BOARD
static referee_info_t *referee_data; // 裁判系统的数据
// static SuperCAP* cap; 尚未增加超级电容
static SuperCapInstance *cap; // 超级电容
static DJIMotorInstance *motor_lf; // left right forward back
static DJIMotorInstance *motor_rf;
static DJIMotorInstance *motor_lb;
@ -151,7 +152,14 @@ void ChassisInit()
motor_rb = DJIMotorInit(&right_back_config);
referee_data = RefereeInit(&huart6);
// SupercapInit();
SuperCap_Init_Config_s cap_conf = {
.can_config = {
.can_handle = &hcan2,
.tx_id = 0x302,
.rx_id = 0x301,
}};
cap = SuperCapInit(&cap_conf);
chassis_sub = SubRegister("chassis_cmd", sizeof(Chassis_Ctrl_Cmd_s));
chassis_pub = PubRegister("chassis_feed", sizeof(Chassis_Upload_Data_s));

View File

@ -5,4 +5,4 @@ void ChassisInit();
void ChassisTask();
#endif //CHASSIS_H
#endif // CHASSIS_H

View File

@ -5,4 +5,4 @@ void GimbalInit();
void GimbalTask();
#endif //GIMBAL_H
#endif // GIMBAL_H

View File

@ -4,7 +4,6 @@
> TODO:
>
> 1. 增加数据长度可变的协议支持
> 1. 对`CANCommGet()`进行修改,使得其可以返回数据是否更新的相关信息。

View File

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

View File

@ -15,7 +15,7 @@ static referee_info_t referee_info;
static uint8_t Judge_Self_ID; // 当前机器人的ID
static uint16_t Judge_SelfClient_ID; // 发送者机器人对应的客户端ID
static void RCRxCallback()
static void RefereeRxCallback()
{
JudgeReadData(referee_usart_instance->recv_buff);
}
@ -23,7 +23,7 @@ static void RCRxCallback()
referee_info_t *RefereeInit(UART_HandleTypeDef *referee_usart_handle)
{
USART_Init_Config_s conf;
conf.module_callback = RCRxCallback;
conf.module_callback = RefereeRxCallback;
conf.usart_handle = referee_usart_handle;
conf.recv_buff_size = RE_RX_BUFFER_SIZE;
referee_usart_instance = USARTRegister(&conf);

View File

@ -67,7 +67,7 @@ static void sbus_to_rc(volatile const uint8_t *sbus_buf)
* sbus_to_rc的简单封装
*
*/
static void RCRxCallback()
static void RefereeRxCallback()
{
sbus_to_rc(rc_usart_instance->recv_buff);
}
@ -75,7 +75,7 @@ static void RCRxCallback()
RC_ctrl_t *RemoteControlInit(UART_HandleTypeDef *rc_usart_handle)
{
USART_Init_Config_s conf;
conf.module_callback = RCRxCallback;
conf.module_callback = RefereeRxCallback;
conf.usart_handle = rc_usart_handle;
conf.recv_buff_size = REMOTE_CONTROL_FRAME_SIZE;
rc_usart_instance = USARTRegister(&conf);