peng-zhihui / ElectronBot

GNU General Public License v3.0
8k stars 1.85k forks source link

ElectronBot: Mini Desktop Robot

Stars Badge Forks Badge Pull Requests Badge Issues Badge GitHub contributors License Badge website YouTube Video Views YouTube Channel Subscribers 喜欢这个项目吗?请考虑给 Star ⭐️ 以帮助改进!

本项目是一个桌面级小机器工具人,外观设计的灵感来源是WALL-E里面的EVE~机器人具备USB通信显示画面功能,具备6个自由度(手部roll、pitch,颈部,腰部各一个),使用自己修改的特制舵机支持关节角度回传。

本项目提供了配套的全套开发资料和对应SDK以供二次开发,SDK使用说明见后文。

视频介绍【自制】我做了个能动的 电 脑 配 件!【软核】_哔哩哔哩

Video : I made a cute mini desktop robot ! - YouTube

注意:Issues里面是讨论项目开发相关话题的,不要在里面发无意义的消息,不然watch了仓库的人都会收到通知邮件会给别人造成困扰的!!!灌水可以在仓库的Discuss里讨论!


更新说明:

22.4.5更新:

安装教程可以参考:

数码甲鱼的简单生活 同学的胎教级教程:https://www.bilibili.com/video/BV1sY4y1Y7t6

绿荫阿广同学的安装视频 :https://www.bilibili.com/video/BV1oY4y1v7oN

22.4.17更新:

1.项目文件说明

1.1 Hardware

Hardware文件夹内是ElectronBot里面用到的所有电路的原理图和PCB文件,提供Altium Designer格式的源文件以及Gerber格式的光绘文件用于提供给厂家进行直接加工。

一共有如下几块板子:

1.2 Firmware

Firmware中提供了上面所有板子的固件源码,主要包含以下两个工程:

工程都是基于STM32HAL实现的,所以提供了对应的.ioc文件,可以自行用STM32CubeMX打开,生成对应的keil或者STM32IDE工程文件。当让也可以像我一样,用CLion进行编译和下载,把CLion变成STM32的IDE的方法参考我之前发的一篇教程:配置CLion用于STM32开发【优雅の嵌入式开发】

1.3 Software

Software中提供了视频里演示的上位机软件ElectronStudio的Unity工程源码,以及SDK库和SDK源文件,库的层级关系由下至上分别是:

ElectronBotSDK-LowLevel -> ElectronBotSDK-Player -> ElectronBotSDK-UnityBridge -> Electron-Studio

SDK的使用方法见后文。

此外文件夹里还包含了BotDriver也就是ElectronBot连接电脑需要安装的USB驱动文件,安装方法是在设备管理器里右键更新驱动,然后选择自定义目录导航到这个文件夹即可安装。

安装过程需要禁用Windows的强制驱动签名(没钱给M$买签名),禁用方法根据你的操作系统版本有不同,可以百度一下。

1.4 CAD-Model

文件夹中包含了ElectronBot的结构设计图纸,.step通用格式可以在所有软件里打开编辑;同时为了满足有的同学想要Fusion360里面的原始工程,我也共享了.f3d格式源文件,源文件里包含了完整的编辑建模时间轴。

共享连接:https://a360.co/3t6CUMS

此目录下也包含了视频里演示的oooooohmygosh同学设计的表情包动画,其中每个表情的动画都包含了三个片段:进入-循环-退出,进入和退出是可以和其他动画进行无缝衔接的,因此可以方便用代码调用这些表情包实现很多效果。

表情文件需要修改为英文名和路径后使用。

我把视频结尾提到的收纳盒也上传了,可以用FDM打印,5%填充即可。

1.5 Docs

相关的参考文件,包括芯片的Datasheet等。

此目录下还有个_LargeFiles文件夹,是软件过程项目中依赖的一些库(比如OpenCV)因为DLL比较大超过了100MB,GitHub需要开启LFS才能提交,而我不想开启LFS,因此单独拿出来压缩了提交到仓库,编译工程的时候需要把这些库放到对应工程目录下,具体的路径见 _path.txt

2.硬件架构说明

机器人的硬件分为结构电路

2.1 结构设计

结构设计方面大家可以研究3D图纸,值得注意的点如下:

主要部件的加工方式?

手臂的驱动原理?

脸部的透明玻璃如何制作的

安装顺序?

可以参考这位绿荫阿广同学的安装视频 :https://www.bilibili.com/video/BV1oY4y1v7oN

2.2 电路设计

电路没啥好分析的,直接看原理图吧。

值得提一下的是USB-HUB的拓扑,如下:

关于芯片选型?

关于烧录方式?

关于舵机的改造?

关于摄像头选型?

3.软件架构说明

3.1 固件代码

固件代码的细节和流程说明比较繁琐,晚点我慢慢补充吧,总之可以直接基于前面提到的方式进行编译下载,然后慢慢研究源码。

STM32F4的源码如果通过.ioc重新生成工程的话,记得要把USB相关的几个文件预先备份,生成完代码后再替换回我原来的文件,因为CubeMX会覆盖生成把相关代码修改掉(我实际是使用Git的文件版本回退操作的 )。

3.2 舵机I2C协议

魔改后的舵机通过I2C接口和控制板进行通信,STM32F4的控制板为主机,舵机为从机。通信的过程始终是主机发起的,主机首先下发位置、参数等指令,然后即时取回相关数据完成一个通信来回。

每个舵机作为从机接收两个地址的指令:自己的ID号,以及0号广播。广播用于在没有给舵机设置地址的时候作为通配地址使用(比如你刚烧写完舵机固件,此时舵机的Flash是没有储存自己的ID的,只能通过0号地址通信)。

值得注意的是:舵机和主机的上电需要有先后顺序,一定要先让从机初始化完成开始监听数据,再让主机发送指令!

如果主机发送指令的时候从机不响应,或者多个舵机地址相同同时响应,都可能引起通信错误,因此需要保证上述的顺序。

由于硬件上主机和舵机上电都是同时的,所以在主机的固件代码中,有一个延时2S的代码(其实可以不用那么久),就是等待舵机都上电初始化完成再开始通信。

调试的时候,一个舵机一个舵机调试,注释掉其他未连接的舵机的通信代码,不然也会造成轮询等待超时。

关于舵机的指令含义,感谢 leazer 同学在Issues整理的表格:

指令后续可能会更新。

3.3 SDK使用说明

SDK架构设计如图:

具体的使用方法可以参考SDK工程中给出的sample.cpp,我是用CLion+MSVC工具链编译的,大家也可以把源码复制到自己的Visual Studio工程编译。

ElectronBotSDK-UnityBridge工程编译生成的DLL文件需要拷贝到Unity\ElectronBot-Studio\Assets\Plugins目录下,用于连接本地的C++代码和Unity中C#环境。

对了,注意ElectronStudio中目前选择图片视频文件还不支持中文路径!

关于SDK的具体实现细节可以阅读源码,我晚点有空也会再更新描述。

有的问题在Issues里面已经解答了,问问题之前先翻一下open/closed的Issues。

感谢以下项目:

opencv/opencv: Open Source Computer Vision Library (github.com)

https://github.com/CMU-Perceptual-Computing-Lab/openpose

Lexikos/AutoHotkey_L: AutoHotkey - macro-creation and automation-oriented scripting utility for Windows. (github.com)

https://blog.csdn.net/pq8888168/article/details/85781908