追記

日々をアレコレ

-広告-


2017年03月22日 この日を編集

Arduino IDE for Visual Studio

Arduinoの純正開発環境であるArduino IDEはお手軽な分だけ機能が若干弱い。IntelliSenseに慣れきったダメダメな僕としては、いちいちリファレンスを調べながら開発するのが面倒だなーとか思っていたりする。けど、最近になって、Arduino IDE for Visual Studio なんていう素敵なVisual Studioの拡張機能があることを知ったので使ってみた。インストールは簡単で、Visual Studioのメニュー「ツール > 拡張機能と更新プログラム」から、「Online」を選択してから「Arduino」などで検索すると出てくるので、インストールすればOK。ただし、標準で入ってくる対応ボードが現在のところ、Genuino101とかESP8266系のものだけなので、それ以外を使う場合はさらに設定が必要。


2017年03月07日 この日を編集

SRGSを使った音声認識の定義をする

音声コマンドでBトレインショーティーを走らせる では、SRGS文法を使って制約を作り、特定の言葉に対する非同期な音声認識するという方法で音声コマンドを実現させている。OSだったり、利用環境だったりで利用できる認識できる言語が決まっているようで、僕が使っている環境だと日本語のWindowsデスクトップやモバイルだと日本語だけが、Raspberry Pi向けのWindows IoT Coreだと英語のみが認識可能っぽい。その辺に気をつけながらまずは、SRGS文法を使った制約を定義したファイルは次のように定義するといいらしい。

<?xml version="1.0" encoding="utf-8" ?>
<grammar
  xmlns="http://www.w3.org/2001/06/grammar"
  version="1.0"
  xml:lang="ja-JP"
  root="commands"
  tag-format="semantics/1.0">
  <rule id="commands">
    <one-of>
      <item>
        <one-of>
          <item>進め</item>
          <item>行け</item>
        </one-of>
        <tag> out.cmd="Forward"; </tag>
      </item>
      <item>
        戻れ <tag> out.cmd="Backward"; </tag>
      </item>
      <item>
        止まれ <tag> out.cmd="Stop"; </tag>
      </item>
    </one-of>
  </rule>
</grammar>
  1. <grammar> タグの中の lang属性は利用する言語に応じて変えること。今回の場合は日本語なので「ja-JP」を指定。
  2. <grammar> タグの中の root属性は認識を開始する制約について指定する。今回は単純なコマンドに使うので、一つだけしか定義してないけど、「玄関/廊下/洗面所/台所」「の」「ライト/換気扇」「を」「点ける/消す」みたいな感じで、複雑なパターンを定義することもできるらしい。 。
  3. <rule> タグを使ってコマンドを定義。

    1. 上の例では、前進、後退、停止の3パターンのコマンドを発行するために、それぞれが該当する要素を<item>タグを3つ定義し、<one-of> タグでまとめることで、いずれかを認識させている。
    2. それぞれの <item> には <tag> で認識した場合に発生するイベントで受け取るためのデータを定義している。今回の場合、cmd要素に、ForwardBackwordStopがデータして渡される。
    3. さらに、前進の要素については、さらに <one-of> タグを使って、「進め」と「行け」を両方同じコマンドとして認識するように定義。

この定義ファイルを \Grammar\Command.xml に保存した場合、音声認識を開始するには次のようなコードを実行すればよい。

var recognizer = new SpeechRecognizer();
recoginizer.ContinuousRecognitionSession.ResultGenerated += (session, args) =>
{
    // 制約を満たした認識をすると、args.Result.SemanticInterpretation.Propertiesは"cmd"をキーとして持つ
    if (!args.Result.SemanticInterpretation.Properties.ContainsKey("cmd")) return;

    // 最初に認識したコマンドを取得
    var command = args.Result.SemanticInterpretation.Properties["cmd"][0];

   // commandに応じた処理を書いていく
};

var grammerFile = await Package.Current.InstalledLocation.GetFileAsync("Grammar\Command.xml");

var grammarConstraint = new SpeechRecognitionGrammarFileConstraint(grammerFile);

recognizer.Constraints.Add(grammarConstraint);

var result = await recognizer.CompileConstraintsAsync();

var isStarted= result.Status == SpeechRecognitionResultStatus.Success;

if (isStarted)
{
    // 非同期な音声認識を開始
    await _recognizer.ContinuousRecognitionSession.StartAsync();
}

本当はもう少しエラー処理やらなんやら書いておく必要があるけど、そのへんはまた別途。


2017年03月06日 この日を編集

デモ用PCにCANPCを買ってみた

BトレインをBLE経由で操作するWindowsアプリのデモ用に CANPCを買ってみた。スティックPCを使うこととかいろいろと考えたのだけれど、カメラやスピーカーだけでなく、バッテリーもついているので展示で使うには便利っぽい上に、とりあえず店舗に見に行くかーとドスパラに言ってみたら26800円(税別)のところを店舗限定割引で21000円(税別)だったので思い切って買ってみた。

けど、買った当日にセットアップ中にシャットダウンしてから一切起動しなくなる自体に。使い始める前に初期不良のために修理に出したものが今日返ってきたので早速セットアップ。特に余計なものがインストールされているわけではないので動作が軽い。開発環境とかがっつりと動かすわけじゃないので、メモリ4GBでも快適。ただ、ストレージがすでに半分以上使っているので、そのへんだけ気をつけながら使っていく必要はあるかも。

デモ用に別に買っておいた モバイルモニター もバッテリーがあるので短い時間であれば、電源なしでもデモできるのはいいかもしれない。

一方でドスパラでは、新生活応援セール2017 とやらが始まっていて、今月中は18500円(税別)とさらにお安くなっているという運の悪さ。買ってから約10日間ある程度使っていたのなら、まだ諦めがつくのだけれど、使わないまま修理に出してる間に値下げってなんという魔の悪さ。こういう運の悪さは昔から。なので、この日記経由で買うことで僕を慰めて欲しい(笑)。

Diginnos DG-CANPC (ボトル型パソコン Windows 10)

サードウェーブデジノス
¥ 22,140

Diginnos DG-NP09D 8.9インチ WUXGA(1920x1200) バッテリー内蔵 モバイルモニター

サードウェーブデジノス
¥ 19,980

Tags: pc

CANPCをリモートデバッグできるように設定

デモに使うアプリを開発用PCからデバッグできるようにするためにした設定。

  1. 開発者モードに変更

    デバイスを開発用に有効にする - UWP app developer | Microsoft Docs を参考にWindowsのモードを開発者モードに変更。

    1. 設定アプリを開く
    2. 「更新とセキュリティ」を選択
    3. 「開発者向け」を選択
    4. 「開発者モード」を選択
  2. Remote tools for Visual Studio 2015のインストール

    開発用PCのVisual Studioからリモートデバッグをするためにアプリをインストールする。実は、インストーラの取得に時間がかかったり。いろんな説明ページやMSDN内のページからのリンクをたどるとリンク切れだったりすることが多かった。リモート コンピューターでの Windows ストア アプリの実行 このページ中ほどにある「リモートツールのインストール」にある「Visual Studio 2015」の「x64」向けのインストーラを今回はダウンロード。対象の環境に合わせてインストールすればOKで、32bitなものならx86を選択すること。また、間違えてVisual Studio 2013向けのものをインストールした場合、「リモートデバッガの構成」設定が初回起動時には発生しないので注意。その場合は、アンイストール後に一度再起動する必要があるっぽい。

    一通り設定が終わると、開発用PCのVisual Studioでターゲットデバイスを「リモートコンピュータ」に設定すると、リモートマシンの選択画面が出てきて自動検索でターゲットのPC名を選択すればOK。実際に配置する際にはターゲットコンピュータで利用するユーザーアカウントとパスワードの入力が求められるので、入力すればあとは普通にVisual Studioのデバッグが可能。


2017年01月05日 この日を編集

シリアルコントロールモータードライバを使ってみた

乾電池6本という比較的大きめの電圧でモーターをmbedのBLE経由で駆動させたいということで、シリアル通信でモーター駆動できるモータードライバを探していたら、 SparkFunのシリアルコントロールモータードライバ を発見。これまでよく使っていた、DRV8830を使ったI2Cモータードライバモジュール と比べると性能、機能として以下の部分が優れてる感じ。

  • 動作電圧が11V(最大定格は12V)まで。
  • モーター接続が2チャンネルあって、1チャンネルあたり瞬間最大1.5A(定常1.2A)まで対応の上、ブリッジすることで1台なら2倍の電流に対応可。
  • 通信方法はTTLなUART(9600/57600/115200)、I2C、SPIが選択可。
  • I2Cのアドレスは10パターン選択可。
  • 1台をマスターとして上位のCPUと通信し、最大16台をスレーブとして接続することで最大34台まで同時に制御可能。
  • 入力電源から3.3Vを出力できるので、マイコンの電源も場合によっては供給可能。

実際に使ってみると、少し面倒な感じになってたのでメモ。詳細はSerial Controlled Motor Driver Hookup Guide - learn.sparkfun.com を参考のこと。

  1. Hardware Overview にある通り、通信の設定は基板裏のジャンパで設定する。デフォルトは9600bpsのUARTになっている。商品ページにある「2Cアドレスには、デフォルトでUARTのbaudsが利用可能」という一文がよくわからないなーと思ったら、アドレス設定というよりは、通信方法の設定のデフォルトがUARTで9600bpsになってるということらしい。
  2. I2Cで使う場合、プルアップ抵抗を自分で実装、あるいは、裏面のジャンパをUser向けのジャンパを閉じる必要がある。
  3. I2C(多分、SPIでも)で使う場合、初期化処理が時間かかる場合がある。利用する流れは次の通り。

    1. IDを読み込んで、正しい値(0xA9)が返ってくるのを待つ。
    2. コマンド受付可になるまで待つ。
    3. ブリッジや回転方向などの設定をする。
    4. モーターの各チャンネルを有効にする。

    どうも、2のところで時間がかかる場合があるっぽい。その辺、は仕方ないのかなーと思ってとりあえず深くは調べてない。

面倒なところがあるとはいっても、一度操作になれると結構便利に使えそうな感じではあるので、ネタによっては使っていきたいものではある。


2016年12月06日 この日を編集

GR-CITRUSで.NET MicroFramework

GR-CITRUS を.NET MicroFramework対応させる手順メモ。基本的にはNETMF for RXのドキュメント(PDF) のBuild stepsに書いてある手順に従うのだけれど、何点か違うことも併せて書いておく。

  1. GCCのインストール

    GR-CITRUSのmrubyソースをmakeする方法 - Qiita にある GNU Toolsサイトへの登録 から rx631用のrx-elf-gccのセットアップ までを参考にGNURXv1403-ELFをインストールする。以下、インストール先は C:\cross\KPIT\GNURXv14.03-ELF とする。

  2. Visual Studioのインストール

    Visual Studio 2012 Expressが推奨されているけど、僕はVisual Studio 2013 Community Editionでファームのビルドをした。Visual Studio 2015でもできるのかもしれないけど、インストールした内容によってはできないかもい。何が必要なのかは未確認。

  3. .NET MicroFramework SDKのインストール

    .NET Micro Framework - Download: SDK v4.3 (QFE2-RTM) から FULL ZIP FIle of all SDK Filesをダウンロードして、SDKと利用するVisual Studioに合わせた拡張機能をインストール。僕は Visual Studio 2015の拡張機能を使った。今回、作るファームは .NET MicroFramework v4.3なので、.NET Micro Framework 4.4 リリース – デバイスとITの架け橋 を参考に、拡張機能の更新をしないように注意が必要。

  4. .NET MicroFramework Porting Kitのインストール

    .NET Micro Framework - Download: .NET MF 4.3 RTM (QFE1) から Porting Kit 4.3 (RTM QFE1) をダウンロードしてインストールする。インストール先は、C:\MicroFrameworkPK_v4_3とする。

  5. NETMF for RXのソースをダウンロード

    NETMF for RX - Source Code から、ファームのソースをクローンするなり、ZIPでダウンロードして展開して、C:\MicroFrameworkPK_v4_3以下にコピーする。

  6. I2Cを使うためのソースファイルの書き換えをする。

    GR-SAKURAではI2Cを使うポートがADの4番、5番を使っているのけど、GR-CITRUSには出ていないのでそのままでは使えないので、C:\MicroFrameworkPK_v4_3\DeviceCode\Targets\Native\RX631\DeviceCode\RX631_I2CSW\RX631_I2CSW.cpp の26,27行目を次のように書き換える。

    #define SCLPIN RX63N_GPIO::P42
    #define SDAPIN RX63N_GPIO::P43
    

    こうすると、GR-CITRUSの16,17番ピンがSCL、SDAになる。

  7. C:\MicroFrameworkPK_v4_3\setenv_base.cmdを書き換える(VS2013/VS2015を使う場合)

    標準のsetenv_base.cmdはVS2012以前を使う設定になっているので、VS2013/VS2015を使う場合は、82~83行目を書き換える。VS2013の場合は、

      IF NOT "%VS120COMNTOOLS%" == "" (
          CALL "%VS120COMNTOOLS%vsvars32.bat"
    

    VS2015の場合は、

      IF NOT "%VS140COMNTOOLS%" == "" (
          CALL "%VS140COMNTOOLS%vsvars32.bat"
    
  8. ファームをビルドする。

    1. コマンドプロンプトを開く。
    2. C:\MicroFrameworkPK_v4_3\に移動する。
    3. setenv_base.cmd GCC 4.8-GNURX_v14.03 C:\cross\KPIT\GNURXv14.03-ELF\rx-elf\rx\elf RX を実行する。
    4. set PATH=%PATH%;C:\cross\KPIT\GNURXv14.03-ELF\rx-elf\rx-elf\bin を実行する。
    5. msbuild.exe build.dirproj を実行して、ポーティングキットツールを作成する。

      エラーが幾つか発生してもそのまま進んでOK。僕の環境では、VS2015を使う設定でビルドすると300個以上のエラーが発生して、それでは続くファームのビルドも失敗するので注意。

    6. C:\MicroFrameworkPK_v4_3\Solutions\GR_SAKURAに移動する。

    7. msbuild.exe dotNetMF.proj /t:build /p:flavor=release;memory=flash を実行して、ファームのビルドをする。
  9. ファームをGR-CITRUSに書き込む。

    ファームのビルドに成功すると、C:\MicroFrameworkPK_v4_3\BuildOutput\RX63N\GCC4.8\le\FLASH\release\GR_SAKURA\binにtinyclrnbl.mot ができているので、それをGR-CITRUSに書き込む。詳しい方法は、GR-CITRUSにmotファイルを書き込む方法 - Qiita を参考に。

  10. ドライバのインストール

    GR SAKURAで.NET Micro Frameworkを使おう – デバイスとITの架け橋 を参考にUSBドライバをインストールする。

これで、GR-CITRUSで.NET MicroFrameworkを使うことができる。


-広告-

追記