浅葱輪業

Programming & Bicycle

Rust on EV3RTの構築手順(ETロボコンにRustで参加しようと思っている方向け)

この記事はETロボコン&EV3 Advent Calendar 2018 - Qiitaの22日目の記事です。
来年のETロボコンにRustで参加する人のために、プロジェクトをビルドして実機で動作させる手順を記載します。
本記事は、以下の環境で検証しています。

EV3RT開発環境のインストール

qiita.com
こちらの記事を参考に、EV3RTの環境を構築します。

Rustのインストール

Rustのツールチェイン管理ツールであるrustupをインストールして、必要なコンパイラを追加します。

$ curl https://sh.rustup.rs -sSf | sh
$ rustup default nightly
$ rustup target add armv5te-unknown-linux-gnueabi

Rust on EV3RT SDKのインストール

hrp2をダウンロードしたディレクトリに移動して、Rustのサンプルプロジェクトのリポジトリをダウンロード及び解凍します。

$ pwd
/mnt/c/Users/hogehoge/Documents/hrp2
$ wget https://github.com/TK-R/ev3rt-hrp2-sdk-rust/archive/0.1.zip
$ unzip 0.1.zip
$ cd ev3rt-hrp2-sdk-rust-0.1/workspace

サンプルプログラムの確認

ダウンロードしたリポジトリは下記の構成となっています。

$ tree rust-sample
rust-sample/
├── Cargo.lock
├── Cargo.toml
├── Makefile.inc
├── app.c
├── app.cfg
├── app.h
├── balancer.c
├── balancer.h
├── balancer_param.c
├── balancer_private.h
├── src
│   ├── ev3
│   │   ├── balancer.rs
│   │   ├── battery.rs
│   │   ├── button.rs
│   │   ├── ev3rt.rs
│   │   ├── lcd.rs
│   │   ├── led.rs
│   │   ├── mod.rs
│   │   ├── motor.rs
│   │   └── sensor.rs
│   ├── lib.rs
│   └── sample.rs
....

この中で、lib.rsがプログラムのエントリポイントであり、balancer~のソースコードが公式から提供されている倒立振子ライブラリとなります。
先日の記事で紹介したように、FFIを持ちいて呼び出すことで、C言語のライブラリを資産として活用しつつ、
呼び出し側は安全なRustによって記述することができています。

ソースコードのビルドとインストール

続いて上記のソースコードをビルド、インストールします。
EV3とBluetoothで接続した状態で、以下のコマンドを実行します。

$ make app=rust-sample
$ ll
total 484
drwxrwxrwx 1 tk-r tk-r   4096 Dec 20 23:37 ./
drwxrwxrwx 1 tk-r tk-r   4096 Dec 20 23:21 ../
-rwxrwxrwx 1 tk-r tk-r   4516 Dec 20 23:06 Makefile*
-rwxrwxrwx 1 tk-r tk-r 485832 Dec 20 23:42 app*
drwxrwxrwx 1 tk-r tk-r   4096 Dec 20 23:42 rust-sample/

出力されたappがEV3RTで実行可能なアプリケーションとなりますので、Bluetooth/USBなどの方法でSDカードにコピーします。
β7-2の環境でコピーするなら、Bluetoothが一番簡単かと思います。
ビルドしたプロジェクトを実行するには、センサとモータを以下の通りに接続します。

  • Lモータ : PortC
  • Rモータ : PortB
  • 尻尾モータ : PortA
  • タッチセンサ : Port1
  • ジャイロセンサ : Port4

起動後、タッチセンサを操作すると倒立振子で直進します。
www.youtube.com

動きました。

最後に

この記事が、ETロボコンにRustで参加する方の手助けになれば幸いです。