html5jロボット部

html5jロボット部の活動レポート、ロボットに関する情報発信(気づく限り)を行うブログです。

PalmiのVisual Studioの開発環境を公開

本日より DMM.make ROBOTSのラインナップ「Palmi」の開発環境で Visual Studio版が公開されたのでさっそく使ってみました。

そのレビューを以下、書いてみました。

デベロッパーサイト

f:id:j_s_machine:20151117000329j:plain

「Palmi Application Developers Site」は以下URLにあります。 ここに基本的に情報が集約されています。

http://palmigarden.net/site/cn24/Developer/index.html

デベロッパーサイトはベーシック認証がかかっているので、 まずはデバロッパー登録をする必要があります。 下記URLのページから登録してみましょう。

登録完了するとデベロッパーサイトのベーショック認証解除のアイパスが送られてきます。 (私の場合、前もって登録していたのでアイパス発行までの時間は定かではありません、すみません)

palmigarden.net

Visual Studio版の開発環境で変わったこと

Palmiのアプリケーションは、PalmiがUbuntu12.04 LTSで動いているため、しかしPalmi用の開発IDEWindowsのデスクトップアプリという矛盾があったため、 以下のような手順で行う必要がありました。

  • モーションの作成
    WindowsのPalmi Motion Editorで作成

  • ソースコードの編集とコンパイル
    Ubuntu12.04LTSで行う(Windowsで作成したモーションのソースファイルはUbuntuに持っていく必要がある)

  • アプリケーションの設定とパッケージ化、Palmiへの転送
    Windowsのデスクトップアプリ「Palmi Application Studio」で行う(Ubuntuコンパイルした実行ファイルなどはWindowsに持ってくる)

今回、VisualStudioへのアドオンができたことで、このOS跨ぎをして開発を行う必要がなくなったというところがポイントになります。

f:id:j_s_machine:20151119022209j:plain

f:id:j_s_machine:20151119022225j:plain

インストールしてみる

デベロッパーサイトにある手順通りに開発環境を準備します。

Visual Studio Community 2015をインストール

まずは今回の主役であるマイクロソフトIDEVisual Studio」をインストールします。 現時点ではCommunity 2015とあるのでそれをダウンロードし、インストールします。

ダウンロードページのURLは以下のとおり
Downloads | Visual Studio

ダウンロードしたら、インストールします。

ただし、ここが一番の難敵でインストールに6時間以上かかります。 (この前に私のPCには2015のRC版が入っていて、期限が切れたのでアンインストールしていたら3時間くらいかかりました。。。)

Visual Studio 2015 Language Packをインストール

ようやく青春の1ページを割いてVisual Studioをインストールしたら、 今度は日本語対応するために「Language Pack」をインストールします。

ダウンロードページのURLは以下のとおり
https://www.microsoft.com/ja-jp/download/confirmation.aspx?id=48157

これはすんなり終わりました。

VirtualBox のインストール

PalmiのOSはUbuntu 12.04 LTSなので単純にWindows環境でコンパイルしたものはPalmi上で動作しません。 なので、VisualStudioからVirtualbox上でUbuntuを走らせてコンパイルしてPalmiにアップロードさせるというやり方を採用することで、 直接実行ファイルをUbuntuからWindowsに移してからアップロードするという手間が不要になりました。

という理由でVirtualBoxをインストールする必要があるため 以下のURLからインストーラをダウンロードします。
Downloads – Oracle VM VirtualBox

ここでは「VirtualBox 5.0.10 for Windows hosts」を選んでください。

ダウンロードされたら、指示される手順通りにインストールします。

Palmi Application Development Add-on Kit for Visual Studio へのインストール

Visual StudioとVirtual Boxがインストールされたら、いよいよ「Palmi Application Development Add-on Kit」をVisual Studioにインストールします。

まずはzipファイルをダウンロード。 ダウンロードページのURLは以下のとおり
http://palmigarden.net/site/Tools/Palmi_App_Dev_Kit_installer.zip

これも容量が3GBくらいあるので、ダウンロードに5-10分くらいかかります。 (なので結構容量が残っているPCで行う必要がありますね。)

ダウンロードが完了したら、zipファイルを解凍してフォルダ内にあるSetup.exe を実行します。 質問はすべて「Yes」「はい」で。

これが完了すればようやく準備完了です!

プロキシの設定

PC のネットワークが、プロキシサーバを使用している設定の場合は、プロキシサーバーを経由せず Palmi に接続する必要があります。 ※プロキシサーバーを使用していない場合は、必要ありません。

私のネットワークでは特に必要なかったので完全スルーです。

独特のワードを覚えておこう

Palmiを開発するときは以下のキーワードがドキュメントに頻繁に出てきます。

  • 「特技」
    Palmiのアプリケーションのことを「特技」といいます。

  • 「たね」
    作成したアプリについての実行ファイルや設定ファイルなどをzipファイルにパッケージ化したものを「たね」と言います。これをPlamiに転送することで「特技」ができるようになります。 ※これはいままでベータ版の環境にはなかったワードで、新しく定義されました。

起動してみる

ようやく準備が整ったのでさっそく使ってみました。

Visual Studio Community 2015を起動

f:id:j_s_machine:20151117000537j:plain

最初のVisualStudioの画面を見ても、Palmiのアドオンについて何も見当たりません。 VisualStudioに慣れている人は、プロジェクト作成に反映されていると大体検討はつくと思いますが、 とくに起動しただけだと

というわけで「新規プロジェクトの作成」をクリックしてみました。

すると

f:id:j_s_machine:20151117000549j:plain

テンプレートに「Palmi SPC」というのが追加されています。 なのでこれを選んで「名前」(プロジェクト名)を適当に入力して「OK」をクリックします。

すると以下の画像のようにプロジェクトファイルとソースコードが表示されます。 基本的に画像にあるSpcBaseCode.cppというところにコードを書いていくわけです。

f:id:j_s_machine:20151117000608j:plain

ちなみに「出力」のパネルをみると

コンパイル用 Oracle VM VirtualBox を探します。
ネットワークアダプタ [ VirtualBox Host-Only Network ] を使用して、コンパイル用 Oracle VM VirtualBox を探しています。
コンパイル用 Oracle VM VirtualBox を起動しています。

と出てきます。 インストールしたVirtualBoxがVisualStudio経由で起動しているのがわかります。

アドオンの機能

さてPalmi Spcテンプレートでプロジェクトを作成するとタブに「Palmi」という項目が追加されているのがわかります。 これをマウスオーバーすると以下の画像のような項目が表示されます。

f:id:j_s_machine:20151117000641j:plain

これについて説明します。

  • 特技の開発手順

これをクリックするとPDFファイルのマニュアルが開きます。内容はデベロッパーサイトよりも詳細に説明されているので 最初はこれを見ながら開発するといいのではないでしょうか? (プリントアウトしておくといいかもしれませんね。)

f:id:j_s_machine:20151117000655j:plain

  • SPCBase リファレンス

SPCBaseのAPIリファレンスがブラウザで開かれます。 ここにSPCのAPIについて詳細に書かれています。 今後掘り下げて開発するときはここを参考にしていくことになります。

ただし、Palmiの開発言語はC++であることと、最初は理解するのが大変かもしれないので サンプルソースを照らし合わせながら調べていくことをお勧めします。

f:id:j_s_machine:20151117000753j:plain

  • Palmiと接続する

同一ネットワーク内にあるPalmiのリストが表示されます。 これを選んで接続するとPalmiは開発モードに入り、動作が停止します。

  • Palmiと切断する

接続しているPalmiを接続解除するときにこちらを選びます。 接続し、アプリのアップロードが完了したら、必ず解除する必要があります。

  • 特技のプロパティ

これは元々Palmi Application Studioに搭載されていた機能です。 今回VisualStudioのアドオンにこの機能が連携されました。

ここで作成したPalmiの特技(アプリ)名やその概要、コミュニケーションワード(音声入力のトリガーとなるワード)を設定します。

f:id:j_s_machine:20151117000718j:plain

  • スティップリングレンズパターン エディタ

これは元々Palmi Application Studioに搭載されていた機能で、Palmiの顔のLEDのパターンを作成することができます。 こちらについては後日、改めて記事にしたいと思います。

f:id:j_s_machine:20151117000725j:plain

  • Palmi Motion Editor

こちらは元々PalmiMotionEditorというWindowsアプリケーションとして存在していました。 PalmiApplicationStudioと合わせて今回VisualStudioにアドオン連携したわけです。

ただこの編集は正直かなり面倒です。。。 というわけで私は基本的にサンプルモーションを使うことにします。

f:id:j_s_machine:20151117000706j:plain

  • たねの作成と転送

ここでビルドした実行ファイルとプロパティファイルなどがzipファイルにパッケージ化(「たね」化)することと 接続したPalmiに転送(アップロード)を行う機能になります。 これも元々PalmiApplicationStudioにあった機能です。

f:id:j_s_machine:20151117013607j:plain

  • 発話テスト

接続したPalmiの発話テストがここで行えます。 こちらについての説明はまたこのブログで後日公開する予定です。

f:id:j_s_machine:20151117000753j:plain

  • ログビューア

接続したPalmiのログがここで見れます。 こちらについての説明はまたこのブログで後日公開する予定です。

f:id:j_s_machine:20151117000736j:plain

開発してみる

さてさっそくアプリを開発してみました。 今回はレビューということで一からリファレンスを参考にしながら開発するのは面倒なので サンプルソースを使って動かしてみるというところまでにします。 サンプルソースデベロッパーサイトの以下URLに幾つかのパターンがリスト化されています。

f:id:j_s_machine:20151117000803j:plain

ちなみにサンプルモーションも以下のURLに幾つかのパターンでリストアップされています。 ぶっちゃけMotion Editorを使って開発するのはかなり大変です。UIも初見だとよくわからないと思うので こちらのサンプルモーションを使ってサンプルソールをうまく使いながら開発することで、かなりラクになります。

f:id:j_s_machine:20151117000813j:plain

ソースコードを用意してみる

さて、今回はサンプルソースから『特技のサンプル(あいさつ)』というのをダウンロードしました。 cppファイルのソースコードは以下のとおりです。

#include "spc/spcbase2.h"
#include "SpcBaseCode.h"

std::string face_catch_name;
bool        m_bExecCallback;

/**
* @brief アプリケーション初期化イベント。
* アプリケーションの実行開始時に呼び出されます。
*/
void SpcSample::onInitialize()
{
    long    result;

    face_catch_name = "";
    m_bExecCallback = true;

    // 発話は必須ではありませんが、アプリケーション起動確認のために発話させています。
    result = speak("サンプルアプリケーションを起動しました");

    m_bExecCallback = false;
}

/**
* @brief 顔認識イベント
* Palmiが顔を見つけた場合に呼び出されます。
* @param [in] name 認識した個人の登録名(全角カタカナ)。個人未確定の場合は空白文字列。
*/
void SpcSample::onFaceCatch(std::string name)
{
    long    result;
    std::string str;

    if (m_bExecCallback == false) {
        // イベントが二重で動作しないようにしています
        m_bExecCallback = true;

        /*
        * 顔識別結果の登録名が格納されている場合は、登録名で呼びかけます。
        */
        if (name != "") {       // 登録者の場合
                                // 発話内容組み立て
            face_catch_name = name + "さん";
            str = +"こんにちは、" + face_catch_name;
        }
        else {  // 未知の人の場合
            face_catch_name = "あのー";
            str = "どなたかわかりませんが、こんにちわ";
        }
        // 発話API呼び出し
        result = speak(str);

        m_bExecCallback = false;
    }
}

/**
* @brief 顔認識イベント
* Palmiが顔を見失った場合に呼び出されます。
*/
void SpcSample::onFaceDrop()
{
    if (m_bExecCallback == false) {
        // イベントが二重で動作しないようにしています
        m_bExecCallback = true;

        if (face_catch_name != "") {
            long    result;

            // 発話API呼び出し
            result = speak(face_catch_name);
            result = speak("どこですかー?");

            face_catch_name = "";
        }
        m_bExecCallback = false;
    }
}

/**
* @brief POTセンサーイベント
* Palmiの頭部をさわった時に呼び出されます。
*/
void SpcSample::onPOTFluctuationCatch()
{
}

/**
* @brief タイマーイベント
* startTimer関数で設定した時間が経過した場合に呼び出されます。
* @param [in] timerId startTimer関数で取得したタイマーID
*/
void SpcSample::onTimer(long timerId)
{
}

/**
* @brief アプリケーション終了イベント。
* アプリケーションの終了時に呼び出されます。
*/
void SpcSample::onFinalize() {
}

// SPCアプリケーションインスタンス生成
SpcSample   spcApp;

プログラムがかけたら 「ビルド」>「ソリューションのビルド」をクリックして実行ファイルを作成します。

パッケージして転送

Palmiに接続してパッケージ化(「たね」化)して転送します。 「Palmi」>たねの作成と転送を選んで、 ※今回はすでにzip化されているので本当は行う必要がないです。

「たねの作成」を するとフォルダ内にzipファイルが作成されます。

あとはPalmiに転送

「たねを育てます」といいいます。

無事転送が終了すると「たねが育ちました」といいます。

動かしてみる

動かす前に「Palmiと切断」を選んで、Visual Studioとの接続を切断してください。 これでアプリ(「特技」)のアップロードが完了しました。

あとは、Palmiに『サンプルして』と話しかけるとPalmiが作成したアプリどおりの動作をしてくれます。

まだ制限事項があります。

DMM.comさんより今回の公開するパージョンについて下記4つの制限事項があるとの連絡がありました。 ですので十分注意してください。

  1. プロジェクトの保存場所は、デフォルト以外に設定した場合、動作保証いたしません。デフォルトの場所に保存してください。

  2. VirtualBoxのアプリケーション自体はVS側で自動的に起動/終了するので、特技の開発中は操作しないでください。

  3. Virtual Box のプロセスは、Visual Studio を終了しても一部残ります。  また、Visual Studio の終了で、Virtual Box 上のUbuntuを終了しますが、Visual Studio の終了後すぐにOSシャットダウンを行うと、Ubuntuが終了しきれずに、OS終了時にエラーを出力します。  よって、Visual Studio の終了後すぐにOSシャットダウンを行う場合は、VirtualBoxからUbuntuのシャットダウンを事前に行ってください。

  4. ビルドした際、「ビルドの終了を確認できませんでした。リビルドしてください」というメッセージが出る場合があります。その際は、リビルドしてください。

 感想

実際に使ってみましてVisualStudioのアドオンによってWindowsのみの環境で開発できるので 今まで見たいにUbuntuWindowsを行ったり来たりする必要がなくなったのがかなり大きいです。 だいぶ時間と手間の部分でラクになりました。

とは言っても今までの開発フローもUbuntuで開発して、コンパイルしてということにどうやってPalmiが動いているか何となくわかったり かなり勉強になりましたのでこっちの開発方法も残してほしいなと思ったりなんかしていますが、、、

というわけでいままで下の動画にあるような開発したアプリの移植をVS版でどんどん行っていきたいと思います。  

次回はもっと踏み込んだ開発の話をしてみたいと思います。