Top Banner
ソソソソソソソ ソソソソソソソソソソソソソソソソ 、。 ソソソソソソソソソソソソソソソソソソソソソソソソソソソ ソソソソ rti ソソソソソソソソソソソソソソソソソソソソ C++ ソソソソソソソソ PHP ソソソソソソソソソソI‘m CEO,Bitch! https://rti-giken.jp/
43

Raspberry pi / Beaglebone black 高精度dmtimer

Apr 05, 2017

Download

Technology

Hiroyuki Fujie
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Raspberry pi / Beaglebone black  高精度dmtimer

ソフト屋さんと、ネット屋さんとかをしていました。アーキテクトという肩書きで雑用係をやっていました。現在は、独立して rti 技研という会社をやっています。好きな言語は C++ サーバサイドでは PHP のお手軽さが好きです。I‘m CEO,Bitch!       https://rti-giken.jp/

自己紹介

Page 2: Raspberry pi / Beaglebone black  高精度dmtimer

フューチャーホームコントローラー

Page 3: Raspberry pi / Beaglebone black  高精度dmtimer

手に何も持たないハンズフリーの音声認識を提供します。手ぶらの音声認識を提供します。言葉でしゃべるだけです。

マイクまで 1m ~ 2m 程度の距離でも動作します。マイクを部屋の中央におけば全部をカバーします。

Page 4: Raspberry pi / Beaglebone black  高精度dmtimer

スマートフォンから「も」操作することもできます。

Page 5: Raspberry pi / Beaglebone black  高精度dmtimer

開発時の取材・掲載

取材・掲載

Page 6: Raspberry pi / Beaglebone black  高精度dmtimer

マルチデバイス HTML5 対応

スマホPC

Page 7: Raspberry pi / Beaglebone black  高精度dmtimer

設定はブラウザから簡単にできます。

Page 8: Raspberry pi / Beaglebone black  高精度dmtimer

・非インターネットの環境でも動く

・雑音が多い場所でも 認識するアルゴリズムを開発

・誤動作を起こしにくいアルゴリズムを開発

・ arm でも動作する身軽さ

オープンソースをベースに開発した音声認識エンジン

Page 9: Raspberry pi / Beaglebone black  高精度dmtimer

いろいろなリモコンを学習できる賢い学習リモコンエンジン

Page 10: Raspberry pi / Beaglebone black  高精度dmtimer

フューチャーホームコントローラー

Page 11: Raspberry pi / Beaglebone black  高精度dmtimer

様々なカスタマイズ

Page 12: Raspberry pi / Beaglebone black  高精度dmtimer

ユーザ : スマートウォッチ Pebble 連携

http://www.nicovideo.jp/watch/sm20654023

Page 13: Raspberry pi / Beaglebone black  高精度dmtimer

ユーザ : vim から家電操作

http://www.youtube.com/watch?v=Uqm8sYyzwO8

Page 14: Raspberry pi / Beaglebone black  高精度dmtimer

ユーザ :Ring と連動

Page 15: Raspberry pi / Beaglebone black  高精度dmtimer

ユーザ : 認識単語を呪文で家を操作

Page 16: Raspberry pi / Beaglebone black  高精度dmtimer

私の作品 : 家 mount

ls -la /mnt/drwxr-xr-x 5 root root 0 1 月 1 1970 .drwxr-xr-x 23 root root 4096 12 月 8 15:39 ..drwxr-xr-x 7 root root 0 1 月 1 1970 エアコンdrwxr-xr-x 4 root root 0 1 月 1 1970 照明drwxr-xr-x 4 root root 0 1 月 1 1970 扇風機

Page 17: Raspberry pi / Beaglebone black  高精度dmtimer

体の不自由な方の介護機器として

Page 18: Raspberry pi / Beaglebone black  高精度dmtimer

V8(javascript) で機能を拡張できます。 ( 上級者向け機能 )

ブラウザから javascript で、家をプログラミングすることができます。

Page 19: Raspberry pi / Beaglebone black  高精度dmtimer
Page 20: Raspberry pi / Beaglebone black  高精度dmtimer

音声認識のホームコントローラー FHC キャンペーン価格で提供中https://rti-giken.jp/ 定価 : 26800 円

Page 21: Raspberry pi / Beaglebone black  高精度dmtimer

Raspberry PiBeaglebone black高精度 DMTIMER

Page 22: Raspberry pi / Beaglebone black  高精度dmtimer

マイクロ秒単位のGPIO 割り込みを取りたい

Page 23: Raspberry pi / Beaglebone black  高精度dmtimer

例えば、赤外線リモコンの学習とか。

Page 24: Raspberry pi / Beaglebone black  高精度dmtimer

赤外線リモコンの信号は 10 マイクロ秒単位

Page 25: Raspberry pi / Beaglebone black  高精度dmtimer

汎用の IR 受信モジュール使うと38khz しか取れない問題がある

世の中にはわざと少し変わった周波数を出すリモコンがあったり・・・

Page 26: Raspberry pi / Beaglebone black  高精度dmtimer

それじゃあ、自前で解析しよう

Page 27: Raspberry pi / Beaglebone black  高精度dmtimer

そのためには、10 マイクロ秒の割り込みをとらないといけない。

Page 28: Raspberry pi / Beaglebone black  高精度dmtimer

以下のメモリにタイマーがあるので読みましょう .ボード メモリ位置 バイト長beaglebone    0x4804003C 4バイトraspberry pi2-3 0x3F003004 4 バイト

Page 29: Raspberry pi / Beaglebone black  高精度dmtimer

raspberry pi 2-3 0x3F003004 4 バイトunsigned int 値で、オーバーフローすると 0 に戻る .前回の計測値と比較すれば、処理時間がわかる。raspberry pi は 10 マイクロ秒で、beaglebone は、クロック秒だと思われる ( 多分 )

Page 30: Raspberry pi / Beaglebone black  高精度dmtimer

実測してみよう

Page 31: Raspberry pi / Beaglebone black  高精度dmtimer

Sleep 1 秒 しながら値表示rti@raspberrypi:~ $ sudo ./a.outTimer = 289602805Timer = 290603260Timer = 291603371Timer = 292603500 ↑ ↑ 秒 ms

Page 32: Raspberry pi / Beaglebone black  高精度dmtimer

実装方法実例

Page 33: Raspberry pi / Beaglebone black  高精度dmtimer

もし、User Land で書いているなら・・・

Page 34: Raspberry pi / Beaglebone black  高精度dmtimer

//user land raspberry pi 2-3int g_fd = open("/dev/mem", O_RDWR | O_SYNC); unsigned int* g_mmap = ( unsigned int*) mmap(NULL, 0x100, PROT_READ,MAP_SHARED,g_fd, 0x3F003000);

unsigned int* g_timer = &g_mmap[0x4/sizeof(int)]; //0x3F003004

// 一番オーバーヘッドを生まないマクロ展開で読む#define dmtimer_get() (*g_timer)

printf("timer: %u\n", dmtimer_get() ); close(g_fd);

Page 35: Raspberry pi / Beaglebone black  高精度dmtimer

もし、Kernel Land で書いているなら・・・

Page 36: Raspberry pi / Beaglebone black  高精度dmtimer

//kernel land raspberry pi 2-3void *g_timer = ioremap(0x3F003004,4); //raspberry pi

// 一番オーバーヘッドを生まないであろう// マクロ展開で読みだす . #define dmtimer_get() ((unsigned int)ioread32(g_timer))

printk(KERN_ALERT "timer: %u\n", dmtimer_get() ); iounmap(g_timer);

Page 37: Raspberry pi / Beaglebone black  高精度dmtimer

時刻の観測は、ここを読めばいいだけボード メモリ位置 バイト長beaglebone    0x4804003C 4バイトraspberry pi 2-3 0x3F003004 4 バイト

Page 38: Raspberry pi / Beaglebone black  高精度dmtimer

タイマーはわかった。では、 GPIO の入力の観測方法は?

Page 39: Raspberry pi / Beaglebone black  高精度dmtimer

UserLand単純に while(1){} ループを回すのも手。

Page 40: Raspberry pi / Beaglebone black  高精度dmtimer

KernelLandgpio_to_irqrequest_any_context_irq

kernel land だと、 gpio を irq 割り込みに変換 (?) する機能がある。

Page 41: Raspberry pi / Beaglebone black  高精度dmtimer

err = gpio_to_irq(IR_RECV_GPIO_PIN);err = request_any_context_irq( IRRecvIRQ, test_irq_latency_interrupt_handler, IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING | IRQF_NOBALANCING | IRQF_IRQPOLL , DRV_NAME, NULL);

static irqreturn_ttest_irq_latency_interrupt_handler(int irq, void* dev_id){//GPIO 割り込みがあったらコールされる}

Page 42: Raspberry pi / Beaglebone black  高精度dmtimer

注意点ミリ秒以下の世界なので、CPU の動作クロックが省電力モードになると、数字が変わることが有ります。注意しましょう。

Page 43: Raspberry pi / Beaglebone black  高精度dmtimer

音声認識のホームコントローラー FHC キャンペーン価格で提供中https://rti-giken.jp/ 定価 : 26800 円