修复审查发现的自动赛与状态机问题
- rotater 开机默认按收拢姿态归零(assumeZeroedOnBoot,可关), 否则自动赛无人能按归零键,收球和射击被未归零保护永久拦下 - 预装球开机默认持球(assumePreloadedAtBoot,可关), 否则自动赛第一发被 hasNote 门控拦死 - 新增操作员 X 键运行时翻转持球状态,纠正无传感器推断的失真 - 进入禁用前结算持球推断:SHOOTING 中被禁用视为球已射出, INDEXING 中被禁用视为球已入传送带 - 未归零被拦下的 intake 转射击不再误置持球 - CLEANUP 结束不再强写 wantedState=IDLE,清理窗口内重按射击键不会被吞 - 机构请求按键加 teleop 门控,防止自动赛误触取消 PathPlanner 自动程序 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YTEBmjtkz1ouCmn5yytFti
This commit is contained in:
@@ -175,15 +175,20 @@ public class RobotContainer {
|
||||
private void configueShooter() {
|
||||
// 射击相关按钮只请求 Superstructure 状态;是否喂球由 Superstructure
|
||||
// 根据飞轮速度、底盘瞄准和进球旋转机构位置统一判断。
|
||||
controllerupper.rightTrigger()
|
||||
// 这些命令 require Superstructure,与自动程序共用需求;
|
||||
// 用 teleop 门控避免自动赛阶段误触直接取消整个 PathPlanner 自动。
|
||||
Trigger teleopOnly = RobotModeTriggers.teleop();
|
||||
controllerupper.rightTrigger().and(teleopOnly)
|
||||
.onTrue(operatorControls.requestShootCommand())
|
||||
.onFalse(operatorControls.requestIdleCommand());
|
||||
controllerupper.y()
|
||||
controllerupper.y().and(teleopOnly)
|
||||
.onTrue(operatorControls.requestPrepShootCommand())
|
||||
.onFalse(operatorControls.requestIdleCommand());
|
||||
controllerupper.b()
|
||||
controllerupper.b().and(teleopOnly)
|
||||
.onTrue(operatorControls.requestEjectCommand())
|
||||
.onFalse(operatorControls.requestIdleCommand());
|
||||
// 持球状态是无传感器推断值,X 键允许操作员运行时纠正。
|
||||
controllerupper.x().onTrue(operatorControls.toggleNotePresentCommand());
|
||||
controllerupper.povLeft().onTrue(Commands.runOnce(() -> operatorControls.adjustFlywheelSpeedOffset(-1)));
|
||||
controllerupper.povRight().onTrue(Commands.runOnce(() -> operatorControls.adjustFlywheelSpeedOffset(1)));
|
||||
controllerupper.povUp().onTrue(Commands.runOnce(() -> operatorControls.adjustBackboardRateOffset(100)));
|
||||
@@ -215,7 +220,7 @@ public class RobotContainer {
|
||||
private void configueIntaker() {
|
||||
// 进球相关按钮也只请求 Superstructure 状态。
|
||||
// A 键是校准动作,只应在进球机构处于已知零点姿态时按下。
|
||||
controllerupper.leftTrigger()
|
||||
controllerupper.leftTrigger().and(RobotModeTriggers.teleop())
|
||||
.onTrue(operatorControls.requestIntakeCommand())
|
||||
.onFalse(operatorControls.requestIdleCommand());
|
||||
controllerupper.a().onTrue(operatorControls.resetIntakeRotaterEncoderCommand(intakeRotaterSubsystem));
|
||||
|
||||
Reference in New Issue
Block a user