初の学会 ~Raspberry Pi, Arduinoとの格闘を添えて~
お久しぶりです。Marieちゃんです。
更新する、更新すると言っておきながら全然更新していませんでした。
すみません。正直こういう作業本当に苦手なんです......(言い訳すな)
さて、茶番はここら辺にしておいて、本題に入りましょう。
発表者として、初学会参加しました!
今回は触覚を用いた音源定位能力のウェアラブルサポートデバイスの作成をしました。
しかし!ArduinoとRaspberry Pi君の扱いがなかなかうまくいきませんでした.......
なので、今回は学会発表にこぎつけるまでの様々な失敗をまとめてみようと思います。
失敗その1.
Arduinoの実行速度とメモリが圧倒的に足りない。
まず、ArduinoとRaspberry Piを比較した際にArduinoのほうがアナログデータの観測が得意という特徴があります。
なので、初めはマイクをArduinoに接続し、そのデータをRaspberry Piに送って音声処理をしようとしました。
しかし、Arduinoにはある弱点があったのです......
それは音速に耐えられるだけの速さを持つCPUがないことと、メモリが圧倒的に少ないことです。
まず前者から行きましょう。波形観測の際私は位相差法を用いていたのですが、音速がCPU処理速度に対して速すぎて、maxで遅れるパターンでも配列の要素3つ分くらいしか波形がずれず、角度分解能が悲惨なことになりました。
(だったらマイク間の距離を広げればいいじゃないと考えるそこのあなた。これはウェアラブルデバイスとして開発したので、広げられないんです。詰んだ \(^o^)/ )
次に後者。Arduinoはおよそ32kBしかフラッシュメモリを持ちません。(種類によって違いますが多くても64kとかそこらへん。)
つまり、大型のデータを保持できないのです。int型配列の要素も持ててせいぜい2048とかそんなもんです。これも詰み要素の一つですね。
失敗その2.
Arduino to Raspberry Pi間の通信がボトルネック
ここの間の通信がシリアルなので、さっきの長い配列をシリアルで渡そうとすると自明にここがボトルネックになります。
今回はこれらの操作をリアルタイムに行いたかったために、これも解消しなくちゃ行けなかったですね。
これら2つの失敗を元に、拡張モジュールを買ってRaspberry Piで音を取ることにしました。
しかし、失敗はまだ続きます。
失敗その3.
Raspberry PiとPyaudioの相性が悪い
Raspberry Piはもともと録音モジュールがないため、そこらへんは考慮されなかったのかもしれません。pyaudioはpipではwheelの時点でエラーを吐いてしまうので、brewからインストール。しかしここでもCFFIが入っていないためCFFIもインストールすることに。かなり環境作成が大変でした。
そのほかにも配線のことだったり、3Dプリンターのことだったりいろんな失敗をしましたが、マイコン関係はこんなもんです。
やっぱりハードって難しいね。と思った出来事でした。