【世界最大級の中高生ロボコン】FRCでのプログラムについて ~FIRST~


**~~タイトルはできるだけ盛れってじっちゃんに言われた~~**

でも実際規模は大きいです。

最大**身長1m超、体重約50kg超**のこういうロボットたちが走り回ったりします。(ﾃﾞﾃﾞｰﾝ!)
チームによって様々で面白いです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/281181/7d00d930-e4f1-4d82-e161-0983fc34abf9.png)

こちらは去年の私達のロボット(Maker Faire Tokyoの展示にて)👇
![image.png](https://qiita-image-store.s3.amazonaws.com/0/281181/229b9882-296e-2d92-3c61-514082b090ff.png)




　
　
この記事はアメリカのNPO団体、FIRSTが主催する`FRC(FIRST Robotics Competition)`という中高生向けロボコンに
僕の所属しているFRCチーム、`SAKURA Tempesta`が出場したときに使用したプログラムの解説になります。

コード👉https://github.com/Teityan/RobotCode-2019
正式なものはmasterブランチですが、HiroseRobotブランチ(命名のセンス死んでる)にしかない機能も今後出てきます。
メンター(指導者的なもの)にチェックしてもらってないので間違っているかもしれません、、、ロボットが使えなくて試せてないです。



主に今後FRCに参加する日本のチームの人向けになります。

具体的にどうやって書いていくかとかそういうことよりも、どういう機能をつけるだとかを重視して書いたつもりです。

ぶっちゃけこんなのは自分たちのサイトに書いたりチーム内で済ませるもんなんですが、できるだけ人の目に触れたいのでこのQiitaの場を借りてます。(ちゃんとプログラミングに関するものなので安心してください！:thumbsup:)

**ですが**、そうでない方も読んでいただけると幸いです。

　
　
ここから自分語り含め、いろんな背景説明が始まりますが、
>そんなのどうでもいいわ！コードやらをちゃちゃっと見てえんだ！

って方は[言語、ライブラリについて](#言語ライブラリについて)へGO!
あ、でもこれだけは少し見てください(小声)私たちのチームです。
[HP : FRC Team 6909 SAKURA Tempesta](https://sakura-tempesta.org/)
[Twitter : FRC Team 6909 SAKURA Tempesta クラファンやってます！](https://twitter.com/sakuratempesta)

　
 
 
>そもそもFRCって？:astonished:

という方に雑に説明すると、(何奴!?という感じでしょうｳﾝｳﾝ)

ロボットの作成費を**自分たちで**集めて、
**6週間**というわずかな期間で
0から**すべてを**(ロボット本体からプログラム、操作練習まで)成し遂げなければならない大会です。

こちらのYoutubeチャンネルで実際の試合映像が見られたりします。
[FIRSTRoboticsCompetition](https://www.youtube.com/user/FRCTeamsGlobal/featured)

アメリカ発祥の大会で、**世界27カ国、約91,000人**が参加しています。
最近ではこれの下の年齢の大会、FLL(FIRST　LEGO LEAGUE)が有名になってきているらしいですね。

自分たちは作成期間外はワークショップなどアウトリーチ活動を行っています。
メンバーはほんとに中学生～高校生です。
もちろん大人の方にもついてもらってますが。

FIRST及びFRCについてはこちら
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
-[Vision and Mission(English)] (https://www.firstinspires.org/about/vision-and-mission)
-[FIRSTについて(日本語)](https://firstjapan.jp/whatisfirst/)
-[FIRST Robotic Competition(English)] (https://www.firstinspires.org/robotics/frc)
-[FIRST® Robotics Competitionについて(日本語)](https://firstjapan.jp/program/frc/)

SAKURA Tempestaとは
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
[HP : FRC Team 6909 SAKURA Tempesta](https://sakura-tempesta.org/)
[Twitter : FRC Team 6909 SAKURA Tempesta クラファンやってます！](https://twitter.com/sakuratempesta)


##自己紹介などプログラム作成者について
プロフィールのとこにかけって話ですが、、、

自分は高校二年生です。つまりは来年受験。
プログラミングは中三の終わりに始めたので大体2年くらいになります。一応。
チームに入る前はだらだらプログラミングやってました。
ロボットの主な処理や足まわりと腕まわりを担当しました。

プログラム作成者はもう一人いて、こちらは中三です。
自宅にサーバーを複数抱えていたりとか、いろいろやっている子です。
ロボットの腕を持ち上げるリフトまわりを担当してもらいました。

ロボットのプログラムなんて書いたことの無い2人でしたがなんとかやってきました。


##FIRST
最初に。
こちらを読んでからのほうが理解しやすいかも。なおすべて英語＼(^o^)／ｵﾜﾀ
[2019 FRC Controll System](https://wpilib.screenstepslive.com/s/currentCS)
せめて`Creating and Running Robot Programs`までは読もう。
`CANDevice`あたりからは軽いハードの知識が要るかも。

こちらは自分たちでいろいろ書いたところの解説になります。わけてはいますが、めちゃくちゃ長いです...。
全部読んでもらえたら割とかけるようになると思います。

全部1記事でまとめようと思ったら全然できなかったので大まかに分けました。
大体クラスごとです

記事一覧(2019/3/15現在 今後増えていきます)
[FIRST](https://qiita.com/amidaandhero02/items/59c69d8facd2335f96ce)
[Main関係](https://qiita.com/amidaandhero02/items/4833e36d92b58398a34c)
[PID制御について](https://qiita.com/amidaandhero02/items/5d29006dd693be420c4a)
[Drive関係](https://qiita.com/amidaandhero02/items/271215e677c54f7fb045)
[用語等について](https://qiita.com/amidaandhero02/items/b26be2c552e8a40192cb)
とりあえず概要説明をここでやります。

##言語、ライブラリについて
言語はJavaです。C++でもおおまかにはそんなに変わらないです。
~~コピペはできなくとも~~参考にはなると思います。


ライブラリはFIRSTが用意している`WPILib`(ダブリューピーアイライブラリ)というものを使用してます。これがないとほぼ無理。というかまあ使うよう言われてるんですけど。


##読むにあたり必要な知識
`Javaの基本的な文法`  継承辺りまで知っていればとりあえず大丈夫。
`PID制御`  数学的なところはなくても大丈夫。


##そもそも何をどうするロボットなん？
まず、軽い試合のルール説明から。このルールは毎年大きく変わります。
3チームで連合を組んで（この組み合わせは毎試合ランダム）赤チームと青チームに分かれて戦う。(これは毎年同じ)

####ロケットと船（に見立てたもの）に黄色い板でフタをして(2pt)、(ちなみにマジックテープでくっついてます)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/281181/e8f11160-5a04-7ae0-6e2c-f967ea401b4e.png)
　
####オレンジのボールを穴に入れる(3pt)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/281181/949f2c6e-9e3b-0fdc-938f-9ba79593b2ed.png)
　
####段差に登るとそれに応じて点が入る(3～12pt)。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/281181/d0a91e93-fa65-ee9b-ed04-62c9590c8d8a.png)
この紹介動画は[2019 FIRST Robotics Competition Destination: Deep Space Game Animation](https://www.youtube.com/embed/Mew6G_og-PI)
　
試合の内容はわかっていただけましたね。

私たちのロボットができることは、
>船にボールと板を入れたりつけたりする
ロケットの下から2段目までにボールと板を入れたりつけたりする
段差に登る

この3つです。
![3DED44F3-BB52-4EF2-B0D2-31F4772230F3.jpeg](https://qiita-image-store.s3.amazonaws.com/0/281181/91f01bc6-ff51-3dc3-7b93-4d70b18c09af.jpeg)
(今年の私達のロボット　黒がかっこいいですね！)
私達のRobot Reveal(ロボット紹介)動画です👉[Robot Reveal 2019](https://youtu.be/FLlVMwC0xaU)

基本的にコントローラーで操作します。
ボールを入れる場所や板をつける場所は決まっているので、コントローラーでコマンドを入力します。
段差に登るのもコマンドで半自動に。

コントローラーはXBoxControllerを二つ使うようにしています。
要はドライバーが二人。

##LAST
最後に。
次からコードが出てきます。
是非ほかの記事も見ていってください！:pray:

次の記事⇒[Main関係](https://qiita.com/amidaandhero02/items/4833e36d92b58398a34c)