打印
[开发工具]

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

[复制链接]
3296|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 北方西门吹雪 于 2020-12-24 11:15 编辑

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

具体有两种方式,一种直接用tensorflow lite,另一种直接压成lib库,




(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)
(5)其它与该垂直应用相关的想要分享的任何内容
这个人工智能的应用还只能支持tensorflow的框架,pytorch等都不支持,也限制了应用的方案。这个需要改一下,毕竟tensorflow不那么好学习,使用静态图搞就是比较麻烦的。


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

6.1 根据这个工具,下载cube-sensor 的工具包,解压后,可以找到针对STM32L476RG的范例程序代码,
解压后的代码结构如下,

下载的代码目录结构如下,

注意到其中的ai-common.c就是专门提供人工智能加速的接口头文件
中间的主程序main.c是使用freertos实现线程控制的,这个代码的结构还是比较复杂的,重要的是起始地址安排给bootloader,然后才是修改入口地址的本程序。
其中bootload可以实现usb升级等众多功能,确实非常有必要的。
int main(void)
{
  HardwareInit();

#if ( configUSE_TRACE_FACILITY == 1 )
  vTraceEnable(TRC_START);
#endif

  /* Create threads */
  osThreadCreate(osThread(THREAD_1), NULL);
  osThreadCreate(osThread(THREAD_2), NULL);
#if SENSING1_USE_CLI
  osThreadCreate(osThread(THREAD_3), NULL);
#endif /* SENSING1_USE_CLI */

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

  /* Create the semaphores */
  semRun = osSemaphoreCreate(osSemaphore(SEM_Sm1), 1);
  semRxChar = osSemaphoreCreate(osSemaphore(SEM_Sm2), 1);
  semUart = osSemaphoreCreate(osSemaphore(SEM_Sm3), 1);

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

  /* set lowest reachable power mode  */
#if (defined(STM32_SENSORTILE) && SENSING1_USE_PRINTF)
  SetMinPowerMode(IDLE_WFI_TICK_SUPRESS);
#else
  SetMinPowerMode(IDLE_SLEEP_STOP);
#endif

  /* Start scheduler  */
  osKernelStart();

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

  if (ACTIVITY_IGN == msgType){
    MultiNN_OutStored.harOut = (HAR_output_t)code;
  }
  else if (AUDIO_SC == msgType){
    MultiNN_OutStored.ascOut = (ASC_OutputTypeDef)code;
  }
  SENSING1_PRINTF("<multi %d %d> \r\n",MultiNN_OutStored.harOut,MultiNN_OutStored.ascOut);
  msg.multiNN = MultiNN_OutStored ;
  SendMsgToHost(&msg);
}

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

使用特权

评论回复
沙发
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的板子就可以搞一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

102

帖子

1

粉丝