目次
章 | タイトル | 内容 |
---|---|---|
1 | はじめに | この記事について |
2 | 開発環境構築 | 環境構築について説明 |
3 | 最後に | この後やる事について説明 |
1. はじめに
この記事は 【SPIKE-RTでロボコンに出よう!!】シリーズ の #1 開発環境を作ろう に対する補足記事となります。
#1 では、開発環境構築をテーマに、主にWindows PC (本質的にはUbuntuも対象) にSPIKE-RTの開発環境を作成する方法を紹介しました。
しかし、macOSでの環境構築方法は一切紹介していませんでしたので、本記事で説明したいと思います。
(というのも、#1 執筆当時はmacを使っていなかったので…)
環境構築以外の説明 (#1の「SPIKE-RTとは?」など) は省いていきますので、そちらはご自身で #1 の記事をご覧ください。
2. 開発環境構築
Step 1. ビルド環境の構築
ビルド環境を構築します。
ビルドとは要するにコンパイルすることです。
SPIKE-RTのビルド環境は、「コンテナ」というパッケージングされたものが提供されており、これを「Docker」というシステムに適用して使います。
ソースコードのダウンロード
Dockerの話の前に、SPIKE-RTのソースコードをクローン(ダウンロード)していきます。
ソースコードは、以下のGitHub上のリポジトリにあります。
以下のコマンドによりソースコードをクローンしましょう。
% git clone https://github.com/spike-rt/spike-rt.git
もしSPIKEハブの ポートFを開放した状態 (モーターやセンサーに使える状態) でセットアップしたい場合は、#1の後に公開した「ショートカット版開発環境構築」にて紹介している、私がフォークしたGitHubリポジトリからクローンしてください。
↓私がフォークしたGitHubリポジトリはこちらから
% git clone https://github.com/Koushiro-Achioku/spike-rt.git
クローン後、ls
コマンドを実行し、spike-rtというフォルダが確認されればクローン完了です。
rubyコードの修正
公式のリポジトリからクローンした場合は以下の作業を行ってください。
私のリポジトリからクローンした場合は対応済みのため必要ありません。
SPIKE-RTのアップデートに伴い、rubyのバージョンが3系に上がったようです。
これにより、ソースコードの修正が必要な箇所があります。
編集するのは spike-rt/asp3/cfg/pass1.rb
の 181行目 です。
# 元のコード
symvalCsv = CSV.open(symvalTableFileName, { skip_blanks: true, skip_lines: /^#/ })
# 修正後のコード
symvalCsv = CSV.open(symvalTableFileName, skip_blanks: true, skip_lines: /^#/ )
詳しくは 「もっと!後輩たちのEV3rt講座」 の方で詳しく解説しておりますので、そちらを参照してください。
Step 2. Dockerの導入
次に行うコンテナ・イメージのプルの前に、macにDockerを導入しておく必要があります。
Dockerの導入にはHomeBrewを使用しますが、ここではHomeBrewのインストール方法は省略いたします。
以下を参考にインストールしてください。
では、本題のDockerインストールを行います。
% brew install --cask docker
上のコマンドで、Dockerがインストールされるはずです。
導入完了後、以下のコマンドによりDockerが正しく入っているか確認しておくことをおすすめします。
% docker -v
Docker version 27.4.0, build bde2b89
のように出力されれば導入完了です。
(Launchpad (アプリ一覧) にDockerが追加されているはずですが、そちらを開き、設定を行う必要があるかもしれません)
コンテナ・イメージのプル
次に、Github上にあるDockerのコンテナ・イメージをプル(つまりダウンロード)してきます。
ターミナルを開いて、以下を実行してください。
% docker pull ghcr.io/spike-rt/spike-rt:v0.2.0-rich
プルが完了すると以下のように表示されます。
Status: Downloaded newer image for ghcr.io/spike-rt/spike-rt:v0.2.0-rich
ghcr.io/spike-rt/spike-rt:v0.2.0-rich
コンテナのアタッチと起動
プルしてきたコンテナをDockerにアタッチして起動します。
% docker run --rm -it -v $(pwd):$(pwd) -w $(pwd) ghcr.io/spike-rt/spike-rt:v0.2.0-rich /bin/bash
ここで、行の先頭に sudo
というコマンドがありますが、こちらは 「管理者権限で実行する」 という意味です。
この際、パスワードの入力が求められますので、macのログインに使用するパスワードを入力してください。
Step 3. 転送方法の構築
続いて、Hubブロックをmacに接続して、ビルドした実行ファイルをHubブロックに転送する方法を構築します。
libusbのインストール
SPIKEに実行ファイルを転送するのに使用するライブラリを、Homebrew経由でインストールします。
% brew install libusb
PyUSBの導入
HUBブロックに実行ファイルを転送するために、Pythonのスクリプトを使用します。
又、そのスクリプト内で、DFU ModeのUSBデバイスに実行ファイルを転送するためのライブラリ pyusb
をインストールします。
まずは、Pythonを導入する必要がありますが、今回は仮想環境下にインストールしたいと思います。
Pythonの仮想環境を、Homebrew経由でインストールします。
ターミナルを開いて、以下のコマンドを実行していきましょう。
% brew install python@3.10
次に、 spike-rt/tools/python
のディレクトリに、Pythonの仮想環境を作成します。
最後に、仮想環境下に、Pythonのパッケージ管理ツールである pip
を用いて、pyusb
をインストールします。
同じくターミナルにて以下のコマンドを実行していきましょう。
% cd (spike-rtがあるフォルダ)
% python3 -m venv ./spike-rt/tools/python
% ./spike-rt/tools/python/bin/pip install pyusb
ソースコード修正
こちらもソースコードの修正が必要な箇所があるため、修正します。
修正を行うのは /Users/koushiro/Workspace/spike-rt/external/libpybricks/micropython/tools/pydfu.py
の 80行目
です。
以下のように書き換えてください。
# 修正前
getargspec = getattr(inspect, "getfullargspec", inspect.getargspec)
# 修正後
getargspec = getattr(inspect, "getfullargspec", inspect.getargs)
以上で、実行ファイルの転送方法の構築は完了です。
Step 4. ビルドのテスト
それでは、構築した開発環境が正しく動作するか、ビルドのテストを行いたいと思います。
ターミナルを開いて、以下の操作を行ってください。
初めに、GithubからプルしてきたSPIKE-RTのフォルダに移動します。
% cd (spike-rtがあるフォルダ)/spike-rt
ここで、Dockerがアタッチされていない方は、アタッチしておきましょう。
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
というシェルスクリプトを実行します。
% ./scripts/build-test.sh
ここで必要なファイルの生成、およびコンパイルが行われるため、ターミナルには文字がザーっと流れます。
正しくビルドできたかどうかを見分けるには、実行完了時にターミナルに以下👇の文字列が表示されているかを確認すれば良いです。
arm-none-eabi-objcopy -O binary -S asp asp.bin
+ cd ..
これにて、開発環境構築は完了です!!
3. 最後に
Windows(WSL) 版では、前章のビルドテストまでで#1が終わっているので、ここから #2 エディタを使おう(VisualStudio Code) に合流して貰えればと思います。
今回、実行ファイルをHubブロックに転送するテストは行っていませんので、出来ればそのテストを行う #3 テンプレートファイルとシェルスクリプトの作成 まで一気に行い、確認していただくのが良いかと思います。