加入交流群  

扫一扫,添加管理员微信
备注:参考设计,即可被拉入群
和也在搞设计小伙伴们碰一碰

收藏 

评论 

黄土马家 发布

【训练营】就决定是你了,皮卡丘大侦探!

 
设计简介

设计思路

机械狗遇上鸿蒙,会碰撞出怎样的火花~做机械狗之初,问了下身边人的建议,做成什么样子好。“要好看”、“要智能好玩”、“要能遛”、“要能看家护院”、“要能陪我聊天”,嗯,调研过需求后发现,机械狗还是很有搞头的,拓展性很高。
正好搭上训练营顺风车,思考了一段时间后,基于本人对皮神的喜爱,决定将这个项目取名:皮卡丘大侦探。基本的功能设计如下:
image.png
站在巨人的肩膀上,事情做起来就会方便很多。用业余时间,把训练营的课程过了一遍,功能基本大致有谱了。
  • 海思 Hi3861模组做主控,基础控制功能可以分为三种。静止角度控制比较简单,例程有角度控制API可以调用,动态控制也相对简单,更改数组参数即可。步态控制要研究一下,看资料要控制相位差
  • 智能化方面,手头刚好有涂鸦的nano开发板,之前立创社区也合作过活动,正好物尽其用。这样就比较方便的实现App控制,后续手机面板也好开发。要看SDK的资料情况,开发Hi3861的外设源码,拓展IO控制或者串口控制。
  • “看家护院”、“陪我聊天”这类功能,还是有点麻烦的,主要时间有限,摄像头音视频实时传输资料hi3861资料还没找到。索性直接用之前做的IPC转接板,接之前做过的成品好了,殊途同归。
  • 至于硬件外壳,没那么擅长,就按课程教的复制好了,当然皮神要用亮黄色。后续改版,腿部应该要做相应的设计调整
PS.本来设计是摄像头用云台,直接把云台的舵机接到转接板上,就可以在摄像头界面直接控制狗的转向。转接板都设计完了,没想到后边发现云台太重,机械狗带不动,最后只好忍泪换成了卡片机。

硬件设计

PCB画板

之前一直没有机会在立创EDA上实操做项目,应该有很久没有自己画板了,这次体验了一下,还好底子还在,一稿通过。给立创EDA打call,免去了安装AD的麻烦,在线用起来没有太多问题,双层板流畅随便画。
PS.中间遇到了一些小问题,不同PC端,谷歌浏览器加载工程有问题,一直打不开,换了个浏览器就好了。专业版问题已经反馈FAE。
主控板:
主控板原理图根教程里的类似,Hi3861做主控,为了方便布线和后续插拓展板,将PCA9685放在底面,拓展引脚放在模组两侧。
image.pngimage.png
拓展板:
拓展板直接用的之前做过的项目,本来想直接接云台,奈何重量太重,最后改用了IPC卡片机,这个转接板这次也就没用上,后边留着以后的项目用吧~
image.pngimage.png
上一个预期效果图,本来打算是这样子,放在大侦探背上,后边由于超重换成了卡片机。不过做项目嘛,本身就是按照实际情况灵活调整,毕竟时间有限,活还有很多~
image.png

硬件结构

外观硬件结构,solidworks 入门依葫芦画瓢。这一套流程下来,还是挺有收获的,小腿的垫片很重要这里要注意一下,看的仔细就不会漏掉,要么装配的时候会不平整,看到有很多同学遇到这个问题。
为了尺寸精准,基本所有尺寸都没变,做完项目后来看,脚底是可以改一下,增加受力面。然后固定板子的定位柱尺寸和课程里PCB 7*4cm是不配套的,应该要修改一下,还好都是小问题,总体走下来还算顺利。
image.png

组装调试

在心心念念的期待中,立创一条龙服务的板子和物料到了。抽个下班时间开始焊接调试,还好焊接功夫没还给老师。
image.png

image.png
这里也有个小坑,买来的按键和PCB上的封装不对应,第一遍烧录固件的时候没起来,排查下去发现EN脚的电平一直拉低,万用表测了下发现按键没生效,于是最后改了一下方向,只焊接了两个触点,搞定。
image.png
烧录搞定,亚克力切割片到位,开始组装,皮卡皮!
image.png
先装腿,再装身子,凭借猜想,螺丝没拧错,有点那个味了~
image.pngimage.png
组装成品的时候,遇到问题了,仔细看装配图和效果图腿部是反的。看来教程里和实物也没对应啊,纠结了一下按课程视频为准,用下边这个方向装了。事实证明,影响不大,角度决定位置,正反装静态姿态会有些差别。
image.pngimage.png
成品装好,来吧,展示~
image.png

软件设计

环境搭建

Ubuntu 教程提供了镜像还是比较方便,下载编译一条龙。顺便也研究了下 python 环境,本来想为什么是两个语言都有,看完程序,python其实也是传的json数据给模组,底层还是要靠C的。考虑后续要拓展App功能,要改动底层,就只简单试了下python的函数功能,后续开发均基于C语言的SDK包进行。
image.pngimage.png

基础功能

第一次烧录完成后,测试发现除了安装模式外,其余模式效果都一样。看了下源码,原来例程里写的参数都一样。正常到了这步,应该训练营的基础功能就可以实现了。
image.png

const char *html = "<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>传智教育元气派</title><style> body {user-select: none;text-align: center;} table {margin: 0 auto} td div {width: 150px;height: 150px;border: 1px solid darkgrey;display: flex;align-items: center;justify-content: center;color: black;} #s {background-color: red;color: white;} td div:active {background: deepskyblue;color: white;} button {margin: 0.5rem;width: 9rem;height: 3rem;font-size: 1.2rem;border-radius: 1rem;} button:hover {border-radius: 1rem;background-color: deepskyblue;color: aliceblue;}</style></head><body><h1>鸿蒙狗控制</h1><button id="a">安装模式</button><br>





<br>
<button id="b">原地踏步</button><br>
<br data-tomark-pass>
<button id="c">蹲下</button><br data-tomark-pass>
<br data-tomark-pass>
<button id="d">前进</button><br data-tomark-pass>
<br data-tomark-pass>
<button id="e">后退</button><br data-tomark-pass>
<br data-tomark-pass>
<button id="f">左转</button><br data-tomark-pass>
<br data-tomark-pass>
<button id="g">右转</button><br data-tomark-pass>
<br data-tomark-pass>
<script> function u(p) {return `${p}`;}function g(i) {return document.getElementById(i);}function fe(e, f) {e.addEventListener('click', function (e) {/* do something*/f();});}function fg(u, f) {let x = new XMLHttpRequest();x.onreadystatechange = function () {if (this.readyState == 4 && this.status == 200) {f(x);}};x.open("GET", u, true);x.send();}function fp(u, d, f, p) {let x = new XMLHttpRequest();if (p) {x.upload.addEventListener('progress', function (e) {p(e);});}x.onreadystatechange = function () {if (this.readyState == 4 && this.status == 200) {f(x);}};x.open('POST', u, true);x.timeout = 45000;x.send(d);}
fe(g('a'), () => {fg(u('/dog/init'), () => {});});
fe(g('b'), () => {let data = {"type": 3, "count": 30, "list": [[74, 111, 24, 151, 24, 151, 74, 111, 100], [24, 151, 74, 111, 74, 111, 24, 151, 100]]};fp(u('/dog/cmds'), JSON.stringify(data), () => {});});
fe(g('c'), () => {let data = {"type": 3, "count": 30, "list": [[74, 111, 24, 151, 24, 151, 74, 111, 100], [24, 151, 74, 111, 74, 111, 24, 151, 100]]};fp(u('/dog/cmds'), JSON.stringify(data), () => {});});
fe(g('d'), () => {let data = {"type": 3, "count": 30, "list": [[74, 111, 24, 151, 24, 151, 74, 111, 100], [24, 151, 74, 111, 74, 111, 24, 151, 100]]};fp(u('/dog/cmds'), JSON.stringify(data), () => {});});
fe(g('e'), () => {let data = {"type": 3, "count": 30, "list": [[74, 111, 24, 151, 24, 151, 74, 111, 100], [24, 151, 74, 111, 74, 111, 24, 151, 100]]};fp(u('/dog/cmds'), JSON.stringify(data), () => {});});
fe(g('f'), () => {let data = {"type": 3, "count": 30, "list": [[74, 111, 24, 151, 24, 151, 74, 111, 100], [24, 151, 74, 111, 74, 111, 24, 151, 100]]};fp(u('/dog/cmds'), JSON.stringify(data), () => {});});
fe(g('g'), () => {let data = {"type": 3, "count": 30, "list": [[74, 111, 24, 151, 24, 151, 74, 111, 100], [24, 151, 74, 111, 74, 111, 24, 151, 100]]};fp(u('/dog/cmds'), JSON.stringify(data), () => {});});</script></body></html>";
源码可以看出,只有两个参数数组[74, 111, 24, 151, 24, 151, 74, 111, 100], [24, 151, 74, 111, 74, 111, 24, 151, 100],只要做好这俩数据,基础控制的静止角度控制和姿态控制可以实现了。还剩下一个步态的控制,用提供的工具生成数组测试了一下,效果有,不过感觉并不流畅,离网上看到的效果还差蛮多,没达到满意的效果。
image.pngimage.png
网上看了一些机械狗的资料和朋友问了一下(特别鸣谢 小乙 同学),大约明白了机械狗的步态原理,摆动腿和支撑腿只要有一定的相位差,就可以走出不同的步态。
image.png
image.png
基于这个原理,模拟了一条腿的路径。然后就开启了漫长的调试过程,控制函数为了和web端区分做了简单封装。
最后基础控制模式,静态、动态、步态,总共保留了十六个姿态,当然不是每个都调试的很完美,毕竟还有很多功能排期等着呢~
image.png智能功能
作为 IoT 行业的开发者,接下来就时重头戏给项目加上智能化的功能呀。看需求,手机控制、摄像头画面、音箱控制,接入云端之后都可以一并解决。通过Hi3861通过转接板接入云平台,摄像头也接入同样的云平台,方便后边接入音箱的控制功能。
image.png

image.png
面板端第一个版本做的比较弱,直接用面板工作台搭建。后边针对UI做了一次优化升级,看起来就顺眼多了。
image.png
本来打算把模式名都换成技能名称,电光一闪、十万伏特什么的,怕调试时候姿态对不上忘了,就改了下边的几个。
image.png

成品功能展示

皮卡丘大侦探,成品
image.png
手机控制四个方向,按暂停回到安装初始状态。十二个静态、动态、步态模式。可点击按钮进入大侦探摄像头模式,进行巡逻监控。摄像头支持对讲功能。支持天猫精灵语音控制。
搞定收工,去吧,皮卡丘!
image.png
image.png

视频链接

B站视频链接:https://b23.tv/8AalVBd    
舵机调到最后有一个坏了,可以看到步态有个腿没那么正常,不过也无伤大雅了。
还好有其他的视频有保存的,其他视频见如下附件。

参考设计图片
×

!注意:请使用浏览器自带下载,迅雷等下载软件可能无法下载到有效资源。

 
群聊设计,与管理员及时沟通

欢迎加入EEWorld参考设计群,也许能碰到搞同一个设计的小伙伴,群聊设计经验和难点。 入群方式:微信搜索“helloeeworld”或者扫描二维码,备注:参考设计,即可被拉入群。 另外,如您在下载此设计遇到问题,也可以微信添加“helloeeworld”及时沟通。

 
查找数据手册?

EEWorld Datasheet 技术支持

论坛推荐 更多
更新时间2024-11-18 16:38:32

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版 版权声明

EEWORLD参考设计中心

站点相关: TI培训 德州仪器(TI)官方视频课程培训

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved