EV3 および ev3dev 上で動作するコンポーネントを開発するには、EV3上で開発する方法と、クロス開発環境で開発する方法があります。
ただし、EV3 はメモリが64MB、CPUクロックが300MHz程度と、今どきの開発環境としてはだいぶ遅いマシンですので、EV3上での開発はかなり大変です。
クロス開発というのは、異なるアーキテクチャ、つまり一般的な PCのアーキテクチャである Intel 系の CPU上で、ARM などの異なる種類で動作する実行ファイルを作成することです。
クロス開発では、コンパイル即実行という形はとれませんが、コンパイル時間が圧倒的に速いので、結果として開発効率は高くなります。
開発環境は Linux のディストリビューションの1つである Ubuntu (14.04 LTS) を使用します。
こちらの URL から ISOイメージをダウンロードして OS をインストールしてください。
PC のそのままインストールして使用することもできますし、バーチャルマシンとしてインストールして使用しても構いません。
バーチャルマシン環境としては、主に以下のようなものがあります。
これらの詳細な使用方法については、それぞれの Webサイトもしくは、解説の Webページを検索してみてください。
ここからは、Ubuntu14.04 がインストールされたものとして、話を進めます。 まず、brickstrap というツールをインストールします。brickstrap は上述の ev3dev の OSイメージを作成するためのツールですが、クロス開発を行うためのツールとしても利用可能です。
brickstap は下記の github 上で開発が行われています。
まずは、brickstrap をインストールします。通常の debian リポジトリには存在しないコマンドですので、パッケージリポジトリに ev3dev.org を追加しています。
$ sudo apt-key adv --keyserver pgp.mit.edu --recv-keys 2B210565 $ sudo apt-add-repository "deb http://archive.ev3dev.org/ubuntu trusty main" $ sudo apt-get update $ sudo apt-get install brickstrap
まずは supermin appliance を作成するために以下のコマンドを実行します。
$ sudo update-guestfs-appliance $ sudo usermod -a -G kvm <username> $ sudo chmod +r /boot/vmlinuz*
ここまでできたら、いよいよ開発環境を作成します。特定のディレクトリーに、EV3 に搭載するシステムのファイルシステムを模擬したものを作成します。 場所としては、自分のホームディレクトリー以下の適当な場所が良いでしょう。ここでは、ホームディレクトリー以下の work ディレクトリーに作成します。
$ cd ~ $ mkdir work $ cd work
以下のコマンドでファイルシステムの作成~イメージの作成を行います。
$ brickstrap -b ev3-ev3dev-jessie -d ev3-ev3dev-work all
このコマンドの実行には10分から20分かかります。 実際に行われていることは、ev3dev の Linux システムに必要なコマンド群、パッケージなどを仮想的な root ディレクトリー ev3-ev3dev-work 以下にインストールし、それを SDカードに書き込み可能なイメージファイルとして構成する作業です。
終了後には、ev3-ev3dev-work.tar と ev3-ev3dev-work.img というファイルシステムのアーカイブとイメージファイルが作成されているはずです。 この .img ファイルを SDカードに書き込むと EV3 で ev3dev を起動できます。
ubuntu14.04 x86_64 では、brickstrap 内部で使われている proot のバージョンが古く、一部のユーザーIDやグループIDを扱う関数が実行できないため、apt-get でエラーが発生します。 これを避けるために、バージョン4.0以降の proot を使用します。
ここから、x86_64用バイナリをダウンロードし、当該マシンにコピーします。
$ wget http://portable.proot.me/proot-x86_64 $ sudo mv /usr/bin/proot /usr/bin/proot_3.0.2 & sudo mv proot /usr/bin/ $ chmod 755 /usr/bin/proot
以上で、クロス開発環境ができましたので、OpenRTM-aist をコンパイル・インストールして、さらに RTコンポーネントを開発します。 brickstrap を利用すると、あたかも EV3 上でパッケージのインストールやソースコードのコンパイルをしているように振る舞うモードを利用することができます。
以下のコマンドを入力します。
user@host:~/work$ brickstrap -b ev3-ev3dev-jessie -d ev3-ev3dev-work shell
すると、コマンドプロンプトが # となり、上述のモードとなります。
OpenRTM を自分でコンパイル・インストールする場合には、以下の手順に従ってください。ビルド済みのパッケージを利用する場合は、次の章へ移動してください。
まず、OpenRTM-aist をコンパイルします。OpenRTM-aist のビルドに必要なパッケージをインストールします。
# apt-get update # apt-get install libomniorb4-dev omniidl # apt-get install gcc g++ make uuid-dev libboost-filesystem-dev # apt-get install doxygen # apt-get install build-essential debhelper devscripts # apt-get install subversion texlive texlive-lang-cjk xdvik-ja python-yaml # apt-get install wget
次に、OpenRTM-aist のソースコードをダウンロードします。
# cd /home # wget http://tmp.openrtm.org/pub/OpenRTM-aist/cxx/x.y.z/OpenRTM-aist-x.y.z.tar.gz # tar xvzf OpenRTM-aist-x.y.z.tar.gz # cd OpenRTM-aist # ./configure --prefix=/usr # cd packages # make
これで、packages の下に OpenRTM-aist のパッケージが生成されます。 その後は、
# dpkg -i openrtm-aist-*
のようにして、パッケージをインストールしてください。 OpenRTM-aist-Python についても同様にソースコードをダウンロードして、コンパイル(正確には、パッケージ作成)します。
# wget http://tmp.openrtm.org/pub/OpenRTM-aist/python/x.y.z/OpenRTM-aist-Python-x.y.z-RELEASE.zip # cd OpenRTM-aist-Python # cd packages # make
C++版同様に package ディレクトリー以下に作成されたパッケージが作成されます。 インストールは、
# dpkg -i openrtm-aist-python-*
のように行います。
上述のように、OpenRTM-aist を自分でソースからインストールせずに、事前にコンパイル済みのパッケージをインストールしても構いません。 ev3dev に OpenRTM-aist をインストールする方法について述べた、上述の方法とほぼ同様です。
openrtm.org をパッケージリポジトリとして追加するために、/etc/sources.list を編集します。
# vi /etc/apt/sources.list
のように、vi で /etc/apt/sources.list を開き、
deb http://ftp.debian.org/debian jessie main contrib non-free deb http://ev3dev.org/debian jessie main deb http://openrtm.org/pub/Linux/debian jessie main ← この行を追加
この例のように、最下行に openrtm.org のリポジトリを追加します。
その後、
# apt-get update
以上で、openrtm.org のパッケージリポジトリにアクセスできるようになりましたので、以下のようにしてパッケージをインストールします。
# apt-get install openrtm-aist openrtm-aist-dev openrtm-aist-example # apt-get install openrtm-aist-python openrtm-aist-python-example