Top > Technical Q&A

テクニカルQ&A
gr_line934pic.png

セットアップ

1. 開発環境のインストールができない

  1. Visual Studio を起動し、Palmi-SPC のプロジェクトを起動した後、「ネットワークアダプタ [ VirtualBox Host-Only Network ] を使用して、コンパイル用 Oracle VM VirtualBox を探しています。」のメッセージが変わらない。
    1. 「コンパイル用 Oracle VM VirtualBox」の起動に失敗している可能性があります。
      • 「Oracle VM VirtualBox マネージャー」を起動し、「Palmi-Dev」が登録されている事を確認してください。
      • 登録されていない場合は、「C.コンパイル用 Oracle VM VirtualBox が登録されていない」 を参照して、復旧を行ってください。
      • 登録されている場合は、「コンパイル用 Oracle VM VirtualBox 」のUbuntu の起動に失敗している可能性があります。「D.コンパイル用 Oracle VM VirtualBox が起動しない」 を参照して、復旧を行ってください。
    2. VirtualBox のネットワークが正常に動いていない可能性があります
      • Windows にて、「VirtualBox Host-Only Network 」に割り振られている IPアドレスを確認してください。
        1. 「192.168.56.1」となっていない場合(169.254.XXX.XXX など)は、以下の手順でVirtualBox の設定変更が必要です。
          • 「Oracle VM VirtualBox マネージャー」の メニュー -> ファイル -> 環境設定... から「ネットワーク」を選択
          • 「ホストオンリーネットワーク」タブをクリックし、新しいホストオンリーネットワークを追加します。
          • 「ホストオンリーネットワーク」の「アタプター」タブの IPv4 アドレスを「192.168.56.1」に IPv4ネットマスクを「255.255.255.0」に設定します。
          • 「DHCPサーバー」タブの「サーバーを有効」にチェックを入れ、サーバーアドレスに「192.168.56.100」、サーバーマスクに「255.255.255.0」、アドレス下限に「192.168.56.101」、アドレス上限に「192.168.56.254」を設定します。
          • 「Oracle VM VirtualBoxマネージャー」のトップ画面で、Palmi-Dev を選択し、「設定」(アイコン) -> 「ネットワーク」を選択し、「アダプター2」のタブをクリック、「名前」のドロップダウンリストで、先ほど作ったアダプタを選択して「OK」で終了させてください。
        2. IPアドレスが「192.168.56.1」となっている場合
          • Windows のセキュリティソフトにより、通信が阻害されいる可能性がありますので、Windows ファイアウォールを無効にしてから「コンパイル用 Oracle VM VirtualBox 」の起動を行ってください
  2. ソリューションのビルドを行ったら、「ビルドの終了を確認できませんでした。しばらくしてからもう一度ビルドを行ってください。」となった
    1. VirtualBox のネットワークが正常に動いていない可能性があります。
      1. ソリューションのリビルドを試してみてください。それでも改善されない場合は、Windows のセキュリティソフトの設定が変わったことにより、通信が阻害されいる可能性がありますので、以下の手順で、Windowsファイアウォールを無効にしてから「コンパイル用 Oracle VM VirtualBox」の起動を行ってください
        • 「コントロールパネル」->「Windowsファイアウォール」を選択し、Windowsファイアウォールの画面を表示
        • Windowsファイアウォール画面の左にあるメニューの「Windowsファイアウォールの有効化または無効化」を選択し、ネットワーク設定のカスタマイズ画面を表示
        • ネットワーク設定のカスタマイズ画面で、表示されたすべてのネットワークに対し、「Windowsファイアウォールを無効にする」を選択してください。
    2. Windows の共有フォルダが解除された可能性があります
      1. 「C:\Users\ユーザー名\Documents\Visual Studio 2015\Projects」のアクセス権と共有状態を以下の手順で確認してください。
        • 「C:\Users\ユーザー名\Documents\Visual Studio 2015\Projects」プロパティを表示して、「セキュリティ」タブを表示して、「spc_compiler」にフルコントロールがついていることを確認してください。
        • 「C:\Users\ユーザー名\Documents\Visual Studio 2015\Projects」プロパティを表示して、「共有」タブを表示して、「詳細な共有」を開き、「このフォルダーを共有する」のチェックがついている事、共有名が「ubuntu_share」になっている事、「アクセス許可」で「spc_compiler」にフルコントロールがついていることを確認してください。
  3. コンパイル用 Oracle VM VirtualBoxが登録されていない
    1. インストールが失敗した可能性があります。
      1. C:\Program Files\FUJISOFT\Palmi\PalmiTANEDevKit\vmに、ファイル「Ubuntu_VBoxvmdk」が、サイズが約7GBで存在しているか確認してください。
        • 存在していない場合は、もう一度インストールを試してください。
        • 存在している場合、インストーラーの解凍先の「Palmi開発環境」フォルダに含まれている「VirtualBox初期設定.bat」をパラメーターを付けて実行してください。
          • OSが32ビットの場合:VirtualBox初期設定.bat "C:\Program Files\Oracle\VirtualBox" "C:\Program Files\FUJISOFT\Palmi\PalmiTANEDevKit\vm"
          • OSが64ビットの場合:VirtualBox初期設定.bat "C:\Program Files\Oracle\VirtualBox" "C:\Program Files (x86)\FUJISOFT\Palmi\PalmiTANEDevKit\vm"
        • 実行後、「Oracle VM VirtualBox マネージャー」を起動し、「Palmi-Dev」が登録されている事を確認してください。
  4. コンパイル用 Oracle VM VirtualBox が起動しない
    1. 仮想ハードディスクが破損しているか、Ubuntu の起動に失敗している可能性があります。
      1. 「Oracle VM VirtualBox マネージャー」を起動し、「Palmi-Dev」を選択し、ストレージの項を確認してください。
        • TechFAQ_01_01.bmp
        • SCSI ポート 0: Ubuntu_VBoxvmdk (通常,30.00GB) と表示されている場合は、Ubuntu の起動に失敗している可能性があります。 プレビュー画面を確認してください。
          • プレビュー画面の背景が黒い場合はUbuntu の起動に失敗しています。表示アイコンをクリックしUbuntu のウインドを出して、エラーを確認してください。 
          • ほとんどの場合、Grub ブートローダーで停止しています(下の画像参照)ので、Grub ブートローダーの画面をクリックした後、「Enter」キーを押下してUbuntu のブートを行ってください。
            • TechFAQ_01_02.bmp
        • SCSI ポート 0: Ubuntu_VBoxvmdk(通常,30.00GB)と表示されていない、またはエラーメッセージが表示されている場合
          • Palmi-Dev上で右クリックし、「除去…」を実行し、削除してください。質問には、「すべてのファイルを削除」としてください。
          • 削除後、「コンパイル用 Oracle VM VirtualBoxが登録されていない。」を行ってください。

Back to Top

アプリケーション

1. アプリケーションからセンサー情報を取得することはできますか?

  • センサーから直接値を取得することはできませんが、現在、Palmi が頭を触れられたときにonPOTFluctuationCatch() が呼び出されます。
  • 詳しくは「API 仕様」のsetActionPOTFluctuation() と onPOTFluctuationCatch() の項を参照してください。

Back to Top

2. アプリケーションの終了処理は、どのように実装すればよいか教えてください

  • アプリケーションを終了する場合、終了方法に関わらず、必ずonFinalize() が実行されます。
  • 終了処理は、onFinalize() に記述してください。

Back to Top

3 アプリケーションの非常駐型と常駐型の使い分けがわかりません

  • 非常駐型しか作成できません。
  • 非常駐型は、呼ばれた時だけ、専有して動作します。Palmi に声をかけたときだけ動作するような場合に採用します。

Back to Top

4. アプリケーションの設定ファイル(conf.xml) 以外のファイルから情報を取得したい

  • Palmi はUbuntu で動作していますので、一般的なファイル操作で情報を読み込めます。
  • ただしユーザー権限によるアクセス制限を行っていますので、アクセス可能な場所は限定されています。
  • 読み込みたいファイルは、アプリケーションの設定ファイルと同じ場所に置いてください。

Back to Top

5. XML ファイルやini ファイルを読めますか?

  • 可能です。
  • XML ファイルの読み込みは、ライブラリ(libxml2 および POCO C++ Libraries)を用意していますので、これらのライブラリを使って、情報を読み込んでください。
  • ini ファイルの読み込みは、専用のライブラリを用意していません。通常のファイルとして読み込んでください。

Back to Top

6. サーボの温度を取得する方法を教えてください

  • getServoInfo(std::vector& servoInfos) で、サーボの温度を取得できます。
  • 詳細な温度が必要な場合は、SPC_SERVO_INFO の temperature を参照してください。
  • 温度が正常であるかチェックしたい場合は、SPC_SERVO_INFO の temperatureLevel を参照してください。

Back to Top

会話

1. 質問中(認識できないとき)、質問後(タイムアウトのとき)の発話を変更することはできますか?

  • できません。
  • 質問中の言葉を理解できないとき、質問の回答が聞き取れずタイムアウトしたとき、回答が理解できずリトライアウトしたときのメッセージは、変更することはできません。

Back to Top

2. 質問をさせたい

  • waitForAnswer()を使用します。
  • 本メソッドを使用することで、質問の発話と音声認識結果を取得することができます。

Back to Top

3. 質問した後の音声認識待ち時間を調整する方法はありますか?

  • 可能です。
  • setWaitForAnswerTimeOut() を使用します。
  • 何秒間待つかをメソッドの引数に指定します。
  • 質問のためのwaitForAnswer() を実行する前に、指定してください。

Back to Top

4. 質問中のモーションを変更することはできますか?

  • できません。
  • 質問中のモーションは自動で選択されます。
  • 質問中のモーションを変更したり、止めたりすることはできません。

Back to Top

5. いろいろなパターンの質問をしたい

  • 応答の種類によって、いくつかの waitForAnswer() を用意しています。
    • 「はい」「いいえ」
      • waitForAnswer(std::string sentence, SPC_ANSWER& answer)
    • 「はい」「いいえ」+「指定した回答」
      • waitForAnswer(std::string sentence, std::vector yesWords, std::vector noWords, std::vector cancelWords, SPC_ANSWER& answer)
      • 例. Q:「伝えましょうか?」→ A:「はい」(Yes)「いいえ」(No)「オッケー」(Yes)
    • 「はい」「いいえ」+「指定した回答(語尾変換のパターンを指定)」
      • waitForAnswer(std::string sentence, std::vector conjInfo, std::vector usualAnswer, SPC_ANSWER& answer)
      • 例. Q:「伝えましょうか?」→ A:「はい」(Yes)「いいえ」(No)「伝えて」(Yes)「伝えないで」(No)
    • 「指定した回答(応答する回答の候補をあらかじめ指定)」
      • waitForAnswer(std::string sentence, std::vector answerWords, SPC_ANSWER& answer, std::string& recogWord, int& recogIndex)
      • 例. Q:「すきな果物はなんですか?」→ A:「みかん」「りんご」「バナナ」
    • 「指定した回答(応答する回答の候補をあらかじめ指定)」に対して、正解/不正解で反応する
      • waitForAnswer(std::string sentence, std::vector trueWords, std::vector falseWords, SPC_ANSWER& answer, std::string& recogWord, int& recogIndex)
      • 例. Q:「丸いものの名前を言ってください?」→ A:「みかん」(true)「ボール」(true)「サイコロ」(false)「ビル」(false)
    • 「任意の回答」
      • waitForAnswer(std::string sentence, SPC_ANSWER& answer, std::string& recog)
      • 例. Q:「すきな果物はなんですか?」→ A:「みかん」「りんごとばなな」

Back to Top

6. 大きな声でしゃべらせたい

  • 以下の方法があります。
  • 全体の音量を操作する場合
    • setVolume()
  • 特定の言葉や文の音量を操作する場合
    • <sapieVS_volume volume="xxx">発話内容</sapieVS_volume>
    • ※xxxはボリュームのパーセンテージ

Back to Top

スティップリングレンズ

1. スティップリングレンズの変更方法を教えてください

  • ・自分で作ったパターンを表示する
  •  以下の手順で開発します。
  •  (1) スティップリングレンズパターンファイルの作成
    • 「Palmi Application Development Add-on Kit for Visual Studio」でスティップリングレンズパターンファイルを作成します。
    • 詳細は、「Palmi Application Development Add-on Kit for Visual Studio ユーザーズガイド」を参照してください。
  •  (2) 表示処理の記述
    • プログラムのソースコードに、以下の記述を行ってください。
    • startLED("/usr/spcuser/etc/apl/プログラム実行ファイル名/スティップリングレンズパターンファイル名");
    • ※プログラム実行ファイル名は、ソースコードをビルドして作成されたファイル名です。
    • ※スティップリングレンズパターンファイル名は、(1)で作成したファイル名です。
  • ・自分で作ったパターンの表示をやめる
    • プログラムのソースコードに、以下の記述を行ってください。
    • stopLED();
  • ※スティップリングレンズの図柄(もよう)のことを、LEDパターンといいます。

Back to Top

2. スティップリングレンズはアニメーションすることはできますか?

  • 可能です。
  • 表示したいLED データファイルを用意し、以下のようにstartLED を使用してください。
  • ※LED ファイルのパスは例です。アプリケーション毎のファイルパスを指定してください。
    • std::vector vLEDPath;
    • std::string dirPath = getDataDirPath();
    • vLEDPath.push_back(dirPath + "/1.led");
    • vLEDPath.push_back(dirPath + "/2.led");
    • vLEDPath.push_back(dirPath + "/3.led");
    • // LEDの連続表示
    • // この例では1000msec(1秒)毎に表示を切り替えます。
    • startLED(vLEDPath, 1000);

Back to Top

3. スティップリングレンズ が元にもどらない

  • スティップリングレンズの変更に、startLED(std::vector vLEDPath, longinterval) を使った場合、明示的に戻さなければいけません。
  • スティップリングレンズを戻したいタイミングでstopLED() を実行してください。

Back to Top

画像認識

1. Palmi はどのように画像認識をしているのでしょうか?

  • 画像認識プログラムは公開しておりません。アプリケーションには画像を取得する以下のAPIを提供しています。
  • takePicture()

Back to Top

2. 今、目の前にいる人の名前を知りたい

  • 顔を認識をしたタイミングで、onFaceCatch(std::string name) がコールされます。
  • 認識した顔が知っている人だった場合は、引数のname に全角カタカナで名前が設定されています。

Back to Top

モーション

1. モーションを実行するときに、トルクの制御を行う方法がわかりません

  • トルクの制御は、モーション実行時に自動的におこなわれますので、意識的に制御する必要はありません。

Back to Top

2.作成したモーションが動かない

  • モーションファイルが間違っていないかを確認するために、Palmiモーションエディターの「Palmiモーションファイルを開く」から、作成したモーションファイルを再生してみてください。
  • また、プログラムで指定したモーションのファイルパスが間違っていないかを確認してください。

Back to Top

3. モーションを作成したが、実行すると上半身しか動かない

  • Palmi モーションエディターで、作成したポーズ情報の「全身」にチェックが入っているか確認してください。

Back to Top

4. モーションを動かしたいのですが、勝手に頭が動いてしまいます

  • SPC が起動しても、コミュニケーションを継続するため、頭部はシステムソフトウェアによって自動制御されています。
  • startNeckControl() をコールすることで、頭部の自動制御は停止することができます。
  • stopNeckControl() で頭部の自動制御を再開します。

Back to Top

5. モーションファイル実行の要求がエラーになる

  1. オーバーヒート状態もしくは、低電圧状態ではないですか?
    • getInvalidModeStatus() によりチェックしてください。
  2. 一日あたりのトルク操作上限回数に達していませんか?
    • getInvalidModeStatus() によりチェックしてください。
  3. アクチュエーターに故障はありませんか?
    • isServoConnection() によりチェックしてください。
  4. 姿勢はモーション可能な姿勢になっていますか?
    • getPoseStatus() によりチェックしてください。
  5. モーションファイルのパスは合っていますか?
    • アプリケーションに必要なファイルが保存されているディレクトリは、getDataDirPath() により取得できます。

Back to Top

6. 腕や首動作の要求がエラーになる

  1. オーバーヒート状態もしくは、低電圧状態ではないですか?
    • getInvalidModeStatus()によりチェックしてください。
  2. アクチュエーターに故障はありませんか?
    • isServoConnection()によりチェックしてください。
  3. 動作要求パラメータは異常ではありませんか?
    • 各アクチュエーターの限界駆動角度は、Palmi Motion Editor のオンラインマニュアルにより確認してください。

Back to Top

7. 歩く要求がエラーになる

  1. 姿勢はリラックスポジションもしくは、立ち姿勢になっていますか?
    • getPoseStatus()によりチェックしてください。
  2. 背中にACアダプターが接続されていませんか?
    • ACアダプターが接続されていると、Palmiは歩くことができません。getBatteryStatus()によりチェックしてください。
  3. 歩行ができない状態(バックパネルのSW2ランプが点灯している)ではありませんか?
    • getWalkingMode()によりチェックしてください。
  4. アクチュエーターに故障はありませんか?
    • isServoConnection()によりチェックしてください。
  5. 一日あたりの限界歩数に達していませんか?
    • Palmiには一日あたりの歩数に限界があります。0時を過ぎて起動すると、限界歩数がリセットされます。
  6. 一日あたりのトルク操作上限回数に達していませんか?
    • getInvalidModeStatus()によりチェックしてください。

Back to Top

8.モーションと発話を同時に実行したいのですが、方法を教えてください

  • startMotion() を使用します。
  • 2つ目の引数に、spc::SPC_SYNCMOTION_PARAM 型の変数を用意し、
  • spc::SPC_SYNCMOTION_PARAM::type に SPC_SYNCMOTION_SPEAK を、
  • spc::SPC_SYNCMOTION_PARAM::param に発話させる文字列を指定してください。
  • // モーションと発話を同時に行う
  • spc::SPC_SYNCMOTION_PARAM syncParam;
  • syncParam.type = SPC_SYNCMOTION_SPEAK;
  • syncParam.param = "モーションと同時に発話します。"
  • makeMotion("./sample.act", // モーションファイル名を指定する
  • syncParam // モーションと同時に行う動作のパラメータ
  • );

Back to Top

9. しゃべるときに腕を動かしたくない

  • speak() の第2引数にspc::SPC_SPEAK_NOT_MOVE_ARM を指定してください。

Back to Top

10. モーションを実行したあとに、姿勢を戻したくない

  • startMotion() の呼び出し後、sitDown() を呼び出してください。Palmi がリラックスポジションになります。

Back to Top

11. アプリケーションを開発していますが、ログが出力されません

  • ログを出力するとき、SPC_LOG_DEBUG() を使用していませんか?
  • SPCでは、出力するログのレベルをsetLogLevel() で指定し、指定したレベルと同じか、それより優先度が高いレベルのログが出力されます。
  • // ログレベルを設定する
  • setLogLevel(spc::SPC_LOG_LEVEL_INFO); // ログレベルをSPC_LOG_LEVEL_INFOに設定
  • SPC_LOG_ERROR("ERRORレベルのログです"); // このログは出力される
  • SPC_LOG_INFO("INFOレベルのログです"); // このログは出力される
  • SPC_LOG_DEBUG("DEBUGレベルのログです"); // このログは出力されない
  • setLogLevel() を指定しない場合は、ログレベルはSPC_LOG_LEVEL_INFOに設定されます。
  • この場合、上記の例の通り、SPC_LOG_DEBUG() で定義したログは、出力されません。
  • ログレベルを正しく設定するか、ログ出力関数を変更してください。

Back to Top

12. Palmi の顔を触って「中断」する場合に任意の動作をさせることは可能ですか?

  • 可能です。
  • アプリケーションの起動時にsetActionPSDFluctuation() の第一引数にSPC_NOTYFY_AND_CANCEL_PSD_FLUCTUATION を設定し、呼び出してください。
  • 中断時にonPSDFluctuationCatch() が呼び出されます。
  • 特定の動作をさせたい場合は onPSDFluctuationCatch() に記述してください。
  • ただし、この場合、終了処理が行われなくなります。
  • onPOTFluctuationCatch() の最後に終了処理を記述してください。

Back to Top

13. Palmiが真正面を向いた時の、首の角度を教えてください

  • 以下の通りです。
  • 立っている時
    • 水平方向角度:0度
    • 垂直方向角度:0度
  • リラックスポジション(座っている)時
    • 水平方向角度:0度
    • 垂直方向角度:-13.5度

Back to Top

14. Palmi を座らせた状態で、首を一番下まで向かせたとき、Palmi は自分の足が見えますか?

  • 見えません。
  • 立った状態であっても、見えません。

Back to Top

15. 首を横に動かすと、少し上を向きます。どのくらいずれるのか、教えてください

  • Palmi は、リラックスポジション(座っている)の状態で、首を水平方向だけにを動かすと、0度の位置と±60度の位置では、およそ8度、垂直方向の角度に差がでます。
  • この差分は、水平方向の角度に比例しているので、首を水平に動かしたい場合は、差分を計算して縦の角度も合わせて、駆動させてください。
  • 立っている状態で、首を水平方向に動かした場合は、垂直方向の角度の差はありません。

Back to Top

ネットワーク

1. Palmi とパソコンで通信することはできますか?

  • 可能です。
  • Palmi はUbuntu で動作していますので、一般的なsocket 通信プログラムで通信できます。
  • ただし、アプリケーションの起動時は無線機能が無効になっているため、enableNetwork() で、無線機能を有効にする必要があります。
  • 無効にする場合は、disableNetwork() を呼び出してください。
  • 詳細は、「API仕様」を参照してください。

Back to Top

セットアップ

アプリケーション

会話

スティップリングレンズ

画像認識

モーション

ネットワーク