刘潇翔:基于 OpenHarmony 的仿生四足狗开发分享
说起人工智能机器人界的网红,那就不得不提到——“机器狗”。此前,著名机器人公司波士顿动力制造的“Spot”机器狗、国内知名科技企业蔚蓝科技自主设计研发的“阿尔法”机器狗、小米仿生四足机器人“CyberDog”都曾火爆全网。
机器狗的开发需要硬件、软件及运动行为三者达到协调,并不是一件容易的事,而在嘉立创 EDA 与传智教育联手举办的《仿生机器狗训练营》中,特等奖获得者刘潇翔脱颖而出,他从 0-1 打造了一个基于 OpenAtom OpenHarmony(以下简称“OpenHarmony”)系统的机器狗,并将在本文中带来一些开发过程中的心得体会分享。
个人介绍
大家好,我是刘潇翔,现就读于南方科技大学(Southern University of Science and Technology)研一,修读的专业是智能制造与机器人。
开发项目简介
在这次训练营中,我从机械结构、电控硬件、控制算法、上位机等四个方面设计并制作了一款基于传智教育 Hi3861 IoT WiFi 模组主控,拥有十二自由度的桌面级四足机器狗—Puppy。
仿生四足狗—Puppy
已经合仓的代码链接
OpenHarmony 学习过程
我第一次接触到嵌入式开发,还是在立创 EDA&传智教育联合举办的物联网实战——智能开关训练营中。在此之前我对 OpenHarmony 系统了解不是很多,以为仅是运行在移动端与 PC 端的系统,但我还是对其充满好奇,毕竟这是为了打破技术封锁自主研发的系统。所以我也想了解 OpenHarmony 嵌入式开发,与常见的单片机 STM32、ESP32、ATmega328P 这些 MCU 的开发有什么区别。
传智教育旗下的 Hi3861 IoT WiFi 模组主芯片为海思 Hi3861V100,拥有完整的 WiFi 功能,支持采用 Micropython 或 C 语言开发。由于 OpenHarmony 的生态相比其他一些主流单片机,还比较单薄,所以辅助开发的相关资料搜集起来相对费力些。我总结了一下个人的学习流程,大致如下:
学习流程:
(1)搜寻并下载不熟悉芯片的硬件数据手册;
(2)参考在 Gitee 上开源的有关嵌入式的项目代码及文档;
(3)参考 OpenHarmony 开发者社区交流帖;
(4)通过各种搜索引擎(百度、搜狗、Microsoft Bing 等)查找相关文章;
(5)去 Bilibili 搜索相关内容,碰碰运气;
(6)QQ 群,碰碰运气;
(7)以上如果均未得到有效解决方案,根据已有资料,自己研究解决。
接触 OpenHarmony 最大的惊喜和具体的收获
要数接触 OpenHarmony 最大的惊喜,我认为应该是在官方提供的如何采用 C 语言开发的教学中提供了一种通过 SSH 实现在 WIN10 系统内编辑,在虚拟机 Ubuntu 系统里编译的方法,这个方法对我提供了不小的帮助。
其他惊喜与收获:
(1)传智教育 Hi3861 IoT WiFi 物联网模组的封装十分精致小巧,该 Hi3861 模组支持 FreeRTOS 系统,且支持用 Micropython、C 语言开发;
(2)初步了解 OpenHarmony 嵌入式开发的基本流程,并实现了个人需求的相应效果。
对于 OpenHarmony 系统的建议
(1)用来烧录程序的 Hiburn 软件无法保存偏好设置,UI 设计及操作界面也有些不够清晰。比如,每次打开都要手动把烧录程序波特率 115200 调到 921600;
(2)用来开发传智教育 Hi3861 物联网模组的一些基本工具库需要完善。比如,IIC 通信、SPI 通信、OLED 屏幕、TFT 屏幕、MPU6050 传感器等常用模块的驱动;
(3)传智教育 Hi3861 模组在 Linux 环境下编译调试时,不方便找到报错信息。
项目技术过程分享
(1)机械结构部分采用 SolidWorks 2020 设计,通过 FDM 式 3D 打印制造。其主要设计内容包括躯体与单腿。单腿机构采用平面四连杆构成并联腿,拥有 3 自由度,设计思路是尽量减轻腿部重量,并且使三个电机安装的位置紧凑集中。躯体采用模块分立结构设计,方便维护更换及升级;
(2)电控硬件部分采用立创 EDA 专业版设计。关于 12 路舵机驱动主要由 PCA9685PW 管理,Hi3861 物联网模组主控,供电部分采用了一个 DC-DC BUCK 型降路压电路,支持最大电流 6A,保证电机及控制电路供电充足;
(3)软件部分采用 Clion 作为编辑器,linux 环境下编译。在实现主单腿正逆解、足端摆线轨迹规划的基础上,实现了四足机器狗的 Trot 小跑步态运动,姿态逆解控制等;
(4)机器人的远程控制 App 基于 Android 开发,与四足机器狗之间采用了 UDP 协议实现无线通信。
项目过程中遇到的困难 &解决办法
困难:
Hi3861 模组焊接完成后,按 EN 复位,串口输出为乱码。
检测结果:
(1)拆除 WS2812B 灯珠后,串口即能输出正常信息;
(2)拔下 MPU6050 模块后,串口即能输出正常信息。
解决方案:
(1)拆去连接 IO2 引脚的 WS2812B 灯珠;
(2)拔下连接 IO7、IO8 引脚的 MPU6050 模块。
疑似原因:
Hi3861 模组烧录时,特定引脚不能外接设备。
当我一开始发现输出乱码,惯性上会首先思考 MCU 的焊接是否良好、串口通讯的电路是否正常、芯片供电是否正常、EN 按键是否正常等问题。后来能顺利解决问题也是在检查上面所有问题后歪打正着,意外拆掉那颗 WS2812 灯珠后才发现复位正常了。
项目开发过程最重要或最值得分享的心得
(1)开发过程中卡壳,先检查硬件问题,再检查软件问题。
硬件问题一般比软件问题更麻烦一些,毕竟可能遇到需要重买材料、重新制板等时间成本较大的修补措施。
硬件问题检查:一般采用控制变量法把所有的嫌疑因素逐个排除。比如,先考虑各器件的焊接是否正常(可采用万用表蜂鸣档检测)。如果有 MCU 的电路先检查 MCU 及其外围电路,是否能够烧录程序。之后可通过写各种 Demo 小程序来快速测试其他硬件资源是否正常。
检查 MCU 及其外围电路是否正常,可以先观察焊接上是否有虚焊,连锡等情况。如果均无问题可接着测供电电压是否正常。同时需注意,用电端烧毁一般是电压问题,供电端烧毁一般是电流过大。
软件问题调试:如果有报错信息,就去阅读报错信息来调试代码。如果是语法错误就比较容易解决。如果遇到比如 LED 驱动不亮,先检查封装或 LED 焊反没,检查原理图上 LED 是引脚电平拉高还是拉低点亮。如果遇到采用 IIC 通讯的 OLED 屏幕无法点亮,先写简单的程序从大到小逐步测通,比如先使屏幕点亮,再试着点亮一个点,再点亮一条线,画出一个方块,写下一个字符。各种功能齐全后再组合调试出自己想要的效果。
而且单片机开发调试时不应该光敲代码,中间需要穿插烧录到单片机看是否能够实现效果。问题多的话尽量分阶段解决,而不是汇总到最后一起解决,不然很可能会出现找不到哪里出错的。
(2)优质的问题获得优质的回答。
提问者要多思考,如何阐述清楚自己的问题,考虑是否方便回答者能简洁地回答自己的问题,比如对方只用回答是还是不是。
比如自己的代码编译报错,如果问为什么自己的代码跑不起来,为什么自己的 LED 灯不亮了,这无疑很难获得自己想要的答案。因为开发的时候碰到的 Bug 会有千万种,但是正确的跑通道路却只有一条。如果代码报错,自己首先要去检查所报错的代码段,细化大概在哪一行出现了问题,个人先去通过搜索、调试等手段尝试能否解决。
虽然有时太具体的问题也不太好回答,比如有人问自己想用 Hi3861 模组开发一款能够监测室内温湿度并实现浇水的智能浇花器。这类问题涉及的内容就比较多,也不好获得自己想要的回答。调整一下的话,比如可以在问题最后加上,哪款温湿度传感器比较推荐,浇水用哪款电机比较合适等之类细化一些的问题。
(3)做项目,要一边开发一边学习。
想做一个项目,不像之前我们所接触的教育那样,先把一个领域全方面熟悉摸透后再去做。毕竟想摸清某个领域都是很不容易的。要明确知道自己的需求,自己想要实现什么,大概可以怎么样去实现,然后再去学习。需要用什么去学什么,需要用多少就学多少,除非自己对某方面非常感兴趣。这样才有可能快速地去完成自己的需求和实现想法。
做项目也是多做才可以更熟练,入门的话可以先跟着资料齐全,文档清晰的优秀开源作品复刻。做了几个后,随后就会慢慢摸索出自己如果想要实现新项目的开展思路。
接下来的开发计划
(1)完善曾经的项目
由于我对自己之前的一些作品感觉还有很多不满意、可以完善的地方,因此我计划去优化完善曾经一些老项目,包括结构设计、硬件设计、软件设计、项目文档等;
(2)开发一款电机调试器
毕竟我以后的工作很大概率会和机器人相关,预想的功能包括串口调试、CAN 调试、舵机调试、总线舵机调试、直流电机调试、功率测量、屏幕显示、PC 端上位机交互等。
机器人的发展前景是一片广阔无垠的星辰大海,OpenHarmony 也是一样,期待刘同学能够在这两个领域同时不断深耕,并把它们灵活结合起来,创作出更多具有生活意义的作品,切实地影响改善人们的日常生活。
评论