レッツ&ゴー! 音声認識を使ってミニ四駆を「声」で操作!(MKZ4“魔改造” iOS編)

マイ MKZ4

こんにちは。アプリケーションエンジニアの中村です。

MKZ4も発売してからしばらく経ちまして、買ってしばらく遊んだものの、ホコリを被っているお宅もあるのではないでしょうか。かくいう私もそうだったのですが、子供のころ見ていたミニ四駆のアニメで、声でミニ四駆を操っていたのを思い出しましたので、MKZ4とスマホアプリを使って再現を試みてみました。

まずはiPhoneアプリを作成してみましたので、ご紹介したいと思います。追ってAndroidでの作成方法も記事にしようと考えています。

また、「INTERNET Watch」、「AKIBA PC Hotline!」にてリレー形式で掲載している – 触れてみよう電子工作×IoT 第2回 IoTで「パンツァー・フォー!」 1/48重戦車タイガーIを改造してスマホで遠隔操作してみた<前編><後編> – でご紹介した、1/48戦車をコントロールするカスタマイズ方法も後日ご紹介します。

必要な機材、ソフトウェア

  • Mac (macOS 10.11.5以降が動作しているもの)
  • MKZ4を取り付けたミニ四駆
  • iPhone (iPhone 6 Plus, iPhone 7で動作確認。どちらもiOSバージョンは10.2.1。)
  • Xcode Version 8.2.1 (App Storeからインストール)
  • サンプルアプリのソースコード (GitHubからダウンロード)

iPhoneアプリはMacでXcodeを使って作成できます。最新のXcodeのバージョンは8.2.1で、macOS 10.11.5以降で動作しますので、このOSが動作するMacを使用します。(名前で言うと、OS X El Capitan v10.11.5以降や、macOS Sierraですね。)

iPhoneはモバイルデータ通信が有効になっている必要があります。音声認識には、インターネット接続が必要なのですが、iPhoneをMKZ4のWi-Fiに接続すると、Wi-Fiではインターネット接続できなくなってしまうためです。

もちろんMKZ4も必要です。まだお持ちでない場合は、作例を 文系新卒でもIoTに入門できるのか?! 改造ミニ四駆製作キット「MKZ4」に挑戦 でご紹介していますので、ご参照ください。

事前準備

Xcodeのインストール

  • XcodeをMacのApp Storeアプリからインストールします。App Storeを開いて、Xcodeを検索し、「入手」ボタンを押してインストールしてください。
    mkz4-mac-appstore_01
  • インストールが終わったら、「開く」ボタンをクリックして、Xcodeを起動します。Xcode and iOS SDK Licence Agreementに同意して次に進みます。
  • 「Welcome to Xcode」と表示されたら、Xcodeは準備完了です。

サンプルアプリのソースコードをダウンロード

  • https://github.com/cerevo/MKZ4_VoiceCommander_iOS を開きます。
  • 「Clone or download」ボタンを押し、開いたダイアログのDownload ZIPを選択してダウンロードします。
  • ダウンロードしたファイルをクリックして、展開します。これでソースコードの準備は完了です。

実行してみる

設定を修正する

  • ソースコードのフォルダ内にある VoiceCommander.xcodeproj をXcodeで開きます。
  • 下図を参考に設定を修正します。
  • (1)をクリックしてプロジェクトの設定を開きます。
  • (2)をクリックして、「PROJECT」と「TARGETS」を表示します。
  • (3)をクリックして、「VoiceCommander」を選択します。
  • (4)の「Add account」ボタンをクリック します。(表示されていない場合はスキップして6へ)
  • Apple IDを入力し、(5)の「Sign in」ボタンをクリックします。
    mkz4-ios-xcode_11
  • (6)のTeamのプルダウンメニューをクリックします。
  • (5)で入力したApple IDのPersonal Teamを選択します。(7)
    mkz4-ios-xcode_12
  • (8)のようになることを確認します。
  • iPhoneをMacにLightning – USBケーブルを使って接続します。(9)のようなステータスが表示されていたら、接続することで、解消すると思います。
    mkz4-ios-xcode_13
  • iPhoneの画面をみると、「このコンピュータを信頼しますか?」と確認されるので、信頼をタップします。
  • (10)のインストール先をクリックし、接続したiPhoneを選択します。(11)
    mkz4-ios-xcode_14
  • (9)の部分が更新され、(12)のようになれば完了です。
    mkz4-ios-xcode_15

iPhoneにインストールする

  • (1)のRunボタンをクリックします。
    mkz4-ios-xcode_16
  • 開発者モードを有効にしますか?と聞かれたら、Enableをクリックします。
    mkz4-ios-xcode_17
  • Processing symbol files というメッセージが表示されたら、OKをクリックし、しばらく(5分程度)待ってから、(1)のRunボタンを再度押して下さい。
    mkz4-ios-xcode_18
  • アプリを起動できないというメッセージが表示されたら、メッセージに従ってiPhoneを操作します。
    • iPhoneの設定アプリを開きます。
    • 一般をタップし、下の方にスクロールして、プロファイルとデバイス管理をタップします。
    • デベロッパAppセクションにご自分のApple IDが表示されていると思いますので、そちらをタップします。
    • 表示されたダイアログ内の「信頼」をタップします。
    • 再度、XcodeのRunボタンをクリックします。
      mkz4-ios-xcode_05

アプリを使ってみる

  • アプリが起動すると、音声認識へのアクセス許可を求められますので、同意します。
  • 音声認識を開始するボタンを押すと、今度はマイクへのアクセス許可を求められますので、こちらにも同意します。
  • 再度、音声認識を開始するボタンを押しながら、iPhoneに向かって何か言ってみます。言い終わったところでボタンを離すと、認識結果を表示します。下図では「スタート」と言ったのを認識しています。

    mkz4-ios-app_01_smkz4-ios-app_02_smkz4-ios-app_03_smkz4-ios-app_04_s

MKZ4の電源を入れる

  • 本アプリが想定しているMKZ4本体のプログラムは、製品の説明書の手順通り書き込むサンプルプログラムのままで、特にカスタマイズの必要はありません。もし、何かカスタマイズしていた場合は、以下のサンプルプログラムを書き込んでください。
  • すでにサンプルプログラムを書き込み済みの場合は、電源を入れて下さい。

iPhoneをMKZ4に接続して操作してみる

  • iPhoneのWi-Fi設定を開き、「MKZ4」のネットワークに接続します。
  • 下記のコマンド表を参考に、キーワードを言って、操作します。
コマンド キーワード
前進 進め、行け、いけ、スタート
後退 後退、下がれ
左折
右折
停止 止まれ、ストップ

実装のポイント

以上で、動かしてみることはできるようになったかと思います。以下では、実装について説明したいと思います。

  • ソースコードの構成
  • App Transport Security (ATS) の設定
  • マイクと音声認識を有効にする

ソースコードの構成

Xcodeのナビゲーターエリアを見ながら、主要なファイルについて説明します。
mkz4-ios-xcode_06

  • ViewController.swift
    • アプリ起動後に表示される、メインの画面の動作が書かれています。
    • 画面の初期化、音声認識の初期化、音声認識したキーワードの処理などを行っています。
    • 音声認識のキーワードとコマンドの対応を編集したい場合は、こちらを修正してみて下さい。
  • Mkz4ApiCaller.swift
    • MKZ4へコマンドを送信する処理が書かれています。
    • ViewController.swiftから使っています。
  • Main.storyboard
    • メイン画面の要素の配置を行っています。
    • ViewController.swiftから、このファイル内のボタンやテキストを参照しています。
  • Info.plist
    • アプリの設定が書かれています。
    • 後述の、App Transport Security (ATS) の設定や、マイクと音声認識を有効にする設定については、このファイルに保存します。
  • Localizable.strings
    • 多言語対応の辞書です。
    • ViewController.swiftから、後述のLocalizedStringという関数を使って利用しています。
  • LocalizedString.swift
    • NSLocalizedStringという、多言語化辞書から文言を取得するための関数を、簡単に使えるようにするLocalizedStringという関数が書かれています。

App Transport Security (ATS) の設定

iPhoneからMKZ4にコマンドを送信するときに、HTTPで通信を行っています。ATSの設定がデフォルトのままだと、HTTPで通信できないため、設定を変更しています。Info.plist を開くと、「App Transport Security Settings」に「NSAllowsLocalNetworking = YES」という設定を行っているのが確認できると思います。こうすることで、同じネットワークにつながっているiPhoneとMKZ4でHTTPでの通信ができるようになります。
mkz4-ios-xcode_07

参考: NSAppTransportSecurity

マイクと音声認識を有効にする

iPhoneのマイクや音声認識をアプリから利用するには、ユーザーに許可を求める必要があります。許可を求めるダイアログを表示する際に、理由を表示する必要があり、理由を設定していない場合は、許可を求めようとしたタイミングでアプリが終了してしまいます。Info.plist を開くと、マイクは「Privacy – Microphone Usage Description」、音声認識は「Privacy – Speech Recognition Usage Description」に設定していることが確認できると思います。
mkz4-ios-xcode_08

参考: NSMicrophoneUsageDescription, NSSpeechRecognitionUsageDescription

終わりに

いかがでしたでしょうか。MKZ4、iPhone、Mac、Xcodeと、準備が少し大変かもしれませんが、一度準備が整えば、自分好みに修正していろいろと遊べると思います。今回の構成では、音声認識の結果を得るまでと、MKZ4にコマンドを送信終わるまでの時間が必要なため、どうしても応答性が悪く、残念に思うこともあるかもしれません。そのあたりは、今後の技術の発展が解決してくれることを祈りつつ、まずは音声で操作することを楽しんでいただければ幸いです。