FRCプログラムが動く仕組み-Part2
2020年3月25日
こちらはPart2です。Part1をご覧になっていない方はまずはこちらからご覧ください。
LoopFunc()さん。ぱっと見長かったからPart切ったけど、後でまとめるかも。
ちなみにTimedRobotの親のIterativeRobotで実装された関数。
protected void loopFunc() {
/**
* ウォッチドッグタイマー は、コンピュータシステムにおいて定期的に発動することで、
* システムが機能し続けていることを確認させるためのタイマーである。 (ウィキペディア)
*/
m_watchdog.reset();
// Call the appropriate function depending upon the current robot mode
if (isDisabled()) {
/* 起動時or違うモードからの変化時に初期化する */
if (m_lastMode != Mode.kDisabled) {
// LiveWindowとShuffleboardの処理
disabledInit();
/* watchdogのHashMapにDisableになった時間を追加。他も同様。 */
m_watchdog.addEpoch("disabledInit()");
m_lastMode = Mode.kDisabled;
}
/**
* Disable時に毎回呼ばれる。
* DisableInit()と同じループで呼ばれることに注意。
*/
disabledPeriodic();
m_watchdog.addEpoch("disablePeriodic()");
} else if (isAutonomous()) {
// Disableと同様
} else if (isOperatorControl()) {
// Disableと同様。OperatorControlはTeleOpのこと。
} else {
// Disableと同様。Test時
}
/* いついかなる時も呼ばれる */
robotPeriodic();
m_watchdog.addEpoch("robotPeriodic()");
/* SmartDashboard, LiveWindow, Shuffleboardの更新、watchdogのHashMapに追加
// シミュレーションならその処理
m_watchdog.disable();
/**
* ループ時間をオーバーしたときに警告する
* ループ一周目に起きがち
*/
if (m_watchdog.isExpired()) {
m_watchdog.printEpochs();
}
}
Java
まとめ
図にするとこんな感じ。単純だけど、robotPeriodic()が常に実行されることに注意!
ここでほぼほぼ終わりです!
あとはおまけレベル。一周の時間を超過したときどうなるかってところを見ていきます。
Part3へ続く…
関連記事
Phoenixライブラリーの追加
プロジェクトツリーでを右クリックし、を選択します。 画面の上部にメニューが表示さ ...
Talon又はVictorを使ったテストドライブ
以下は、ジョイスティックを読み取り、Talonを駆動する簡単な例です。 pack ...
Kotlinのサポートについて
FRCのプログラミングにおいて、公式でサポートされているのは、JavaとC++の ...
IntelliJにphoenixライブラリを入れる方法
wpilibとか、com.fasterxmlとかいう意味わからんものはimpor ...
VSCodeのセットアップ
VSCodeのセットアップ手順 まず、VSCodeを開きます。 四角いアイコンを ...
コメント・質問は、FRC Japan Community にて