#1-3 開発環境を作ろう (Linux/Ubuntu向け)【SPIKE-RTでロボコンに出よう!!】

# 目次

| 章 | タイトル | 内容 |
|:-:|:-:|:-:|
| 1 | [はじめに]() | この記事について |
| 2 | [開発環境構築]() | 環境構築について説明 |
| 3 | [最後に]() | この後やる事について説明 |

# 1. はじめに

この記事は [【SPIKE-RTでロボコンに出よう!!】シリーズ](https://qiita.com/koushiro/items/482162807339f4d18516) の [#1 開発環境を作ろう](https://qiita.com/koushiro/items/02dd13a797afbd568beb) に対する補足記事となります。

https://qiita.com/koushiro/items/02dd13a797afbd568beb

#1 では、開発環境構築をテーマに、主にWindows(WSL) でEV3rtの開発環境を作成する方法を紹介しました。
それ以外のOSについての紹介はしていなかったため、[#1-2](https://qiita.com/koushiro/items/2bdee5fd3580f9373457)でmacOS版の構築方法を解説しました。
そして本記事では、 **Linux/Ubuntu** での構築方法を紹介していきます。
本質的には #1 と同じ内容ですが、WSL特有の設定が多く含まれていたので、それらを取り除き、そして実際にUbuntu環境に構築し検証した記事となります。

環境構築以外の説明 (#1の「SPIKE-RTとは?」など) は省いていきますので、そちらはご自身で #1 の記事をご覧ください。

# 2. 開発環境構築

## Step 1. ビルド環境の構築

ビルド環境を構築します。
ビルドとは要するにコンパイルすることです。

SPIKE-RTのビルド環境は、「コンテナ」というパッケージングされたものが提供されており、これを「Docker」というシステムに適用して使います。

### ソースコードのダウンロード

Dockerの話の前に、SPIKE-RTのソースコードをクローン(ダウンロード)していきます。
ソースコードは、以下のGitHub上のリポジトリにあります。

https://github.com/spike-rt/spike-rt

以下のコマンドによりソースコードをクローンしましょう。

```terminal:terminal
$ git clone https://github.com/spike-rt/spike-rt.git
```

もしSPIKEハブの **ポートFを開放した状態** (モーターやセンサーに使える状態) でセットアップしたい場合は、#1の後に公開した「ショートカット版開発環境構築」にて紹介している、私がフォークしたGitHubリポジトリからクローンしてください。

https://qiita.com/koushiro/items/3a46a11f71a49159b2d3

↓私がフォークしたGitHubリポジトリはこちらから

https://github.com/Koushiro-Achioku/spike-rt

```terminal:terminal
$ git clone https://github.com/Koushiro-Achioku/spike-rt.git
```

クローン後、`ls` コマンドを実行し、spike-rtというフォルダが確認されればクローン完了です。

### rubyコードの修正

:::note warn
公式のリポジトリからクローンした場合は以下の作業を行ってください。
私のリポジトリからクローンした場合は対応済みのため必要ありません。
:::

SPIKE-RTのアップデートに伴い、rubyのバージョンが3系に上がったようです。
これにより、ソースコードの修正が必要な箇所があります。

編集するのは `spike-rt/asp3/cfg/pass1.rb` の 181行目 です。

```ruby:pass1.rb
# 元のコード
symvalCsv = CSV.open(symvalTableFileName, { skip_blanks: true, skip_lines: /^#/ })

# 修正後のコード
symvalCsv = CSV.open(symvalTableFileName, skip_blanks: true, skip_lines: /^#/ )
```

詳しくは **「もっと!後輩たちのEV3rt講座」** の方で詳しく解説しておりますので、そちらを参照してください。

https://qiita.com/koushiro/items/4ee879e5420260cea6c8#%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E4%BF%AE%E6%AD%A3

## Step 2. Dockerの導入

次に行うコンテナ・イメージのプルの前に、Ubuntu内にDockerを導入しておく必要があります。
以下の記事を参考に、導入の手順を進めてください。

上記記事内の

- dockerリポジトリの設定
    - 準備
    - リポジトリの登録
- Dockerのインストール
    - Dockerのインストール

の部分を行ってくだささい。
導入完了後、以下のコマンドによりDockerが正しく入っているか確認しておくことをおすすめします。

### コンテナ・イメージのプル

次に、Github上にあるDockerのコンテナ・イメージをプル(つまりダウンロード)してきます。
ターミナルを開いて、以下を実行してください。

```terminal:terminal
$ docker pull ghcr.io/spike-rt/spike-rt:v0.2.0-rich
```

### コンテナのアタッチと起動

プルしてきたコンテナをDockerにアタッチして起動します。

```terminal:terminal
$ docker run --rm -it -v $(pwd):$(pwd) -w $(pwd) ghcr.io/spike-rt/spike-rt:v0.2.0-rich /bin/bash
```

ここで、行の先頭に `sudo` というコマンドがありますが、こちらは 「管理者権限で実行する」 という意味です。
この際、パスワードの入力が求められますので、Ubuntuのログインに使用するパスワードを入力してください。

## Step 3. 転送方法の構築

続いて、HubブロックをUbuntuに接続して、ビルドした実行ファイルをHubブロックに転送する方法を構築します。

### dfu-utilのインストール

SPIKEに実行ファイルを転送するのに使用するライブラリを、apt経由でインストールします。

```terminal:terminal
$ sudo apt-get install dfu-util
```

### PyUSBの導入

HUBブロックに実行ファイルを転送するために、Pythonのスクリプトを使用します。
又、そのスクリプト内で、DFU ModeのUSBデバイスに実行ファイルを転送するためのライブラリ pyusb をインストールします。

まずは、Pythonを導入する必要がありますが、今回は仮想環境下にインストールしたいと思います。
Pythonの仮想環境を、apt経由でインストールします。
ターミナルを開いて、以下のコマンドを実行していきましょう。

```terminal:terminal
$ sudo apt install python3-venv
```

次に、`spike-rt/tools/python` のディレクトリに、Pythonの仮想環境を作成します。
最後に、仮想環境下に、Pythonのパッケージ管理ツールであるpipを用いて、pyusbをインストールします。
同じくUbuntuのターミナルにて以下のコマンドを実行していきましょう。

```terminal:terminal
$ python3 -m venv ./spike-rt/tools/python
$ ./spike-rt/tools/python/bin/pip install pyusb
```

### ソースコード修正

こちらもソースコードの修正が必要な箇所があるため、修正します。
修正を行うのは `spike-rt/external/libpybricks/micropython/tools/pydfu.py` の 80行目です。
以下のように書き換えてください。

```python:pydfu.py
# 修正前
getargspec = getattr(inspect, "getfullargspec", inspect.getargspec)

# 修正後
getargspec = getattr(inspect, "getfullargspec", inspect.getargs)
```

以上で、実行ファイルの転送方法の構築は完了です。

## Step 4. ビルドのテスト

それでは、構築した開発環境が正しく動作するか、ビルドのテストを行いたいと思います。
ターミナルを開いて、以下の操作を行ってください。

初めに、GithubからプルしてきたSPIKE-RTのフォルダに移動します。

```terminal:terminal
$ cd spike-rt
```

ここで、Dockerがアタッチされていない方は、アタッチしておきましょう。

```terminal:アタッチコマンド（再掲）
docker run --rm -it -v $(pwd):$(pwd) -w $(pwd) ghcr.io/spike-rt/spike-rt:v0.2.0-rich /bin/bash
```

次に、以下のコマンドを実行して、`scripts` フォルダ内の `build-test.sh` というシェルスクリプトを実行します。

```terminal:terminal
$ ./scripts/build-test.sh
```

ここで必要なファイルの生成、およびコンパイルが行われるため、ターミナルには文字がザーっと流れます。
正しくビルドできたかどうかを見分けるには、実行完了時にターミナルに以下👇の文字列が表示されているかを確認すれば良いです。

```terminal:terminal
arm-none-eabi-objcopy -O binary -S asp asp.bin
+ cd ..
```
これにて、開発環境構築は完了です!!

# 3. 最後に

Windows(WSL) 版では、前章のビルドテストまでで#1が終わっているので、ここから [#2 エディタを使おう(VisualStudio Code)](https://qiita.com/koushiro/items/dbfc45be2e05a44bc273) に合流して貰えればと思います。
今回、実行ファイルをHubブロックに転送するテストは行っていませんので、出来ればそのテストを行う [#3 テンプレートファイルとシェルスクリプトの作成](https://qiita.com/koushiro/private/3cf4cff56e0bd90cac7a) まで一気に行い、確認していただくのが良いかと思います。

本編: [#1 開発環境を作ろう](https://qiita.com/koushiro/items/02dd13a797afbd568beb)
次回: [#2 エディタを使おう(VisualStudio Code)](https://qiita.com/koushiro/items/dbfc45be2e05a44bc273)