2017年2月24日金曜日

Bebop2 を Mac で制御できる環境を構築してみた

概要

前回 node-bebop という Nodejs 製のライブラリを使って Bebop2 を制御してみました
今回は Nodejs を返さず直接 Mac から制御してみました

環境

  • Mac OS X 10.10.5
  • repo 1.12.33
  • Bebop2

repo コマンドのインストール

repo コマンドは git を管理するためのツールです
環境構築に必要なのでインストールしましょう

で OK です
repo --version などしてバージョンが表示されることを確認してください

ソースの取得

Mac で Bebop2 を制御するためのツールはソースから直接インストールします
まずは先ほどインストールした repo コマンドを使ってソースコードを取得しましょう

とするとリポジトリを初期化する処理が開始されます

warning: gpg (GnuPG) is not available.
warning: Installing it is strongly encouraged.

Get https://gerrit.googlesource.com/git-repo/clone.bundle
Get https://gerrit.googlesource.com/git-repo
Get https://github.com/Parrot-Developers/arsdk_manifests.git
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (22) The requested URL returned error: 404 Not Found
Server does not provide clone.bundle; ignoring.
remote: Counting objects: 62, done.        
remote: Total 62 (delta 0), reused 0 (delta 0), pack-reused 62        
From https://github.com/Parrot-Developers/arsdk_manifests
 * [new branch]      master     -> origin/master
 * [new tag]         ARSDK3_version_3_8 -> ARSDK3_version_3_8
 * [new tag]         ARSDK3_version_3_8_1 -> ARSDK3_version_3_8_1
 * [new tag]         ARSDK3_version_3_8_2 -> ARSDK3_version_3_8_2
 * [new tag]         ARSDK3_version_3_8_3 -> ARSDK3_version_3_8_3
 * [new tag]         ARSDK3_version_3_9_0 -> ARSDK3_version_3_9_0
 * [new tag]         ARSDK3_version_3_9_1 -> ARSDK3_version_3_9_1

Your Name  [hawksnowlog]: 
Your Email [hawksnowlog@localhost.local]: 

Your identity is: hawksnowlog <hawksnowlog@localhost.local>
is this correct [y/N]? y

repo has been initialized in /Users/hawksnowlog/Documents/work/ardrone3

途中でリポジトリにコミットする Author の設定を入力する必要があるので、適当に入力しましょう
これだけではソースコード自体は取得できていないので、sync してソースコードを取得しましょう

  • repo sync

とするとズラーっとログが流れてソースコードの取得が始まります
ログは長いので省略します

最終的に以下のようになっていれば OK です

  • ls -1
build
build.sh
out
packages
products
track-branch.sh

ビルド

ダウンロードしたソースコードをビルドしましょう
ビルド方法はダウンロードした中にある「build.sh」を実行すれば OK です

コマンドについて

実行には引数が必要で今回は

  • ./build.sh -p arsdk-native -t build-sdk -j
  • ./build.sh -p arsdk-native -t build-sample -j

という感じで実行します

「-p」オプションはプロダクトを指定するオプションで今回は「arsdk-native」を指定しています
他には android , ios, ios-sim というプロダクトを指定することができます
今回は Mac から直接制御したいので arsdk-native を指定します
「-t」というオプションでタスクを指定できます
代わりに「-A」というオプションを使用することで alchemy というタスクが実行され、これを実行することで必要なものは全部ビルドされます
が、今回は SDK と Sample だけ必要なので、そのタスクだけ実行します

ちなみにタスクの一覧を表示するには

  • ./build.sh -p native -t

を実行してみてください
あとわからないことは「./build.sh -h」でヘルプを表示することができます

実行

実行するとおそらくいろいろとモジュールが足りないと言われてエラーになると思います
その場合は逐一 homebrew などで足りないモジュールをインストールすれば OK です
ちなみに自分は以下のエラーが出たので

  • brew install libtool

で対応しました

Can't exec "glibtoolize": No such file or directory at /usr/local/Cellar/autoconf/2.69/share/autoconf/Autom4te/FileUtils.pm line 345, <GEN3> line 5.
autoreconf: failed to run glibtoolize: No such file or directory
autoreconf: glibtoolize is needed because this package uses Libtool

それ以外のエラーは特に出ませんでした
公式を見ると以下がインストールされている必要があるみたいです

  • git
  • build-essential (only for Linux)
  • autoconf
  • libtool
  • libavahi-client-dev
  • libavcodec-dev
  • libavformat-dev
  • libswscale-dev
  • libncurses5-dev
  • mplayer

最終的にビルド結果が以下のようになれば OK です

[I] Finished task 'build-sdk'
[I] Finished task 'build-sample'

動作確認

今回は実際に飛ばさないでビデオストリームを使ってカメラの画像を Mac 上にリアルタイムに表示してみます

サンプルの C スクリプトを使うのですが、Mac 上での動画の描画は mplayer を使うみたいなので事前にインストールしておきます

  • brew install mplayer

インストールできたら実行してみます
実行するときは Bebop2 を起動して Mac と Wifi で接続してください

  • /path/to/Documents/work/ardrone3
  • LD_LIBRARY_PATH=./out/arsdk-native/staging/usr/lib
  • echo $LD_LIBRARY_PATH
  • ./out/Unix-base/staging/native-darwin-wrapper.sh ./out/arsdk-native/staging/usr/bin/BebopDroneReceiveStream

で実行できるはずです
やっていることは単純でラッパーのシェルを使ってビルドしてできたバイナリを実行している感じです
実行直後のデバッグログは以下の通りです

[INF] BebopDroneReceiveStream | 14:49:46:749 | main:307 - -- Bebop Drone Receive Video Stream --
[INF] BebopDroneReceiveStream | 14:49:46:750 | main:317 - -- Starting --
MPlayer 1.3.0-4.2.1 (C) 2000-2016 MPlayer Team
Can't init Apple Remote.

Playing /tmp/arsdk_wz0b7G/arsdk_fifo.
libavformat version 57.25.100 (internal)
[INF] BebopDroneReceiveStream | 14:49:46:763 | ardiscoveryConnect:473 - - ARDiscovery Connection
[INF] BebopDroneReceiveStream | 14:49:46:933 | startNetwork:505 - - Start ARNetwork
[INF] BebopDroneReceiveStream | 14:49:46:933 | startVideo:611 - - Start ARStream
[INF] BebopDroneReceiveStream | 14:49:46:933 | sendBeginStream:730 - - Send Streaming Begin
[ERR] ARNETWORKAL_WifiNetwork | 14:49:46:957 | ARNETWORKAL_WifiNetwork_GetAvailableSendSize:1154 - [0x7ff759d000c0] Error $
uring ioctl 6 (Device not configured)
[INF] ARNETWORKAL_WifiNetwork | 14:49:46:957 | ARNETWORKAL_WifiNetwork_GetAvailableSendSize:1159 - [0x7ff759d000c0] ioctl f
ailed with error ENXIO, stop trying to get available socket buffer size

...

しばらくすると Bebop2 のカメラの映像が Mac にも表示されると思います
bebop2_with_unix_commnds.png

最後に

紹介は以上です
2015年くらいの記事を参考に実施しようとすると ARSDKBuildUtils をクローンしてビルドする手順が出てくるのですが、どうやらこれは非推奨になったらしく今回の手順が正規の手順になったようです

あとは実行シェル (native-darwin-wrapper.sh) とサンプルファイル (BebopDroneReceiveStream.c) を見れば何とか作れるんじゃないかなと思います
独自のサンプルもできたら紹介したいと思います

参考サイト

0 件のコメント:

コメントを投稿