FPVTracksideでのレース進行シート

# 0. はじめに

FPVTracksideExcelやGoogleスプレッドシートを使ってレースの組み合わせを自動で作成する仕組みの実験をしたいと思います。以下に仮に考えたレースの詳細を示し、実際にFPVTracksideでテストしてみたいと思います。


---

# 1. 仮に考えたレース詳細

### **予選結果による1回戦の組み合わせ (RACE2)**

- **1戦目 (RACE2-1):** 1位, 17位, 18位  
- **2戦目 (RACE2-2):** 4位, 11位, 12位  
- **3戦目 (RACE2-3):** 5位, 9位, 10位  
- **4戦目 (RACE2-4):** 6位, 7位, 8位  
- **5戦目 (RACE2-5):** 3位, 13位, 14位  
- **6戦目 (RACE2-6):** 2位, 15位, 16位  

---

### **1回戦結果による進行**

- **1位:** 2回戦へ進出 (RACE4-1, RACE4-2)  
- **2位, 3位:** 敗者ラウンドへ進出 (RACE3-1 ~ RACE3-4)  

#### 敗者ラウンドの組み合わせ：
- **RACE3-1:** RACE2-1の2位, 3位 + RACE2-2の2位  
- **RACE3-2:** RACE2-2の3位 + RACE2-3の2位, 3位  
- **RACE3-3:** RACE2-4の2位, 3位 + RACE2-5の2位  
- **RACE3-4:** RACE2-5の3位 + RACE2-6の2位, 3位  

#### 敗者ラウンドの進行：
- RACE3-1 ~ RACE3-4の1位が敗者ラウンド2回戦へ進出  
- 敗者ラウンド2回戦で2位, 3位となった場合は敗退（ダブルエリミネーション）

---

### **2回戦からの流れ**
- **RACE4-1, RACE4-2:** 1位が決勝進出  
- 敗者ラウンド勝者は敗者戦3回戦へ進出  
- 敗者戦3回戦の勝者が、トーナメント2連勝の2名と決勝で対戦

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4072330/2b0660ae-ffe4-4967-9838-d773f8cf88f5.png)

:::note info
このスプレッドシートのリンクは以下の通りですので、一度ピンク色のセルをクリアしてから、予選結果、race2-1から順番に順位を入れることで、どのレースが終わると、次の組み合わせがどう変わってゆくかイメージしやすいかもしれません。  
[Googleスプレッドシート](https://docs.google.com/spreadsheets/d/1AFPzwWzzF4fK44NzHaNq4Lb-MzlAqIJuSLyc2YVvXho/edit?gid=22689996#gid=22689996)
:::

# 2. FPVTrackside用シートの導入

FPVTrackside用のシートが完成したら（作り方は後述）、そのシートを使ってレースの自動生成を行います。

![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4072330/88649f51-6526-4e0f-b9ae-373f77653542.png)

1. メニューから **Open Directory -> Open FPVTrackside Directory** の順に進むと、フォルダが開きます。
2. その中の **formatsフォルダ** を開き、拡張子 `.xlsx` のファイルを確認します。

![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4072330/685f8197-244a-41dd-ae08-860e67dbf0e3.png)

- 基本的に、このフォルダ内のファイルを **Add Format** で選択できます。
- ファイルの内容に基づき、その後のレース組み合わせを自動でTracksideが作成する仕組みです。

このフォルダに、[FPVTrackside用スプレッドシート](https://docs.google.com/spreadsheets/d/1Z26XB3D8IJ0HUwmmmYAA7VjiKQX7ddrcivOPim73ovg/edit?gid=369798704#gid=369798704) を保存してください。

### テストと結果
FPVTracksideを再起動後にテストを行います。

1. 18人で予選を実施。
2. 予選結果を表示。
3. 結果に基づき、自動的にレースを生成。
4. ダミーのレース結果を生成する機能を使用して、ラウンド1を進行。
5. ラウンド2のパイロットが徐々に確定していきます。

その様子を示した動画はこちらです：
<iframe width="560" height="315" src="https://www.youtube.com/embed/MwUVDr9UknE?si=YrrBgz9dK_KBLxdg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

# 3. FPVTrackside用シートの中身

シートを開いてみます。セルの結合は禁止で、各セルの配置ルールを守る必要があります。

### 1. 記載内容その1
1. `Channels` `Pilot` と `LockChannel` の位置は固定です。
2. ②の部分には、`Round RaceX, Results` というセルが、レースのラウンド数分続きます。
3. ③の部分は、`Results` の列から一つ空いた場所に記入します。
4. ④には、`Lock Channels` と書いてありますが、これも固定です。
5. シート名は、`FPVTrackside` に設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4072330/be65168a-ad60-4da8-99d1-6417b04bb57a.png)

---

### 2. 記載内容その2
1. **`Channels` の下**（A2セル）には、同時飛行数の最大値を入力します。国内の場合、一般的に最大値は **3** と思われます。
2. **`Pilots` の下**には仮にパイロット名を入力します。
   27人までのレースなら：`AからZ`でよいですし、
   それ以上なら`A0, A1, ... A9, B0, B1` と名前をつけていけば困ることはないでしょう。
   - 今回：18人なので `A-R` を使用して、仮のパイロット名をつけます。
   - `A`（予選1位）、`B`（2位）という感じで `R`（18位）まで続きます。
3. **1ラウンド目のレースの組み合わせ**は予選順位で決まります。
   なので、手動で仮パイロット名を `C2-C4` に入力します。
     - `C2` → 予選1位 `A`
     - `C3` → 予選17位 `Q`
     - `C4` → 予選18位 `R`
4. **`Lock Channels`**:
   - 通常 `FALSE`
   - `TRUE` にするとシート定義通りの順番、`FALSE` にすると、組み合わせは維持されますが、出来るだけパイロットの周波数変更が少なくなるように、同じレースの中での周波数の調整をFPVTracksideがやってくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4072330/bf78859a-05bd-4b7a-b19f-5b6c925b5d96.png)

---

### 3. 記載内容その3
ここで、Resultのところに、レースの結果を入力してみます。入力すると、あらかじめ登録されている所が、#N/Aからパイロット名にかわります。
例えば、D2セルにAの順位を1と入力すると、G2セル(3ラウンド目の1レース目)にAが入ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4072330/9f71c79d-d44d-42a1-8931-ba07f3f065a7.png)

ここで、セルG2にどういった関数が入力されているのか見てみます。ここには、=INDEX(C2:C4,MATCH(1,D2:D4,0)と入力してあります。このように入力すると、このレースの1位のパイロットが表示されます。このレースの2位のパイロットを表示したければ、=INDEX(C2:C4,MATCH(2,D2:D4,0)になりますし、別のレースのパイロットを表示させたければ、C2:C4 やD2:D4の範囲を変えることになります。このように、他のレースもすべて関数を入れてやれば管制です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4072330/1b7fd896-8afd-4b6c-822b-61fae1dcac1c.png)

---

# 4. 結果の検証
完成したシートを FPVTrackside に登録し、以下のように検証してみました。
1. FPVTracksideでレース結果を生成。
2. その結果の順位を、スプレッドシートに入力

以下の通り二つが一致することを確認しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4072330/23f52e65-7948-467e-aa50-747adda2eafd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4072330/b4d3b65b-2bd0-4e11-991f-861111819bc1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4072330/55f9f073-3b4e-4750-b5d7-7443b6ab7450.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4072330/f0b19881-895d-4920-995d-5afd8284bed0.png)