M5StickCのジェスチャでLEDを変色させるMagic Wandのコードで学びがあったため記載しておく。
プロジェクトは下記から確認できる。 それにしても認識は早い。これは機械学習を使っていないためという事もある。
https://m5stack.hackster.io/shasha-liu/magic-wand-752f52 GitHub - m5stack/MagicWand: IMU sensor apply to Motion capture
実際ジェスチャという点ではMotion Controller | ProtoPedia と似ており、 Magic WandはRoll/Pitch/Yawを相補フィルターによって求めている。
相補フィルターは、加速度センサ、ジャイロセンサから取得した値に係数を乗じて角度を算出する方法だ。
新入社員が制作実習でドローンの自作に挑戦した話。(3) | 組込み技術ラボ
尚、Motion ControllerはIMU FilterにMahony Filterを利用している。
さて気になる所だが、コードでTaskSchedulerライブラリ#include <TaskScheduler.h> が呼ばれていたため、動作を調べてみた。 https://github.com/arkhipenko/TaskScheduler
利点としては、センサやLED等をTask割当してスケジューリング実行したい場合にTask割当をシンプルに記載できるところか。 定常的にTaskを実行する処理は、Taskにコールバック関数を登録してloop関数中のrunner.execute()から常にTaskを呼び出す流れでかける。
下記はコード一例だ。
#include <TaskScheduler.h> void led_blink(); Scheduler runner; Task M5LED(5000,TASK_FOREVER,&led_blink); bool statusLED = false; void setup(){ Serial.begin(9600); runner.addTask(M5LED); M5LED.enable(); pinMode(10,OUTPUT); } void loop(){ runner.execute(); } void led_blink(){ statusLED = !statusLED; digitalWrite(10,statusLED); Serial.println(statusLED); }
vTask...はCPU割当が可能だがTask Schedulerはできそうにない。