查看: 1726|回复: 3

关于使用CuriePME实现更自然动作识别的研究

[复制链接]
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2017-3-4 01:23 | 显示全部楼层 |阅读模式
    实现原理: 把所有动作都拆分成几个小动作,识别的时候,只要在一定时间范围内,同事出现了这几个小动作,就把判定为一个大动作;

    QQ图片20170315223457.png


    程序如下:
    如果看不懂的话,请先看CuriePME例程,看懂例程再看这个就明白了
    [kenrobot_code]
    #include <CurieIMU.h>
    #include <CuriePME.h>
    #include <CurieBLE.h>

    #include "buzzer.h"
    #include "loadIMU.h"
    // #include "loadIMUa.h"
    // #include "SaveAndLoad.h"


    Buzzer buzzer(6);
    int buttonPin = 8;

    void setup()
    {
        Serial.begin(115200);
        // while(!Serial);
        pinMode(buttonPin, INPUT_PULLUP);
        Serial.println("test test");
        CurieIMU.begin();
        CuriePME.begin();
        CurieIMU.setAccelerometerRate(1600);
        CurieIMU.setAccelerometerRange(2);

        // while(digitalRead(buttonPin)==HIGH);  
        // Serial.println("Training 1 begin");
        // training(1,5);
        // while(digitalRead(buttonPin)==HIGH);
        // Serial.println("Training 2 begin");
        // training(2,5);
        // while(digitalRead(buttonPin)==HIGH);
        // Serial.println("Training 3 begin");
        // training(3,5);

        // while (digitalRead(buttonPin) == HIGH);
        // buzzer.bbb();
        // Serial.println("Training 1 begin");
        // training(1, 1);
        // training(2, 1);
        // training(3, 1);
        // buzzer.end();

        while (digitalRead(buttonPin) == HIGH);
        Serial.println("Training begin");
        training2(6);
        // while (digitalRead(buttonPin) == HIGH);
        // Serial.println("Training begin");
        // training3(6);
    }

    void loop()
    {
        // while(digitalRead(buttonPin)==HIGH);
        // delay(10);
        byte vector[128];
        readVectorFromIMU(vector);
        unsigned int category = CuriePME.classify(vector, 128);
        if (category == CuriePME.noMatch)
        {
            // Serial.println("Don't recognise that one-- try again.");
        }
        else
        {
            Serial.println(category);
        }
    }

    // //单一动作
    // void training(unsigned int currentClassification, int trainingReps)
    // {
    //     unsigned int currentTraining = 0;
    //     while (currentTraining < trainingReps)
    //     {
    //         buzzer.bbb();
    //         byte vector[128];
    //         currentTraining++;
    //         readVectorFromIMU(vector);
    //         CuriePME.learn(vector, 128, currentClassification);
    //         buzzer.end();
    //         Serial.println("Got it!");
    //     }
    // }

    //连续动作
    // void training2(unsigned int currentActions, int trainingReps)
    void training2(int trainingReps)
    {
        unsigned int currentTraining = 0;
        unsigned int actionsLen = 3;
        while (currentTraining < trainingReps)
        {
            buzzer.bbb();
            currentTraining++;
            Serial.println(currentTraining);
            unsigned int currentAction = 0;
            byte vector1[128];
            byte vector2[128];
            byte vector3[128];
            byte vector4[128];
            readVectorFromIMU(vector1);
            readVectorFromIMU(vector2);
            readVectorFromIMU(vector3);
            readVectorFromIMU(vector4);
            CuriePME.learn(vector1, 128, 1);
            CuriePME.learn(vector2, 128, 2);
            CuriePME.learn(vector3, 128, 3);
            CuriePME.learn(vector4, 128, 4);
            Serial.println("Got it!");
            // while(currentAction < actionsLen)
            // {
            //     byte vector[128];
            //     currentAction++;
            //     readVectorFromIMU(vector);
            //     CuriePME.learn(vector, 128, currentAction);
            //     Serial.println("Got it!");
            // }
            buzzer.end();
        }
    }

    void training3(int trainingReps)
    {
        unsigned int currentTraining = 0;
        // unsigned int actionsLen = 3;
        while (currentTraining < trainingReps)
        {
            buzzer.bbb();
            currentTraining++;
            Serial.println(currentTraining);
            // unsigned int currentAction = 0;
            byte vector[128];
            // currentAction++;
            readVectorFromIMU(vector);
            CuriePME.learn(vector, 128, 1);
            Serial.println("Got it!");
            readVectorFromIMU(vector);
            CuriePME.learn(vector, 128, 4);
            Serial.println("Got it!");
            readVectorFromIMU(vector);
            CuriePME.learn(vector, 128, 5);
            Serial.println("Got it!");
        }
    }[/kenrobot_code]

    如果以上内容对你有帮助,你可以通过打赏支持作者

    该用户从未签到

    发表于 2017-6-1 13:49 | 显示全部楼层
    fatal error: buzzer.h: No such file or directory

    该用户从未签到

    发表于 2017-6-1 15:35 | 显示全部楼层
    readVectorFromIMU was not declared in this scope

    点评

    上面已经说了,先看库例程  详情 回复 发表于 2017-6-1 19:16
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

     楼主| 发表于 2017-6-1 19:16 | 显示全部楼层
    迷茫的人 发表于 2017-6-1 15:35
    readVectorFromIMU was not declared in this scope

    上面已经说了,先看库例程
    如果以上内容对你有帮助,你可以通过打赏支持作者
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    今晚闲来无事搞了下STM32 Ardunio 的SPI2 SD卡的通讯
    今晚闲来无事搞了下STM32
    看到Ardunio很火,就想用STM32F103RBT6的板子试一下。之前移植网上带系统的,竟然说超
    arduino之串口通讯
    arduino之串口通讯
    总操流程: 1、写入程序 2、测试[hr][/backcolor] 写程序[/backcolor] [*]void s
    四位数码管动态显示
    四位数码管动态显示
    代码如下;从9990到9999,然后再从9898开始 代码撸起; const unsigned char dofly_Du
    求助!GM65二维码扫描模块怎么用?
    求助!GM65二维码扫描模块
    求助!GM65二维码扫描模块怎么用? 卖家给的资料真的看不懂该怎么弄。。( ̄▽ ̄)~*
    Arduino Pro Micro 打造USB音频转 3.5mm音频转接板
    Arduino Pro Micro 打造US
    3.5mm耳机接口是PC上最常见的音频接口,因为它工艺简单、价格低廉在涉及到声音输入输
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表