7 Star 0 Fork 0

Piece / RM2022-Standard1

Create your Gitee Account
Explore and code with more than 6 million developers,Free private repositories !:)
Sign up
This repository doesn't specify license. Please pay attention to the specific project description and its upstream code dependency when using it.
Clone or Download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

RM2022-Standard1

介绍

GKD战队RoboMaster2022赛季,步兵机器人,C板(STM32F407IGHx),FreeRTOS,在官步基础上修改

软件和固件库版本

CubeMX 6.4.0
STM32CubeF4 Firmware Package V1.26.0

现有外设占用

串口

  1. USART3:遥控器
  2. USART6(板上丝印UART1):裁判系统
  3. USART1(板上丝印UART2):空闲

CAN

  1. CAN1:chassis底盘(4个3508)
    • 将增加:超级电容、视觉
  2. CAN2:gimbal云台(2个6020), trigger拨弹电机(1个2006)
    (摩擦轮电机使用PWM控制的2个3508)

开发记录

  • 1.12 by 片哥
    • 在bsp_buzzer.c中禁用了蜂鸣器
    • 在INS_task.c中添加了变量Angle,用于保存以degree为单位的角度
  • 1.13 by 片哥
    • 增加了结构体can_CV_t(最大64bytes)和gimbal_CV_t(大小不限),并建立了数据流,将所有与CV相关的数据存在gimbal_task.c的结构体gimbal_control_t中的can_CV中 Tips.CAN包最大64字节,现已用48字节
    • 确定了视觉控制的逻辑:操作手通过键盘/遥控器开启或关闭自瞄,自瞄开启后云台和射击的控制由视觉接管,通过视觉算法控制姿态和射击
  • 1.14 by 片哥
    • 官步使用一个微动开关BUTTON_TRIG_Pin检测送弹完成,因无需送弹,所以已修改此功能
      • 更改了shoot_bullet_control()中的SHOOT_DONE判断,原逻辑为微动开关松开即判断为完成一发子弹的射击,现逻辑为拨弹电机转动一定时间(TRIGGER_LONG_TIME)即判断为完成一次射击,不精确控制射出子弹量
      • 修改shoot_feedback_update,使shoot_control.key的状态一直处于SWITCH_TRIGGER_ON,屏蔽送弹检测
  • 1.15 by 片哥
    • 右switch置下开启CV模式,只有在摩擦轮开启时才可由CV触发射击,进入CV状态的判断写在gimbal_behavour_set中
    • 新增视觉控制射击的逻辑: 使用视觉回传的射击指令模拟switch down,从而触发射击
    • 修改了CV结构体中cv_reco_status的逻辑,不再由CV设备提供此信息,改为根据switch的值修改cv_reco_status,判断是否开启CV模式
    • 现有的CV模式只会控制云台,不会控制底盘运动,应在后续加入思路是将CV模式视为直接控制遥控器左摇杆(即控制云台抬头低头、左转右转以及底盘跟随),CV模式下操作手仅能控制右摇杆(与左摇杆互不冲突)
  • 1.18 by 片哥
    • 调试了视觉到电控的CAN通讯(开发板必须外接电池,暂不明确是否与CAN电阻有关),在CAN回调中添加了接收的逻辑
    • 在user_lib中添加了kalman滤波,用于对接收到的视觉坐标进行滤波,在视觉端滤波算法
    • 调试了视觉的控制算法,尝试了原始值、位置式PID、增量式PID,最后选用了单环增量式PID,还需进一步优化,预计需要添加速度环
  • 1.19 by 片哥
    • 修复了CV模式进入后无法退出的bug,并添加了CV数据接收超时判断
    • 添加了借助USART1的虚拟示波器支持(详见bsp_usart.c)

笔记

gimbal_task 云台控制任务

  1. 云台的控制通过结构体gimbal_control完成,存放了遥控器/键鼠、陀螺仪、电机的信息
  2. gimbal_set_mode() -> gimbal_behaviour_mode_set() ->
    • gimbal_behavour_set(): 云台行为状态机,根据遥控器switch位置确定并通过变量gimbal_behaviour返回当前的云台行为(e.g., GIMBAL_RELATIVE_ANGLE / GIMBAL_ABSOLUTE_ANGLE)
    • 根据变量gimbal_behaviour的值设置每个云台电机的状态,存入结构体中的变量gimbal_motor_mode
  3. gimbal_mode_change_control_transit() ->
    • 判断结构体gimbal_control中gimbal_motor_mode和last_gimbal_motor_mode是否一致,若不一致,则说明发生了模式切换,即进行数据保存和处理
  4. gimbal_feedback_update() ->
    • 将CAN总线接收到的各个云台电机的数据进行解码,计算出相对角度、绝对角度、速度等信息,并存入结构体中的相应变量
  5. gimbal_set_control() ->
    • 新建变量add_yaw_angle和add_pitch_angle,用于存放两个角度的增量值
    • gimbal_behaviour_control_set() ->
      • 根据云台模式gimbal_behaviour进入相应的gimbal_xxxxx_control()函数,在函数内使用不同方式根据遥控器/键鼠的操作得到云台pitch和yaw角度的增量,使用指针yaw和pitch返回
    • 根据电机模式gimbal_motor_mode决定控制方式,将变量add_yaw_angle和add_pitch_angle中的值存入结构体,用于下面的PID计算
    • 有两种模式参数:云台模式、电机模式
  6. gimbal_control_loop() ->
    • 根据结构体中gimbal_motor_mode的值进入不同的gimbal_motor_xxxxx_angle_control()函数,根据上一步算出的角度值计算得到current_set/given_current控制值 Tips.电视联控在这里添加
    • (所有xxx_control_loop函数的逻辑都是相似的)
  7. shoot_control_loop() -> (详见程序注释)
    • shoot_set_mode():状态机函数,用于判断并更新状态
    • shoot_feedback_update():更新数据
    • 根据状态计算控制量
    • 控制量输出

chassis_task 底盘控制任务

  1. chassis_task()
  2. chassis_mode_change_control_transit()
  3. chassis_feedback_update()
  4. chassis_set_contorl() ->
    • 新建三个局部变量,分别存放x轴速度,y轴速度,以及角度设定值
    • chassis_behaviour_control_set() ->
      • 根据**底盘模式chassis_behaviour_mode(单独定义在文件开头的变量)**进入相应的chassis_xxxxx_control()函数,在函数内使用不同方式根据遥控器/键鼠的操作得到vx,vy,angle,使用指针返回数值
      • 根据电机模式chassis_move_control->chassis_mode决定控制方式,将三个参数存入结构体,用于下面的PID计算
      • 有两种模式参数:底盘模式、电机模式
  5. chassis_control_loop() ->
    • PID控制,除了RAW模式之外,其他模式的处理方法都是一样的

参考资料

  1. 官方2019步兵开源学习: https://bbs.robomaster.com/forum.php?mod=viewthread&tid=8361
  2. C语言之如何输出uint32_t和uint64_t和16进制: https://blog.csdn.net/u011068702/article/details/77938756

Repository Comments ( 0 )

Sign in to post a comment

About

GKD战队RoboMaster2022赛季,步兵机器人,C板,FreeRTOS,在官步基础上修改 expand collapse
C and 3 more languages
Cancel

Releases (2)

All

Contributors

All

Activities

Load More
can not load any more
C
1
https://gitee.com/yuelinzhang/rm2022-standard1.git
git@gitee.com:yuelinzhang/rm2022-standard1.git
yuelinzhang
rm2022-standard1
RM2022-Standard1
master

Search