ArduPilot開発のための実機を作る(Navio2ビルド編)

巷ではじわりじわりとNavio2が日本ArduPilotユーザを魅了しているようです!

ブログを見て組み立てにチャレンジしている、と多くの声をいただいてますし、

フィードバックもいただいております。私も勉強になりとても嬉しい限りです。

 

さて、今回は実機組み立てが終わったら、カスタマイズしたArduCopter(ArduPilotのコプターコード)コードをビルドして動かしたくなると言うことで、

Navio2向けにソースをビルドする方法をEMLID公式ドキュメントをベースに紹介したいと思います。

【注意事項】

・Raspberry Piと開発マシンがネットワークで接続できている状態を前提とします。

・筆者は、Mac+VirtualBox+Ubuntu14環境を使用しています。

・若干ArduPilot入門ブログと重複する部分はありますのでご了承ください。

前提条件と作業の流れ

・Ubuntu14の仮想マシンが用意されている状態、かつホームディレクトリにardupilotがクローンされている。

・Raspberry Pi上にもardupilotがクローンされている。

※ともに最新のmasterブランチのコードとします。開発中のコードだとビルドできない場合があるので、その場合は”Copter-3.4“または”Copter-3.5“ブランチを試してみてください。

  1. ビルド方法の確認
  2. 直接Raspberry Pi上でビルド
  3. Ubuntu14上でクロスビルド

 

ビルド方法の確認

これまではビルド済みのバイナリを使用していました。

ソースコードを修正したり、独自機能を追加したりした場合には、自分でソースコードからビルドする必要があります。

ソースコードからビルドする方法として、公式ドキュメントで次の2通りのが紹介されています。

基本的にはwafを使ったビルドです。wafの説明については割愛します。

  1. 直接Raspberry Pi上でビルドするシンプルな方法
  2. Linux PCか仮想マシン上でクロスコンパイルする方法

前者はシンプルですが、ビルドに時間がかなりかかります。公式ドキュメントではおおよそ15分かかると書いてあります(これはクリーンビルドの場合にかかる時間、1期生@muramuraさんによる検証だと14分と数十秒)。個人的な体感でもかなり遅いと感じました。2回目以降のビルドだとまた変わってきますが。

ただ、すごくシンプルなのでとりあえず試してみるにはいいと思われます。

後者は少し環境構築が必要ですが、ビルド時間は大幅に短縮されるので必須となることでしょう。

繰り返しになりますが、この記事はMacBook Pro上にVirtualBoxでUbuntu14をインストールしています。

直接Raspberry Pi上でビルド

Raspberry Pi(以降、RPi)にリモートログインできている状態とします。RPi上でのコマンド操作になります。

ほぼ公式ドキュメントにあるコマンドをそのまま実行していけばできます。すでにArduPilotのGitリポジトリからホームディレクトリに(最新のmasterブランチのソースを)クローンは済んでいる前提としますので、

$ cd && cd ardupilot
$ git submodule update --init

を実行します。これでサブモジュールのダウンロードを行ってくれます。

次に、公式ドキュメントではビルドコマンドをPathに通すと書いてありますが、必要ありません

ArduPilotのdevドキュメントでは、

実行権が付いたardupilot/wafスクリプトファイルを実行するように、としています。

ドキュメントではフレームタイプ指定するようにと書いてありますが、これも必要ありません

$ ./waf configure --board=navio2
$ ./waf copter

– – boardオプションでターゲットボードを指定します。指定しない場合はsitlになります。エミュレータ向けのビルドになります。

ArduPilotで対応しているボードの一覧を見るためには、

$ ./waf list_boards

で見れます。

configureコマンドが終わると次は、ビルドターゲットをcopterとしてビルドを開始します。./waf buildとすると全部ビルドされました。確か。

ビルドが終わると、

/home/pi/ardupilot/build/navio2/bin/   // RPi上の絶対パス

arducopterとarducopter-heliファイルができていると思います。前者がコプター用実行ファイルです。

※ファイルの位置関係が分かりやすいかと思い、あえて絶対パスで表記しました。

※赤字のnavio2となっている部分は、configure時に指定したボードの名前が入ります。違うボードを指定した場合は異なりますのでご注意を!

あとは、実行ファイルを既存のarducopter-quadと差し換えて、Navio2を再起動するだけです。

Ubuntu14上でクロスビルド

Ubuntuを使う場合は環境構築が必要と言いましたが、実は必要なものを全部まとめてインストールしてくれるスクリプトが用意されています。ardupilot/Tools/scripts/install-prereqs-ubuntu.shがそうです。

技術ブログ「ArduPilot 入門 (6):開発環境を準備しよう (Ubuntu + Eclipse)」の”ターミナルからビルド”以降をご参照ください!丸投げですが、本当に重複になってしまうのでお許しください^^;;

今ではpipのfutureとlxml不足エラーは改善されているかと思いますのでかなり楽チンです!

環境構築スクリプトが実行し終わったら、あとはRPi上でビルドする手順と同じです。

ただし、生成された実行ファイルをscpなりrsyncなりでRPi上にコピーしないといけません。

例えば、Ubuntuのardupilotディレクトリ直下にいて、RPiのIPアドレスが192.168.100.2だとした場合、

$ scp build/navio2/bin/arducopter pi@192.168.100.2:~/

でコピーできます。ただ、これだと名前の付け方によっては上書きされちゃうので、オススメは次のように一回リネームを挟むやり方です。

$ scp build/navio2/bin/arducopter-mybuild pi@192.168.100.2:~/

$ ssh pi@192.168.100.2

$ mv arducopter-quad arducopter-quad.org

$ mv arducopter-mybuild arducopter-quad

前編のブログではarducopter-quadと命名していますので合わせています。
※無駄のように思えますがいつか救われるはずです^^;

少々面倒ですが、オリジナルの実行ファイルは取って置いた方が何かと便利です。

あとは、Navio2を再起動させれば自分でビルドしたプログラムで動き出すのでテストしてください!

 

ご意見・ご指摘などフィードバックお待ちしております!

著者紹介

川村剛(かわむらつよし)
ドローンソフトウェアエンジニア養成塾 第2期卒業生。

記事の誤りを見つけた方は下記のメールアドレスまでご連絡ください。
techblog@drone-j.com
(週末にメールを確認していますので、対応が遅くなること、休みの日にメールを返信させていただくこと、ご了承ください。)