2017年9月25日月曜日

TinkerBoardでリモートデスクトップxrdpを使う

RaspberryPi感覚でインストールして使ってみると
ログイン画面は出てくるけどその後は真っ青で何も進まない経験をしたのではないでしょうか。

それは必要なパッケージが入ってないだけで、解決する方法があります。

以下のコマンドを入力してくださいw

$ sudo apt-get install xorgxrdp xrdp -y

はい、これでおk

Tinkerboardでorable jdk8をインストールする。

openjdkがとても遅いのでOracleのJDKをインストールしました。

やっぱ本家は早いね!
JAVA使いならぜひインストールした方がいいと思います。

インストールの方法ですが、自前で設定する感じです。(めんどくさいですが、、

Step1ダウンロード
http://www.oracle.com/technetwork/java/javase/downloads/index.html

上記サイトからArm-32bit版のSDKをダウンロードしてください。


Step2.解凍する
$ tar zxvf  dk-8u144-linux-arm32-vfp-hflt.tar.gz


Step3.フォルダ移動
$ sudo mv ./jdk1.8.0_144 /usr/lib/jvm/jdk1.8.0


Step4.設定する
$ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.8.0/bin/java" 1
$ sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.8.0/bin/javac" 1
$ sudo update-alternatives --config java

自分で打ちこんだ項目が一番下にあるので番号で指定する。


Step5.確認
$ java --version

これで1.8.0ってバージョンが表示されていればおk。

お疲れ様です。

2017年9月24日日曜日

TinkerBoardを買ってみた

総論からすると、
LXDEデスクトップの仕上がりが
RaspberryPiみたいなPIXEL風に見た目良くなるのを待ってもいいのかなー。

ラズパイのデスクトップを見てしまうと、あれ以上のクウォリディーが欲しくなってしまいますw

インストールの仕方ですが
準備編
・電源は最低5V3A必須。
・初期設定はHDMIディスプレイ上で行う。
・SSH、Vimは最初からインストール済みなので安心してOK

設定編
https://tinkerboarding.co.uk/forum/thread-69.html

①上記サイトからOSイメージをダウンロードしてSDカードにイメージ展開する。
②Wifiとかネットワークの設定を済ませたら
 $ sudo Passwd linaro でパスワード設定。

③別PCからSSHログイン。
 ユーザ名はlinaro

これでいけました。(V2.0.1時点)

今後のアップデートでRpi用タッチスクリーンやカメラに対応するそうです。

試しに繋げてみたけど動かなかっただけで、壊れはしませんでしたw

2017年9月22日金曜日

[Rpi]PlantUMLServerをインストールする。

PlantUML公式ページにWEBで出力してくれるけど、やっぱ自前サーバーでやりたいって人向けの情報です。
設定は簡単だけど、どこにも載ってないので備忘録を残しておきます。

$ sudo apt-get install -y graphviz maven
$ git clone https://github.com/plantuml/plantuml-server
$ vim ~/.bashrc
---
$GRAPHVIZ_DOT="/usr/bin/dot"
---
最後の行に挿入

$ source ~/.bashrc
$ mvn jetty:run -Djetty.port=1001

http://address:1001/

最初エラー画面が出るけど、下のURLをクリックすると表示する。

2017年9月11日月曜日

[UWP]2017年版UWPアプリを作る時に覚えておくこと

.Net Core 2.0や .Net standard 2.0が登場して間もない時期ですが、
ようやく下位互換になった!
というか
ようやく置いてけぼり感を食らっていたユーザーに光が差し込まれました。

UWPアプリで書くTaskや新しいインターフェイスを書かずとも

今まで通りの感覚でプログラムが書けます!

( ˘ω˘ )

2017年秋から本格的にUWPアプリを書き始めてみようかなと思いました。

まず今までと違うところが1つあって、
無い!って思ったライブラリ関係は
全部Nugetで追加していかないといけません。

その代名詞になるのが、シリアルポートでしょうか。

それにUWPのUIって全部XAMLで書かないといけないのかって
悩ましい問題も実はテンプレート関係が揃ってるライブラリもNugetにあります。

今までモノシックに出来上がったライブラリが
分割できる特殊パーツはNugetにしようって流れですね。

Nugetに何があるか分からないけど 視点を変えて、

無いものはまずWEBでNugetライブラリ検索しよう

という新しいスタイルをもって開発した方がよさそうです。

まずは簡単に必要最小限に必要な知識としては、
プログラムを全部ライブラリ化して、
UI部分をXamarinやWinform、UWPなどいろんなプラットフォームに合わせて作成する感じですね。

ということで、

ライブラリは.Net Standard 2.0で作る
 これ重要。



ついでにプライベートレポジトリを作っておくと便利なので、

Nugetパッケージを作る
・コマンドラインを開き、.slnファイルのある場所でdotnet pack



ハード制御したいよっという場合は、

シリアルポートを使う
・nugetで Ststem.IO.Portsをインストール



UWPアプリってXAMLタグ打つの大変、、ハンバーガーメニューを一発で使いたい場合は

UWPの画面回りテンプレートを使う
・nuggetで Microsoft.Toolkit.Uwpをインストール  
 サンプルがWEBストアにあって、
 UWP Community Toolkit Sample Appをインストール。
 Microsoft.Toolkit、Microsoft.Toolkit.Servicesこの辺りも使えそう。


ひとまずはこれを知っておけとなんとかなりそうです。

2017年8月8日火曜日

Windows版Tensorflowを使う

以前、RaspberryPi3でTensorflow、Kerasをインストールして機械学習を楽しんでいました。
が、学習には相当量なCPUパワーが必要で、Rpi3で開発は現実的ではない事が判明しました。最初から分かっていた事なのですが、Rpi3より圧倒的に高性能なWindowsPCで行う事にしました。

〇Bash on Windowsにインストール始める前にパスワードを忘れてしまったら、、、
> lxrun.exe /setdefaultuser root
> bash
$ passwd ユーザー名
パスワードを入力してから
$ exit
> lxrun.exe /setdefaultuser ユーザー名
> bash
でOKです。

ここからスタート
$ git clone https://github.com/yyuu/pyenv ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ exit
> bash

一回入りなおしてから、

$ pyenv install --list
anaconda3の最新バージョンを探してインストール
$ pyenv install anaconda3-4.4.0
$ pyenv global anaconda3-4.4.0
$ pyenv refresh
ここからは思いのままに欲しいパッケージを入れる。
$ conda install -c conda-forge tensorflow
$ conda install -c conda-forge keras
$ conda install -c conda-forge jupyter
$ conda install -c conda-forge scikit-learn
$ conda install -c conda-forge pandas
$ conda install -c conda-forge numpy
$ conda install -c conda-forge scipy
$ conda install -c conda-forge ipython


〇Windowsのローカルにインストール
https://repo.continuum.io/archive/.winzip/Anaconda2-4.4.0-Windows-x86_64.zip
をダウンロードしてインストール。
スタートメニューからAnaconda Promptを起動する。
$ pip install tensorflow
$ pip install keras

雑記:
 pipやconda、pyenvと統一感があまりないですが、目的は達成しているのでよしとします。

参考URL:
http://qiita.com/toyolab/items/bccd03d4cb7795112ab6
http://qiita.com/samacoba/items/207f2650ee60fe1de25a
http://qiita.com/y__sama/items/5b62d31cb7e6ed50f02c

2017年8月6日日曜日

Kerasサンプルを実行して動きを眺めてみる。


1.とりあえずサンプルをダウンロードする。

$ wget https://github.com/fchollet/keras/archive/master.zip
$ mv master.zip keras.zip
$ unzip keras.zip
$ cd keras/example

2.サンプルの内容を確認する。

Google翻訳をそのままコピペ。

数えてみると31個もサンプルがあるので、意味はわからないけどまずは機械学習を触ってみてサンプルをいじって遊ぶ程度なら沢山あればなんでもOKですね。
中身なんも分かってないですけど片っ端から動かしてみます。



 Implementation of sequence to sequence learning for performing addition of two numbers (as strings).
 2つの数値の加算を行うためのシーケンス学習へのシーケンスの実装(文字列として)。
 →実行すると、Q,T,赤い□の右隣に数字が出てくる。
  Qが足し算、Tが計算結果、赤い□はなんだろうか。
  正解率は52%あたりで中止した。

 Demonstrates how to write custom layers for Keras.
 Kerasのカスタムレイヤーを作成する方法を示します。
 →6万サンプル、1万テスト、エポック40、正解率は96%
  カスタムレイヤーの作成例らしいのであとで中身を見ようと思います。  

 Trains a memory network on the bAbI dataset for reading comprehension.
 読解のために、bAbIデータセット上のメモリネットワークを訓練する。
 →サンプルデータをダウンロードしてきて何やら解析を始める。
  エポック120あるけどかなり高速で1万サンプルをやっつけていく。
  ラズパイ3だとエポック1つ処理するのに30秒、つまり1時間かかるので中止。

 Trains a two-branch recurrent network on the bAbI dataset for reading comprehension.
 読解のために、bAbIデータセット上の2つの分岐の反復的なネットワークを育成する。
 →サンプルデータをダウンロードしてきて解析を始める。
  エピック40あってラズパイ3ではつらいので中止。
  認識率は20%くらいと低いようだ。

 Trains a simple deep CNN on the CIFAR10 small images dataset.
 CIFAR10の小さな画像データセットでシンプルな深いCNNを学習します。
 →サンプルデータをダウンロードして解析を始める。
  Using real-time argumantation.というのが表示される。
  中止もすんなり受け付けてくらないので他と何か違うらしい。

 Visualization of the filters of VGG16, via gradient ascent in input space.
 VGG16のフィルタのビジュアライゼーション。
 →レイヤーの数がかなりある。進行状況の表示も他のと異なっていてCurrent Loss valueが逐一表示されて、Processingを200回繰り返しやるみたいです。1つくらい最後までやってみようと

 Demonstrates the use of a convolutional LSTM network.
 畳み込みLSTMネットワークの使用を示します。

 Deep Dreams in Keras.
 ケラスの深い夢。

 Trains a convolutional stack followed by a recurrent stack and a CTC logloss function to perform optical character recognition (OCR).
 畳み込みスタックとそれに続く反復スタックとCTCログ損失機能をトレーニングし、光学式文字認識(OCR)を実行します。

 Trains a Bidirectional LSTM on the IMDB sentiment classification task.
 IMDBセンチメント分類タスクで双方向LSTMを訓練する。

 Demonstrates the use of Convolution1D for text classification.
 テキスト分類のためのConvolution1Dの使用を示す。

 Trains a convolutional stack followed by a recurrent stack network on the IMDB sentiment classification task.
 IMDBセンチメント分類タスクで反復スタックネットワークが後に続く畳み込みスタックを訓練する。

 Trains a FastText model on the IMDB sentiment classification task.
 IMDBセンチメント分類タスクでFastTextモデルをトレーニングします。

 Trains a LSTM on the IMDB sentiment classification task.
 IMDBセンチメント分類タスクでLSTMを訓練する。

 Compares different LSTM implementations on the IMDB sentiment classification task.
 異なるLSTM実装をIMDBセンチメント分類タスクで比較します。

 Generates text from Nietzsche's writings.
 ニーチェの著作からテキストを生成する。

 Implementation of AC-GAN ( Auxiliary Classifier GAN ) on the MNIST dataset
 MNISTデータセットにおけるAC-GAN(Auxiliary Classifier GAN)の実装

 Trains a simple convnet on the MNIST dataset.
 MNISTデータセットで単純なconvnetを学習します。

 Trains a Hierarchical RNN (HRNN) to classify MNIST digits.
 階層型RNN(HRNN)をトレーニングして、MNISTディジットを分類します。

 Reproduction of the IRNN experiment with pixel-by-pixel sequential MNIST in "A Simple Way to Initialize Recurrent Networks of Rectified Linear Units" by Le et al.
 Leらによる "整流された線形単位の再帰的ネットワークを初期化する簡単な方法"における画素単位の連続的なMNISTによるIRNN実験の再現

 Trains a simple deep multi-layer perceptron on the MNIST dataset.
 MNISTデータセットで単純な深層マルチレイヤパーセプトロンを学習します。

 Reproduction of the Net2Net experiment with MNIST in "Net2Net: Accelerating Learning via Knowledge Transfer".
「Net2Net:知識移転による加速学習」におけるMNISTによるNet2Net実験の再現

 Trains a Siamese multi-layer perceptron on pairs of digits from the MNIST dataset.
 MNISTデータセットの数字の対にシャーマンの多層パーセプトロンを訓練する。

 Demonstrates how to use the sklearn wrapper.
 sklearnラッパーの使用方法を示します。

 Trains a Stacked What-Where AutoEncoder built on residual blocks on the MNIST dataset.
 スタックされたWhat-WhereをトレインするAutoEncoderは、MNISTデータセットの残りのブロックに基づいて構築されました。

 Transfer learning toy example.
 転送学習のおもちゃの例。

 Neural doodle.
 神経の落書き。

 Neural style transfer.
 ニューラルスタイルの転送。

 Loads pre-trained word embeddings (GloVe embeddings) into a frozen Keras Embedding layer, and uses it to train a text classification model on the 20 Newsgroup dataset.
 訓練された単語埋め込み(GloVe埋め込み)をフリーズしたKeras埋め込みレイヤーに読み込み、これを使用して20 Newsgroupデータセットのテキスト分類モデルをトレーニングします。

 Trains and evaluate a simple MLP on the Reuters newswire topic classification task.
 ロイターのニュースワイヤトピック分類タスクで簡単なMLPをトレーニングし、評価します。

 Demonstrates how to use stateful RNNs to model long sequences efficiently.
 ステートフルなRNNを使用して長いシーケンスを効率的にモデル化する方法を示します。

 Demonstrates how to build a variational autoencoder.
 バリアントオートエンコーダの構築方法を示します。

 Demonstrates how to build a variational autoencoder with Keras using deconvolution layers.

 デコンボリューションレイヤを使用してKerasを使用してバリアントオートエンコーダを構築する方法を示します。


総論:
 全部のサンプルを動かして率直な印象。
 大量のデータセットがあって、
 学習用途に合わせたレイヤー構成があって、
 学習させるのに大量の処理時間が必要で、
 正解率は学習毎に変わって正解率100%はありえない。

という結論です。
あとディープラーニング自体は画像解析に特化している


詳しく理解してないですが、何を解析するかでどういう解析手法にするか選択するようです。
上記サンプルからわかることは、

 LSTM、GRU :自然言語解析
 CNN    :画像解析
 RNN    :自然言語、画像解析でも利用。亜種が色々。

のようです。

何が効果的か本来は試行錯誤しながら見つけなければいけないと思うのですが、インターネット上で研究成果も色々乗っているわけで、利用者側からすれば詳しいモデル構造を知らなくてもモデルのテンプレを集めておけば、データセット収集で目的の半分は達成できそうな気もする。


参考URL
https://keras.io/ja/



2017年8月5日土曜日

特化型人工知能について

AIには汎用型と特化型で2種類あるうち特化型についてまとめてみた。

特化型最高峰は最近の流行りである深層学習であるディープラーニングである。

ディープラーニングをざっくり説明すると、データから自ら特徴を見つけ出し、カテゴリ分けを行い、それに人間がラベリングを行い、実社会と人工知能の結果を結びつけるというものである。
今までと違うのが自ら特徴を見つけ出すという部分で、人が分かってない特徴も見つけ出す事も可能ということです。

学習手順を大まかに書くと、

 大量のデータセット→AIエンジニアが作った機械学習プログラム→結果

1.あるデータセット(動画・音声・テキスト・センサ情報など)を入力する。
2.AIが学習を行う。
  AIエンジニアがデータに最適な手法を組み合わせたり、評価関数を作り、求めるパラメータを明確化する。
3.それなりに結果得られるようになったら完成。


人工知能と人と同じく最初は判別しやすいデータを与えて勉強させることが必要です。
ベースを作ってから徐々に判定が難しいデータを与えて調節していく感じがいいように思えます。


AIエンジニアのお仕事
 ディープラーニングが登場してから毎週のように進化していっているので、対象のデータをどういったアルゴリズムを使えば最善であるか設計する作業があります。それと人工知能が出した結果が評価する評価関数の導出も必要だったりするので人工知能だからって手放しで全自動というわけではないのが現状である。


人工知能のやるにあたっていきなりディープラーニングをやるよりも、用語や機械学習の扱い方を覚えるためにまずSVMやニューラルネットワークから導入したほうがいいかも。


以下、完全にまとめきれてないのですが、用語集。


特化型AIの種類
ファジィ集合
・SVM(サポートベクトルマシン)
(NN)ニューラルネットワーク
NNを更に特化したものたち
 CNN、ResNet
 RNN
 LSTM

オートエンコーダ
・VAE(Variational Autoencoder)

アプリ
・OpenPose 動画で人の関節の動きを可視化する
・Merlin 深層学習ベースの音声合成ツールキットMerlin
・Eliza チャットボット


ライブラリ
・Tensorflow
・Chainer



・その他参考用語集
generative model...生成モデル
maximum likelihood learning...最尤学習
weights...重み
bias...バイアス(偏差)
meta-parameter...超パラメータ
stochastic...確率的
Robust...頑健
binary...2値
deterministic...決定論的
training data...訓練データ
validation data...検証データ
test data...テストデータ
GD(Gradient Descent)...勾配法
SGD(Stochastic Gradient Descent)...確率的勾配法
overfitting...過学習
approximate...近似
standard deviation...標準偏差
momentum...はずみ、運動量、今回の場合はGD中に振動の抑制項として使われる
ravine...峡谷、谷
brute-force...力ずく
weight decay...荷重減衰
mixing rate...混合率(理想分布への収束スピード)
coefficient...係数
partition function...分配関数
sparsity target...スパース化目標
sparsity cost...スパース化コスト
stability...安定性
discriminative...識別の
order of magnitude...10の累乗
eigenvalue...固有値
eigenvector...固有ベクトル
natural image...自然イメージ、多様性のあるイメージ
rectified...修正された
exponential family...指数型分布族
integrate out...積分消去


参考URL
http://machinelearningmastery.com/get-help-with-keras/
http://www.iryounomirai.com/news/study/1078/


2017年8月1日火曜日

[RaspberryPi]Tensorflowをインストールする

WindowsでTensorflowの環境構築がうまくいかなかったので、持て余しているラズパイにディープラーニング用フレームワークTensorflowをインストールすることにした。

ビルド済みのをインストールする方法もあるのですが、バージョンが古いのでソースからビルドします。

ちなみに2017年8月時点でJessie版RasbianのG++-4.9でビルドはできません。
参考URLにのっているのですが、threadpool.ccをビルドする時にエラーになります。

捕捉:試しにStretch版へアップグレードしてGCC-6、G++-6でビルドしてみたらこっちはOKでした。(スワップメモリを大きめに取っておく必要はありますが。)


以下を打ちこめばOK。
---
$ git clone https://github.com/tensorflow/tensorflow
$ sudo apt-get install -y autoconf automake libtool gcc-4.8 g++-4.8 libjpeg-dev
$ tensorflow/contrib/makefile/download_dependencies.sh
$ cd tensorflow/contrib/makefile/downloads/protobuf/
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig  # refresh shared library cache
$ cd ../../../../..

raspberry pi zero or 1ならこっち
$ make -f tensorflow/contrib/makefile/Makefile HOST_OS=PI TARGET=PI OPTFLAGS="-Os" CXX=g++-4.8

raspberry pi 2 or 3ならこっち(neon有効化?)
$ make -f tensorflow/contrib/makefile/Makefile HOST_OS=PI TARGET=PI \
OPTFLAGS="-Os -mfpu=neon-vfpv4 -funsafe-math-optimizations -ftree-vectorize" CXX=g++-4.8
---

追記:Bazelを使う場合、
ビルドにbazelを使用すると「configure」が使えるので、調整が色々できるようになります。
Bazelはv0.4.5を使います。

$ wget https://github.com/bazelbuild/bazel/releases/download/0.4.5/bazel-0.4.5-dist.zip
$ unzip -d bazel bazel-0.4.5-dist.zip
$ cd bazel

ソースコードで編集2か所あります。

nano scripts/bootstrap/compile.sh
117行目 末尾に「-J-Xmx500M」を追加。


nano tools/cpp/cc_configure.bzl
133行目 関数の頭にreturn "arm" を追加。

$ sudo ./compile.sh
$ sudo cp output/bazel /usr/local/bin/bazel

これでBazelインストール完了。
次にTensorflowのビルド
$ cd ~/tensorflow
$ ./configure
$ bazel build -c opt --copt="-mfpu=neon-vfpv4" --copt="-funsafe-math-optimizations" --copt="-ftree-vectorize" --copt="-fomit-frame-pointer" --local_resources 1024,1.0,1.0 --verbose_failures tensorflow/tools/pip_package:build_pip_package

これでOK。

★ビルドエラーが出て先に進めない、手っ取り早くインストールしたい場合
ビルド済みのwhlがあるので活用する方法があります。

$ wget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/blob/master/archive/tensorflow-0.8.0rc0-cp27-none-linux_armv7l.whl
$ sudo pip install tensorflow-0.8.0rc0-cp27-none-linux_armv7l.whl

これでOK。

-----------
〇動作チェック

動作確認で画像認識をやってみる場合、
---
curl https://storage.googleapis.com/download.tensorflow.org/models/inception_dec_2015_stripped.zip \
-o /tmp/inception_dec_2015_stripped.zip
unzip /tmp/inception_dec_2015_stripped.zip \
-d tensorflow/contrib/pi_examples/label_image/data/
make -f tensorflow/contrib/pi_examples/label_image/Makefile
tensorflow/contrib/pi_examples/label_image/gen/bin/label_image
---

動作確認でカメラを使った動画認識をやってみる場合、
---
make -f tensorflow/contrib/pi_examples/camera/Makefile
tensorflow/contrib/pi_examples/camera/gen/bin/camera
---

ビルド時間がとても長いので気長にまちましょう。

2017年7月22日土曜日

tiny 10-DOF GY-91 sensor module

GY-91とは

10軸ものセンサーが小さな基板に実装されていて1000円未満。めっちゃ安いし扱いやすい。
10軸といっても一体何が入っているのか仕様を見てみると、

Technical Specifications

  • Model / Part Number: GY-91
  • Sensor Chips: MPU-9250 + BMP280
  • Interface: standard IIC / SPI communications protocol
  • Operating Voltage range: 3.0V – 5.0V (on-board low dropout regulator)
  • Module size 14.3mm * 20.5mm
  • Resolution: 16bit AD converter, 16-bit data output
  • Gyroscopes range: ± 250, 500, 1000, 2000 ° / s
  • Acceleration range: ± 2 ± 4 ± 8 ± 16g
  • Field range: ± 4800uT
  • Pressure range: 300-1100hPa
  • Using Immersion Gold PCB, machine welding process to ensure quality
  • 2.54mm pitch

Pinouts

  1. VIN: Voltage Supply Pin
  2. 3V3: 3.3v Regulator output
  3. GND: 0V Power Supply
  4. SCL: I2C Clock / SPI Clock
  5. SDA: I2C Data or SPI Data Input
  6. SDO/SAO: SPI Data output / I2C Slave Address configuration pin
  7. NCS: Chip Select for SPI mode only for MPU-9250
  8. CSB: Chip Select for BMP280

ジャイロ、加速度、磁気、気圧があるようです。

他に湿度センサー、GPSセンサー、光度センサー、赤外線センサーなどが必要であれば別途追加すればいいですね。


このセンサーモジュールはArduino用ライブラリが存在してます。

Documents and Downloads





2017年7月16日日曜日

[C#]BingMAPの使い方

もう手っ取り早くざっくりと。

Step1.アカウント作ってKeyを取得する。
 https://www.bingmapsportal.com/

Step2.UWPアプリのプロジェクトを新規作成する。
XAMLタグで

       

を追加して
maps:MapControlの所にカーソル合わせて CTRL+「.」を押してusing参照を自動挿入してもらう。

これでOK

他、

現在位置を設定する場合、
Geopoint情報を作って
new CreateFromLocationAndRadius(geopoint, zoom)インスタンスを
TrySetSceneAsyncする。

ストリートビューにするには、
map.Center = geopointして
panorama = StreetsidePanorama.FindNearbyAsync(myMap.Center)インスタンスを
map.CustomExperience = StreetsideExperience(panorama)する。

現在位置に移動するには、
マニフェストにlocationにチェックを入れて
Geolocator.RequestAccessAsync();でまずGPSアクセス許可を求める。
Geolocatorインスタンスから現在位置情報を引っ張ってくるのだけど
定期的に位置情報を取得する場合はReportIntervalに更新間隔msをセットすると
PositionChangedイベントが発行される。


参考URL





2017年7月15日土曜日

ブラシレスモータのセンサレス制御について考察

ペア数の違いからセンサレス制御が必要になった理由

 今までセンサありのベクトル制御を行っていたのだが、他のブラシレスモータでペア数が多いブラシレスモータに出くわしてしまった。

ペア数が少ないものだと、

 6P4N?なら正弦波4回転で実際は1回転
 24P22N?正弦波88回転で実際は1回転

となる。

ペア数が少ないものならエンコーダ12bitなら1回転4096分解能なので

 4096/360*4 = 2.84分解能/度

これならエンコーダ基準にして問題なかったのだが、

 4095/360*88 = 0.129分解能/度

となるとエンコーダの分解能が最低でも15bit必要だという事になる。

エンコーダ分解能が足りない場合は、

 ホールICが必要

という結果になった。

でもペア数が多いものだとホールIC搭載モデルって見た事ない気がするので

 センサレス制御が必要

という結論になった。


戦略1:内部位置カウンタを用意する。

エンコーダ基準で制御していた場合は、エンコーダ値から単純に次のUVW波形を計算すればよかったけど、それができないので
エンコーダはあくまで脱調してないかのチェック用。
(もし位置ずれしていたとしても分解能が足りてないので正確な位置に戻せないが、、)

やり方として
 Step1.移動量を算出して、回転させる。
 Step2.予想現在位置とエンコーダ値を比較して脱調してないかチェック
 Step3.脱調した時点、もしくは目標位置到達で停止

回転させるときは、VVVF制御ならセンサなしでも回せるけど
ベクトル制御にするなら現在の電流角を把握する必要があり、センサレス制御が登場してくる。

戦略2:センサレス制御を導入するかについて考える

ゼロクロス点は電気角360度中に6点存在する。
1回転するのに電気角で88回転必要なら6*88=528点ある事になる。
このタイミングで位置ずれを検知してすべり角を補正することが可能となるけども、
これが必要かどうか。

今回の場合、
 出力角360度=エンコーダ4096分解能=ゼロクロス点528個

エンコーダ基準にした場合
 4096<31680 p="">
ゼロクロス点(60度)を最小単位にした場合、
 4096>528=多少粗いけどOK

電気角45度を最小単位にした場合、
 4096>704=多少粗いけどOK

電気角8度を最小単位にした場合、
 4096>3960=OK

となる。

電気角8度でエンコーダ角1分解能取れるなら誤魔化してしまえばいいのかななんて思ってみたり。

ちなみに電気角1度は1/360/88度に相当するので問題ない範疇だったりするので。

結果
エンコーダがあるなら電気角最小単位を1だったのを8などに増やしてしまえば何ら問題ない。





Androider