[开发工具] 【STM32垂直应用挑战第六周+人工智能】低功耗物联网节点

[复制链接]
3822|3
 楼主| 北方西门吹雪 发表于 2020-12-21 12:10 | 显示全部楼层 |阅读模式
本帖最后由 北方西门吹雪 于 2020-12-24 11:15 编辑

#申请原创# (1)本人学习的垂直应用的名称和链接
垂直应用第六周+人工智能
https://www.stmcu.com.cn/ecosystem/app/ai
(2)本人的学习笔记/体会/分享
2.1 人工智能在物联网低功耗节点的应用遵循以下逻辑。
1.JPG
具体有两种方式,一种直接用tensorflow lite,另一种直接压成lib库,
1.JPG



(3)通过该应用的学习资料,我的创意设想
运用这个AI工具,开发关于读取电机振动的数据,进行状态检测的项目。
(4)下载至少一个相关的AN资料并分享到帖子中
使用AI-node进行低功耗节点的声音和运动感知
Getting started with the STM32Cube function pack for ultra-low power IoT nodes for AI applications based on audio and motion sensing
https://www.st.com/resource/en/user_manual/dm00568147-getting-started-with-the-stm32cube-function-pack-for-ultralow-power-iot-nodes-for-ai-applications-based-on-audio-and-motion-sensing-stmicroelectronics.pdf
下载链接如下
dm00568147-getting-started-with-the-stm32cube-function-pack-for-ultralow-power-i.pdf (3.73 MB, 下载次数: 2)
(5)其它与该垂直应用相关的想要分享的任何内容
这个人工智能的应用还只能支持tensorflow的框架,pytorch等都不支持,也限制了应用的方案。这个需要改一下,毕竟tensorflow不那么好学习,使用静态图搞就是比较麻烦的。


(6)分享一下具体做过的方案:振动传感器智能识别
通过Kemet振动传感器读取振动信息,根据振动信息分析数据,并得出数据的特征,提供预防性电机检测的功能。

6.1 根据这个工具,下载cube-sensor 的工具包,解压后,可以找到针对STM32L476RG的范例程序代码,
解压后的代码结构如下,
00.PNG
下载的代码目录结构如下,
01.PNG
注意到其中的ai-common.c就是专门提供人工智能加速的接口头文件
中间的主程序main.c是使用freertos实现线程控制的,这个代码的结构还是比较复杂的,重要的是起始地址安排给bootloader,然后才是修改入口地址的本程序。
其中bootload可以实现usb升级等众多功能,确实非常有必要的。
  1. int main(void)
  2. {
  3.   HardwareInit();

  4. #if ( configUSE_TRACE_FACILITY == 1 )
  5.   vTraceEnable(TRC_START);
  6. #endif

  7.   /* Create threads */
  8.   osThreadCreate(osThread(THREAD_1), NULL);
  9.   osThreadCreate(osThread(THREAD_2), NULL);
  10. #if SENSING1_USE_CLI
  11.   osThreadCreate(osThread(THREAD_3), NULL);
  12. #endif /* SENSING1_USE_CLI */

  13.   /* Register commands with the FreeRTOS+CLI command interpreter. */
  14.   RegisterCLICommands();

  15.   /* Create the semaphores */
  16.   semRun = osSemaphoreCreate(osSemaphore(SEM_Sm1), 1);
  17.   semRxChar = osSemaphoreCreate(osSemaphore(SEM_Sm2), 1);
  18.   semUart = osSemaphoreCreate(osSemaphore(SEM_Sm3), 1);

  19.   /* create mail queue */
  20.   mail = osMailCreate(osMailQ(mail), NULL);

  21.   /* set lowest reachable power mode  */
  22. #if (defined(STM32_SENSORTILE) && SENSING1_USE_PRINTF)
  23.   SetMinPowerMode(IDLE_WFI_TICK_SUPRESS);
  24. #else
  25.   SetMinPowerMode(IDLE_SLEEP_STOP);
  26. #endif

  27.   /* Start scheduler  */
  28.   osKernelStart();

  29.   /* We should never get here as control is now taken by the scheduler  */
  30.   for (;;);
  31. }
其中一个进行NN神经网络分析的线程如下,其中采用的是ST的专用的深度学习模型,可以根据声音振动源分析所在环境是室外还是室内,实现分类模型classification
  1. static void SyncMultiNN(msgType_t msgType, uint32_t code)
  2. {
  3.   msgData_t msg;
  4.   msg.type = MULTI_NN;

  5.   if (ACTIVITY_IGN == msgType){
  6.     MultiNN_OutStored.harOut = (HAR_output_t)code;
  7.   }
  8.   else if (AUDIO_SC == msgType){
  9.     MultiNN_OutStored.ascOut = (ASC_OutputTypeDef)code;
  10.   }
  11.   SENSING1_PRINTF("<multi %d %d> \r\n",MultiNN_OutStored.harOut,MultiNN_OutStored.ascOut);
  12.   msg.multiNN = MultiNN_OutStored ;
  13.   SendMsgToHost(&msg);
  14. }

这个模块比较复杂,但是可以学习的地方非常多。

BettyBerry 发表于 2020-12-21 23:27 | 显示全部楼层
能跑tensorflow已经蛮不错的了 pytorch不是很好移植
索尼法 发表于 2020-12-21 23:38 | 显示全部楼层
学习人工智能还是很有用的 但是st家哪个芯片跑得起来
 楼主| 北方西门吹雪 发表于 2020-12-22 09:43 | 显示全部楼层
索尼法 发表于 2020-12-21 23:38
学习人工智能还是很有用的 但是st家哪个芯片跑得起来

这个可以跑的,如果手上有个H7的板子就可以搞一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

125

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
0