From 6d4a0cb148a8307220e90bf848950e17c0ba72af Mon Sep 17 00:00:00 2001 From: NeoZng Date: Mon, 5 Dec 2022 22:07:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E4=BA=86=E6=89=80=E6=9C=89to?= =?UTF-8?q?do=E4=BB=BB=E5=8A=A1,=E4=B8=BA=E5=BA=95=E7=9B=98=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E4=BA=86=E8=B6=85=E7=BA=A7=E7=94=B5=E5=AE=B9=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 21 ++- TODO.md | 241 ++++++++++++++++++++++++++++++++ application/chassis/chassis.c | 16 ++- application/chassis/chassis.h | 2 +- application/gimbal/gimbal.h | 2 +- modules/can_comm/can_comm.md | 1 - modules/motor/dji_motor.h | 2 +- modules/referee/referee.c | 4 +- modules/remote/remote_control.c | 4 +- 9 files changed, 280 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 182d7da..09e59ad 100644 --- a/README.md +++ b/README.md @@ -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) diff --git a/TODO.md b/TODO.md index e69de29..de99703 100644 --- a/TODO.md +++ b/TODO.md @@ -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 + +- [ ] 兼容其他通信方式,如can,spi,usb等 + + + + + +--- + + + + + +## APP + +### 待完成 + +#### ==robot_cmd== + +- [ ] 键盘控制 +- [ ] 鼠标控制 +- [ ] 双板兼容 + +#### ==chassis== + +- [ ] 根据裁判系统的功率数据和超级电容,进行输出限幅 +- [ ] 双板兼容 + +#### ==shoot== + +- [ ] 优化单发模式的位置闭环(是否要改成速度闭环,然后定时?) +- [ ] 增加卡弹检测和反转 +- [ ] 弹仓盖控制(需待servo_motor完成) + +- [ ] 双发射机构兼容 +- [ ] 42mm发射机构兼容 + + + +### 待优化 + +#### robot_cmd + +- [ ] 解耦各个应用的运行模式 +- [ ] 优化消息发布和接收性能 + +#### gimbal + +- [ ] 增加不同模式之间的过渡(是否有必要?) +- [ ] 增加底盘速度前馈控制 + +#### chassis + +- [ ] 根据电机的实际速度计算底盘的真实运动 +- [ ] 若为双板,根据IMU的数据对电机实际速度进行融合 + +- [ ] 增加不同模式之间的过渡(是否有必要?) + +#### shoot + diff --git a/application/chassis/chassis.c b/application/chassis/chassis.c index e7de73d..bac89d4 100644 --- a/application/chassis/chassis.c +++ b/application/chassis/chassis.c @@ -33,10 +33,11 @@ #include "ins_task.h" static CANCommInstance *chasiss_can_comm; // 双板通信CAN comm IMU_Data_t *Chassis_IMU_data; -#endif // CHASSIS_BOARD +#endif // CHASSIS_BOARD + static referee_info_t *referee_data; // 裁判系统的数据 -// static SuperCAP* cap; 尚未增加超级电容 -static DJIMotorInstance *motor_lf; // left right forward back +static SuperCapInstance *cap; // 超级电容 +static DJIMotorInstance *motor_lf; // left right forward back static DJIMotorInstance *motor_rf; static DJIMotorInstance *motor_lb; static DJIMotorInstance *motor_rb; @@ -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)); diff --git a/application/chassis/chassis.h b/application/chassis/chassis.h index 49b444b..9aa9f0f 100644 --- a/application/chassis/chassis.h +++ b/application/chassis/chassis.h @@ -5,4 +5,4 @@ void ChassisInit(); void ChassisTask(); -#endif //CHASSIS_H \ No newline at end of file +#endif // CHASSIS_H \ No newline at end of file diff --git a/application/gimbal/gimbal.h b/application/gimbal/gimbal.h index ca6eb17..522eb6f 100644 --- a/application/gimbal/gimbal.h +++ b/application/gimbal/gimbal.h @@ -5,4 +5,4 @@ void GimbalInit(); void GimbalTask(); -#endif //GIMBAL_H \ No newline at end of file +#endif // GIMBAL_H \ No newline at end of file diff --git a/modules/can_comm/can_comm.md b/modules/can_comm/can_comm.md index 7db0f77..04260b1 100644 --- a/modules/can_comm/can_comm.md +++ b/modules/can_comm/can_comm.md @@ -4,7 +4,6 @@ > TODO: > -> 1. 增加数据长度可变的协议支持 > 1. 对`CANCommGet()`进行修改,使得其可以返回数据是否更新的相关信息。 diff --git a/modules/motor/dji_motor.h b/modules/motor/dji_motor.h index 3cb4ec1..ee93f00 100644 --- a/modules/motor/dji_motor.h +++ b/modules/motor/dji_motor.h @@ -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; // 总圈数,注意方向 diff --git a/modules/referee/referee.c b/modules/referee/referee.c index 5e62176..f863717 100644 --- a/modules/referee/referee.c +++ b/modules/referee/referee.c @@ -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); diff --git a/modules/remote/remote_control.c b/modules/remote/remote_control.c index 8ded42e..78da028 100644 --- a/modules/remote/remote_control.c +++ b/modules/remote/remote_control.c @@ -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);