前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TinyML-6:移植到nrf52840淘宝开发板(带源码)

TinyML-6:移植到nrf52840淘宝开发板(带源码)

原创
作者头像
flavorfan
发布2021-01-24 22:23:23
2K12
发布2021-01-24 22:23:23
举报
文章被收录于专栏:范传康的专栏范传康的专栏

技术到了最后,都是要在实际生活中实践,才有活力;而不是曲高和寡,光是鼓吹技术多牛逼,没有切实改变生活,提高体验,产生经济价值,那样的技术都是耍流氓。

同样的,TInyML如果只在官方的几个平台玩,只跑hello word、magic wand多没有意思。笔者不是说一步到位,把Tensorflow lite micro玩出花,可以随便跨平台,搞出有趣应用;只是摸索出一套方法部分实践上解决跨平台的问题,可以移植到任意NRF52840的板子,有慧根的读者根据思路可以进一步扩展到其他平台。

来由

买了官方推荐的 ARDUINO NANO 33 BLE SENSE (¥330 海淘)的板子,同时手里有青风52840的板子(套件¥198,核心板¥20),想法很朴素:在TinyML官方例程跑熟练的基础上,把框架移植到同一芯片的平台的国内性价比模块上搞些好玩的应用。

过程

把同一核心芯片的应用从一个硬件平台(开发板)移植到另一个硬件平台;这样就能“旧瓶装新酒”,老平台的BLE通讯技术加上TyniML AI技术,岂不是母牛上天!想起来似乎很容易;但是问题没有那么简单。下图是我的探索路径,四处碰壁、断断续续。

image.png
image.png

问题总结

问题总结起来有:

  • RTOS方面:ArduinoBLE33的OS是Mbed + Arduino中间件,而52840淘宝板移植Mbed+Arduino是个问题;
  • 硬件(引脚)切换:ArduinoBLE33没有开源原理图,代码所涉及Pin管脚,是经过Arduino转换暴露出来的;曾经费劲力气铜鼓PIO框架系统把Arduino系统导入到青风52840,由于引脚不一致始终得不到预想的相应;
  • SDK和C++11不匹配:TFLite的库或者程序是用C++11编译的,NRF老的SDK不支持C++11,MDK也需要设置不同编译选项才能支持,新的NRF芯片的SDK改了个NCF的新名称,有很多高大上的特性,但是想用NUS(Nordic Uart Service)不支持了。

工作项目时间因素最终改变原来的平台,选择ST硬件平台。ST Cube AI对TFLite Micro做了一层自己的封装,好用到爆。你生成的模型无论是keras还是saved_model都支持,直接导入。

不过个人私下因为个人兴趣想办法解决了。

问题解决

简单的说,在Nordic 官方论坛看到一个官方实习生也在解决类似问题,不过他用的另外一个高大上的双核硬件,思路由此打开了。下面是示意图:

image.png
image.png

1) 利用tflite-micro的make工具链生成工程(作为lib的include)

代码语言:txt
复制
#生成 TARGET nrf5340pdk_nrf5340_cpuapp  TARGET cortex-m4 的工程    
make -f tensorflow/lite/micro/tools/make/Makefile TARGET=nrf5340pdk_nrf5340_cpuapp  TARGET_ARCH=cortex-m4 generate_hello_world_make_project

2) 利用生成 zephyr 编译库(参考build log) libtensorflow-microlite.a

代码语言:txt
复制
west -vvv build -b nrf5340pdk_nrf5340_cpuapp -p

3) 生成的工程路径

代码语言:txt
复制
tensorflow/lite/micro/tools/make/gen/
├── nrf5340pdk_nrf5340_cpuapp_cortex-m33
│?? ├── lib
│?? │?? └── libtensorflow-microlite.a
│?? └── obj
│??     └── tensorflow
├── nrf5340pdk_nrf5340_cpuapp_cortex-m4
│?? ├── lib
│?? │?? └── libtensorflow-microlite.a
│?? ├── obj
│?? │?? └── tensorflow
│?? └── prj
│??     └── hello_world

show me the code

https://github.com/flavorfan/nrf52840-fan

基于zypyr实现,关键技术其实就是zypyr的custom board支持,还有编译时支持external project 把tensorflow lite一起编译了,后面再把它搞成zypyr的库。以后开发就直接用这个库了。

Further Reading

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 来由
  • 过程
    • 问题总结
      • 问题解决
        • 1) 利用tflite-micro的make工具链生成工程(作为lib的include)
        • 2) 利用生成 zephyr 编译库(参考build log) libtensorflow-microlite.a
        • 3) 生成的工程路径
    • show me the code
    • Further Reading
    相关产品与服务
    物联网通信
    腾讯云物联网通信(Internet of Things Hub, IoT Hub)旨在提供一个安全、稳定、高效的连接平台,帮助开发者低成本、快速地实现“设备-设备”、“设备-用户应用”、“设备-云服务”之间可靠、高并发的数据通信。物联网通信平台不仅可以实现设备之间的互动、设备的数据上报和配置下发,还可以基于规则引擎和腾讯云产品打通,方便快捷地实现海量设备数据的存储、计算以及智能分析。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com