STM32推荐工具使用测试AI 工具使用也是通过ST中文论坛的学习,发现了这么一个软件NANOEDGE AI STUDIO,使用其可以快速的生成需要的模型文件。相关软件的下载地址可以直接搜索NanoEdge AI Studio,或者访问如下网址NanoEdge AI Studio - STMicroelectronics - STM32 AI,目前这个软件是免费的,应该是处于软件的公测期间,只需要填写对应的个人信息,就可以获取激活码使用。相关例程文章可以从以下网址看到直流电弧故障检测 - STMicroelectronics 图 1 ST Edge AI Suite 不过这个软件在对于STM32H7S78-DK开发板的支持上似乎存在一些问题,在内存配置上与实际使用存在较大的差异,从图片上可以看出,内存只是调大到了621kb,就提示超出内存了。实际上STM32H7S78-DK开发板的可用内存应该是32MB+620KB,FLASH应该是128MB+64KB。看了一下,这个软件对于各种开发板,目前只支持使用内部存储和内部内存,也就是说如果想要得到一个比较好的训练模型,需要选择相同架构的芯片,内部存储大些的芯片。 图 2 NanoEdge AI Studio项目创建页面 目前软件的传感器部分似乎并没有提到图像处理这一块,而在本次实验中,需要对图像进行分析处理,近似于图像处理的概念,这里直接使用的。不过有其他传感器进行分析的话,使用这个工具,效果应该还是不错的。工具栏左边有四个主要按钮,左边四个按钮是新工程的类型,右边三个是工具。 图 3 NanoEdge AI Studio主页 Anomaly Detection [计]异态检测; 用例:使用一个静态模型来区分n个不同的状态。 用户输入:表示所有不同状态(类)的信号示例(用于库选择和模型训练)。 工具输出:直接应用于目标处理器的预先训练的分类库将立刻训练学习。 图 4 NanoEdge AI Studio Anomaly Detection n-Class Classification: n类分类: 用例:使用一个静态模型来区分n个不同的状态。 用户输入:表示所有不同状态(类)的信号示例(用于库选择和模型训练)。 工具输出:直接应用于目标处理器的未训练的分类库将立刻训练学习。 图 5 NanoEdge n-Class Classification 1-Class Classification:单类分类: 用例:使用静态模型检测数据中的异常情况。 用户输入:仅表示正常状态的信号示例(同时用于库选择和模型训练)。 工具输出:直接应用于目标处理器的未训练的离群值检测库将立刻训练学习。 图 6 NanoEdge 1-Class Classification Extrapolation: 外推预测; 用例:使用静态模型,使用其他已知参数估计未知目标值。 用户输入:将已知参数与其目标值关联起来的信号示例(用于库选择和模型训练)。 Studio输出:直接应用于目标处理器的未训练的回归库将立刻训练学习。 图 7 NanoEdge Extrapolation SF: Sampling Finder 此工具旨在帮助您找到适合用于您的项目的合适的采样率和采样大小: 在涉及带有传感器的时间序列信号的人工智能应用中,选择最优采样率和采样大小往往是一项困难的任务。“采样查找器”使您能够自动确定可能的最小的采样大小和采样持续时间,同时保持最高的区分百分比。 您需要连续的数据: 要使用“采样查找器”工具来找到采样率和采样大小的适当组合,您需要为其提供具有尽可能最高的采样率和最长持续时间的连续数据。这将允许该工具对你的信号进行子采样和分割,以做出准确的估计。 图 8 NanoEdge DL Data Logger Generator 图 9 NanoEdge DM Data Manipulation 图 10 NanoEdge SF Sampling Finder 显示界面设计TouchGFX题外话,这里在屏幕显示这部分,也是使用TouchGFX工具生成界面及工程文件。这里顺便也就讲了关于TouchGFX的相关信息 安装这部分,比较简单,在ST官网内搜索touchGFX,或者直接点击相关链接TouchGFXDesigner - TouchGFX is delivered as an X-Cube-TouchGFX package - STMicroelectronics 图 11 TouchGFX DESIGNER 图 12 创建工程界面,选择对应的开发板 图 13 单功能例程界面 图 14 多功能集成例程界面 图 15 可选按钮格式 图 16 可选图片样式 图 17 可选容器样式 图 18 可选形状样式 图 19 进度条设计 图 20 其他各种样式 目前这个工具生成可以选用的组件还是比较多的,而且很多地方可视化操作,非常的方便,在使用过程中,不需要太多的纠结于程序设计部分,这一点比LVGL要更加方便,默认是包含很多样式的,会PS的同学,也可以自己设计图片,替换成想要的样式,还有一些细节动画如果需要实现的话,还是需要学习TouchGFX的源码的,这里可以使用基本概念 | TouchGFX Documentation给的文章进行深入学习,后续有时间,我也想在这方面有一个全面的了解,生成的代码推荐使用STM32CubeIDE编译执行,使用TouchGFX会出现连接不上单片机的问题,这个问题目前来说影响不大。 这里有一个小细节,在生成的模板中,需要将一个文件的内容进行调整才能正常执行。Middlewares\ST\STM32_ExtMem_Manager\nor_sfdp\stm32_sfdp_driver.c。这部分初始化内容因为调用的是systick延时,但是系统使用的是freertos系统,freertos推荐的时钟是通用定时器,而不是systick,而systick是HAL_Delay()函数需要使用的时钟,不开启sys时钟,会导致HAL_Delay()函数进入死循环。Boot工程如果启用定时器中断的话,测试了一下会因为不明原因卡住,不会提示任何错误,这里使用CPU延时,来达到相近的效果。修改位置以及方式如下。 图 21 需要修改才能正常执行的代码部分 步进电机控制介绍一由于程序的工程量比较大,加上测试了一下其他的工具软件,一时半会没有完全弄完,在后续的评测中,会逐渐补全这部分内容,本期测评,介绍一下当前完成的内容。下周在电机测试实验中,进行进一步介绍,相关源码部分参考本文最后的源码链接,test_branch分支中。 首先是对需要使用的变量进行重定义,重定义的好处是增强可读性,以及方便后续对变量类型的修改。这里主要是“XYval”与“XYZval”的模板定义 图 22宏定义与重定义 XYval模板主要是对两个自由度情况下的轴相关参数进行定义,包含的内容也只有两个元素。在后面的定义中,一部分是对这个结构体的基本操作函数的定义,另一个部分是对与其他类型结构体进行计算的重载。正常结构体是不能直接对整体进行加减乘除的,但是进行运算符重载后,告诉编译器如何处理加减乘除运算,就能够直接对结构体进行整体运算。后面的XYZval的定义也是相同原理,其中的一部分运算重载,需要用到Xyval里面的内容。 图 23 XYval模板 图 24 对一些轴是否开启的检测 图 25 类定义,常用的一些变量以及函数命名 图 26 相关变量定义 图 27 静态变量及宏定义 图 28 动作执行与延迟宏定义 图 29 引脚功能宏定义 图 30 引脚初始化相关定义 图 31 引脚脉冲控制相关宏定义 图 32 延迟函数相关定义 图 33 步进电机控制中断函数 图 34 各轴初始化部分 图 35 脉冲处理生成函数 图 36 运动参数块计算 图 37 时间间隔计算 图 38 方向计算 图 39 S加减速计算 图 40 各轴开启关闭与中断函数 图 41 规划类参数及变量设计 图 42 获取当前的块信息 图 43 块梯形运动计算 图 44 头尾相接部分计算 图 45 反向传递函数实现 图 46 从头到尾扫描函数实现 图 47 正向传递函数实现 图 48 重新计算所有块的梯形速度轮廓 tensorflow安装与测试tensorflow准备工作电脑的操作系统更换。这里需要注意,使用tensoflowGPU加速训练,目前必须使用linux系统,windows系统最新版本已经不再支持GPU训练部分,tensorflow的官网目前已经修改为另一个网站,https://tensorflow.google.cn/?hl=zh-cn,原来的tensorflow说明以及github上的说明尚未修改,这里需要补充注意。 推荐使用的操作系统是ubuntu24.04,这个是最新版本的ubuntu操作系统,这里简单介绍一下系统的安装,由于涉及到对系统文件的管理,没有安装过的同学自行备份好自己的重要文件,防止在安装过程中错误选择而导致整个电脑无法使用。详细的双系统安装过程也可以参考网上的大部分教程,内容基本上相差无几。 首先Ubuntu系统从官网下载好,为了节约时间,我这面使用的原版的系统,而不是带有特色功能的操作系统,由于目前安装过程中需要截图,这里使用虚拟机作为演示操作。如果你本身使用的操作系统就是linux的操作系统,比如deepin等国产操作系统,那么接下来的步骤会比较简单,如果是使用的windows的操作系统,则需要下载一个U盘烧录软件。这里推荐使用rufus这个软件,在写入的过程中使用dd模式写入。rufus这个软件的下载与安装,这里可以直接从网络上找到。 选择下载好的系统镜像文件开始写入U盘存储中。 图 49 rufus软件界面 图 50 镜像写入方式选择 U盘写入好系统,直接进行安装,这里注意的点是,一个是系统的磁盘大小,由于需要跑深度学习,最好是使用1T以上的存储空间,部分模型的体积比较巨大,以及在研究学习过程中,会产生大量的文件,这里强烈推荐有条件的同学,将内存空间分配到2T以上。由于本人使用的组合是window与linux系统的组合,linux与linux的双系统组合特别简单,使用过linux的同学应该都会,这里就不多加以说明。 启动启动环节,进入BIOS设置,特别注意,如果是游戏本的话,需要先关闭独显直连,否则进入BIOS无法显示界面信息。如果不清楚使用哪个快捷键进入BIOS设置,可以直接在Windows中从系统->恢复->高级启动。重启后会显示一个全新的蓝色启动界面, 设置好启动方式之后,开始从U盘启动,进入如图片显示的界面。 图 51 windows系统高级启动中进入BIOS Ubuntu系统安装从U盘启动进入系统后,会弹出以下的引导选项,这里直接选择第一个选项即可。 图 52 ubuntu启动方式选择 然后进入系统加载页面。 图 53 系统启动页面 系统准备好后,进入系统安装工具界面,默认是英文选项。 图 54 安装软件加载页面 这里需要向下拉动,选择中文选项即可。 图 55 语言选择页面 接下来是辅助功能的选择,这里选择对应的需要的辅助功能,也可以不做选择。 图 56 辅助功能选择界面 键盘布局选择,这里选择汉语键盘。 图 57 键盘布局设置 网络连接这部分,这里推荐连接网络,这样在安装过程中,就把需要更新包接安装好了,只是需要等待的时间长了一些。 图 58 网络设置 接下来设置需要进行的内容,这里选择安装Ubuntu,将系统安装到电脑硬盘中。 图 59 安装设置 安装方式这里选择交互安装,由于没有对应的自动安装脚本,这里还是选择手动安装。 图 60 安装方式设置 安装的内容选择扩展集合,由于后续使用中,可能会用到一些其他的软件,这里还是推荐将一些附带的软件也一并安装上。 图 61 安装内容设置 这里的一些扩展软件也是选择全部安装,点击下一步后,会卡顿一段时间,需要耐心等待完成。 图 62 推荐软件设置 这里选择安装位置,一定要选择手动安装,因为是双系统的缘故,这里使用的是虚拟机,看不出一些特定选项,这里重点需要说明,不使用手动,可能会把windows系统的一些分区格式化掉。 图 63 安装分区设置 这里显示的是虚拟机的磁盘状态,实体电脑上一定要注意每个磁盘的类型及分区是做什么用的,选择预留好的空白分区空间,显示的就是剩余空间这个名称。 图 64 磁盘空间界面 由于这里使用的是虚拟机的空白磁盘,需要新建一个efi启动分区,存放efi文件,这里需要特别注意的是,双系统情况下,千万不能直接使用一个efi分区,会导致启动错乱,也不能将原有的efi分区给格式化,这里可以直接在最下的“用于安装引导程序的设备”选项。 图 65 efi启动区设置 这里再新建一个Boot分区,用于存放linux系统启动需要的系统文件以及更新中的内核文件等。 图 66 boot启动区设置 一般情况下,选择原有的efi分区即可,efi分区的格式一般会显示fat32或者vat。使用下图中显示的选项后,会自动将分区原来的efi分区挂载到系统的/boot/efi目录中,并且最后的格式化选项也不会显示勾选的状态。这时候就是表示可以继续进行下一步的安装了,每个部分的系统都是正常工作的。 图 67 引导设置 最后设置一下根目录的安装位置。 图 68 根目录设置 需要注意的是,如果想要更好的体验,比如哪天系统崩溃了,不想重新弄了,但是又有很多重要的个人文件在里面,这时候,就需要对根目录下的文件夹进行进一步细分。以2T的空间为例子,可以将Home单独设立一个分区,也可以将Var单独设立一个分区,Var一般存放的都是一些系统日志信息。这里我这面的系统崩溃了,之前没有做分区处理,现在只能将一些重要的文件备份出来。 图 69 最终磁盘设置效果 这里设置自己的用户信息以及密码。 图 70 账户信息设置 时区选择,地点还是选择上海。 图 71 时区设置 最终开始执行安装,这部分只要是U盘里的系统正常而且完整,都不会出问题。 图 72 最后安装环节 这里显示的是后台的命令行安装过程,linux系统的强大就在于很多任务与操作都可以通过命令行来实现。 图 73 安装时的后台进程 在安装的后续环节,可以点击上方的蓝色信息,查看ubuntu的相关帮助信息。 图 74 最终安装时的帮助信息 到了这一步,Ubuntu24.04LTS(Noble Numbat)基本上算是完全完成了,接下来就需要对系统进行一些设置操作。 图 75 系统最终安装完成 进入系统后,弹出的欢迎界面,这里可以设置一下,ubuntu pro服务,对个人用户免费,算是系统更新的一个高阶版本,在ubuntu官网中可以看到这部分选项。 图 76 系统进入界面 在安装过程中,可以根据自己的喜好来调整相应的系统设置。由于这部分 最后在安装完成之后,回到window系统,修改注册表信息,保持两边系统的时间一致,windows系统设置成使用UTC时间,具体步骤如下: 打开Windows的注册表编辑器。可以通过按Win + R打开“运行”对话框,输入regedit,然后按下Enter键进入注册表编辑器。 浏览到以下路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation。 右键点击右侧窗口,选择“新建 > DWORD (32-bit) 值”,然后命名为RealTimeIsUniversal。 双击新建的RealTimeIsUniversal项,将数值数据设置为1。重启电脑以使更改生效。 Tensorflow安装由于本人的不知道是什么原因,ubuntu出现了严重的错误,这里在最终的模型训练环节,老是出现错误,这里正好借着这个机会,记录一遍tensorflow与keras的安装过程。 图 77 不能正常执行指令 进入系统之后,更新系统源。 图 78 更新当前系统所有信息 接下来安装python需要的库文件内容。 图 79 安装venv pip软件 安装完成之后,需要设置一个虚拟环境,在后续的操作中,都需要先激活这个虚拟环境,然后才能够使用对应的软件。这里虚拟环境,tensorflow官方还推荐docker,不过由于政策原因,国内基本上是无法访问docker官网的,更加无法使用docker的镜像了,这个推荐的方法目前来说已经实效了。还有推荐使用anaconda,这里不想使用的原因也是包含的程序内容有些太老了,不太想去使用。 图 80 设置虚拟环境 设置好之后,进入虚拟环境 图 81 进入设置好的虚拟环境 接下来安装keras,https://keras.io/getting_started/,安装方式可以查看官网网站,这里安装需要花费一些时间下载pypi.org搜索下载,然后安装。中途如果网络异常,下载失败,需要重新执行该条命令,重新下载。 图 82 安装keras 安装完成后,准备更新pip工具包,准备安装tensorflow。tensorflow的安装方式有好几种,最好的是源码安装,tensorflow的源码地址https://github.com/tensorflow/tensorflow,不过这里需要使用bazelisk打包,很奇怪的是这个官网目前也是访问不了的,目前尚未找到比较好的方法。所以还是在虚拟环境下直接安装。 图 83 更新pip工具包 cuda-toolkit https://developer.nvidia.com/cuda-toolkit-archive cnn https://developer.nvidia.com/cudnn-downloads 安装cuda相关程序 图 84 下载安装包 图 85 安装安装包 图 86 安装cuda相关软件 需要重启电脑 图 87 检测显卡状态 图 88 其他相关库文件 图 89 直接安装tensorflow 图 90 安装依赖库文件,重试安装tensorflow 图 91 其他相关涉及到的库文件,重试安装tensorflow* 图 92 安装tensorflow后状态 这里也可以选择安装tensorrt,这里由于之前的版本更新,导致新版tensorflow安装后,无法使用GPU进行加速,具体是什么原因导致的,直到今天还没有完全弄清楚,在后续的评测中,针对这一问题,会做出详细的解决方法。目前待完成的工作还比较多,很多还没有弄完,各位同学有兴趣也可以自行摸索解决这个不能使用GPU加速的问题。 图 93 使用GPU加速计算产生错误问题 源码地址 |
【STM32H7S78-DK】汽车仪表系统
【STM32H7S78-DK】基于 rtthread 适配 lcd 驱动移植 lvgl
【STM32H7S78-DK评测】TouchGFX (QR Code)二维码生成器
【STM32H7S78-DK】rtthread 增加 psram 内存管理
【STM32H7S78-DK】开箱与rtthread工程初体验
【STM32H7S78-DK评测】-5 LVGL&DMA2D DEMO测试
【STM32H7S78-DK评测】-4 LTDC&DMA2D 基本测试
【STM32H7S78-DK评测】CoreMark移植和优化--兼记printf重定向实现方法及常见问题
【STM32H7S78-DK评测】移植AI框架TensorFlow【DSP指令加速篇】
【STM32H7S78-DK评测】移植AI框架TensorFlow【下篇】
请问这个步进电机用了什么算法?
请问安装tensorflow 后 准备用来做哪些相关STM32H7的工作?
你这拿一堆东拼西凑乱抄的东西,蒙谁呢?
这篇帖子明显就是东拼西凑,滥竽充数的