この記事はこちらの記事の一部です。まずはこちらをご覧ください。
##FIRST
最初に。
Grabberっていうのは、ロボットの前に付いてるここの部分です。
ここでボールとか板を扱います。
前の方の灰色とか後ろの方の緑とかのローラーを回してボールを回収&発射します。
実は板には真ん中に穴が空いているのですが、そこに手前の白い棒をはめて鉤爪みたいなのを広げて回収します。
##このクラスに必要なこと
・直径33cmのボールを回収し、保持、任意のタイミングで発射できる
・板を取ったりつけたりできる
・アーム(上の操作を行う機構)をしまえる
⇒ルール的に最初は閉まっていなければならない&ボールを発射するときに邪魔
##変数
VictorSP rollerMotor
Solenoid barSolenoid
Solenoid armSolenoid
boolean is_RollerMoving
boolean is_retractingArm
##関数一覧
Grabber()
引数のモーター、ソレノイドをクラスのフィールドに渡す。
public void applyState()
Stateから情報を受け取りモーター、ソレノイドに代入する。
private void holdCargo()
ボールを回収する。
private void releaseCargo()
ボールを発射する
private void stopRoller()
ローラーを止める。何も操作されてないときにこうする。
private void setRollerSpeed()
ローラーのスピードを設定する。
ここの処理をコメントアウトすればローラーは動かなくなる。
public boolean is_RollerMoving()
ローラーが動いているか。
private void holdPanel()
板を回収する
private void releasePanel()
板を設置する
private void retractArm()
アームをしまう
private void releaseArm()
アームを出す
public boolean is_retractingArm()
アームがしまわれているか。
##関数説明
自明なものは省略。
applyState()
また、ボールを抱えてアームをしまうとボールが飛び出てしまうので保持するように若干ローラー回してます。
ボール関係。
switchで、StateのcargoState
によって処理を分ける。
kHold
ならholdCargo()
kRelease
ならreleaseCargo()
を呼び出す。
板関係。
Stateがパネルをつかめって言ってたらつかむ。
##LAST
最後に。
ここはDriveとかに比べるとかなり簡単だった。
では。