前言:
我们使用瓦力机器人的形象仅为技术分享与演示,无任何商业目的。资料来源是GitHub的Simon Bluett chillibasket大佬发布的内容,考虑到许多朋友翻墙困难我们也将这些资料综合整理成下文,在制作瓦力机器人的过程中根据实际情况我们也做了部分修改和调整,本项目附上代码、程序,有兴趣的伙伴自取。
本篇为瓦力机器人的制作全过程,这里主控方案是接入树莓派,后期也通过树莓派接入deepseek(这部分教程后续会发个详细的)
接入小智AI的将另起一篇介绍,相对完全新手来说接入树莓方案难度会大一些,想简单快速制作的朋友建议可以先做小智AI的方案。
瓦力机器人基本介绍
按照此方案制作的瓦力可以有以下功能:
1.每只眼睛都可以通过舵机独立控制升降。
2.每只眼睛都有空间可以装一个小摄像头。(这部分我们还没做,大家有兴趣可以先动手做看看)
3.头部可以使用舵机左右转动。(由于头部重量较大,所以建议头部使用空心打印)
4.颈部两个关节都有舵机驱动,可以让头部向上/向下看和抬起/降低。
5.每只手臂的肩部都有一个舵机让手臂上下移动。
6.手臂由压力配合关节、手和手指组成,可以手动摆姿势。
7.履带是完全3D打印的,可以使用两个12V直流减速电机驱动。
8.接入树莓派的方案可以尝试接入deepseek。(这部分教程后续发个详细的)
3D图纸/模型文件
这份3D图纸最早来源国外GitHub的Simon Bluett chillibasket,因此3D文件为英文,打印前请按照下文的打印数量图对照和整理。
3D图纸下载
3D文件模型已经预留好对应的螺丝孔位无需额外打孔。
注:3D图纸我们使用的是solid works 软件打开的
点击打开: 瓦力机器人3D打印图纸
点击打开:瓦力机器人图纸STEP格式,可用于修改
(如果需要其他形式发送图纸文件请留言)
打印时请注意数量!!对照下图
自从原项目开源后,有其他创作者根据自身想实现的效果改进了部分零件,我们在做瓦力的时候并没有使用这些零件,大家也可以根据需要进行零件替换。
点击打开:其他创作者改进的部分零件
在技术交流群中也有创作者“3D生万物”优化了零件间的公差,适合在拓竹上打印,如有兴趣可在帖子底子留言“进群”交流。
关于打印的一些问题
- 打印材料:为了外形更好看,瓦力机器人我们采用的是光固化实心打印,瓦力的头部因重量问题用的是pla材料空心打印。
- 时长和花费:总体零件比较多,打印时间较长,如果只有一台机子打印的情况下,预估也至少需要200小时左右;关于花费,我们找人打印的光固化材料预计上千元,建议普通pla材料打印价格相对划算。
- 总得来说推荐使用pla材料普通打印即可,对细节要求不高的话可以用多色打印;如果有信心上色,可以打印纯色的零件,后期再喷漆上色。
材料购买清单
1.螺丝螺母(必看!模型组装需要)
-
M3 螺母*26个
-
M3内六角螺丝(10mm长)*14个
-
M3内六角螺丝(20mm长)*12个
-
M3内六角螺丝(6mm长)*2个
2.硬件和配件
-
Arduino R3控制板 *1个
-
舵机*7个,规格:国华金属壳大扭力9g数字数码舵机180°
- DC降压模块*2个,规格:5V/5A 降压电源模块
(注:为避免电压不稳定导致功耗增加和性能下降,树莓派需独立供电,因此系统中采用两个降压模块,另一路电源用于舵机供电。)
-
OLED显示屏*1个,规格:【未焊/1.3寸】OLED屏 4针(蓝色显示)
-
腔体喇叭2个,规格:2840(30 80MM)带端子8欧2W
-
凸透镜2个,规格:∅326mm无边透镜
-
ASR-PRO语音智能语音识别控制模块*1个,规格:ASR-PRO喇叭
-
ASR-PRO语音智能语音识别控制模块*1个,规格:STC-LINK官方下载器(核心板专用)不带壳+4P杜邦线
-
ASR-PRO语音智能语音识别控制模块*1个,规格:ASR-PRO核心板4M(排针未焊)
-
ASR-PRO语音智能语音识别控制模块*1个,规格:高灵敏度麦克风 带咪套(核心板专用)
-
步进直流电机驱动扩展板*1个,规格:L298P电机驱动板
-
树莓派4代B型*1个,规格:4代B型,单主板内存RAM:8GB
-
舵机扩展板模块*1个,规格:PCA9685A 蓝色板子 已焊接
-
正反转调速直流电机*2个,规格:JGB37-520微型减速正反转调速直流电机每分钟/107转1.2KG.CM电压:12V
-
3S电池一块
-
胶水(类似502一样粘的牢的胶水就可以)
-
回形针若干
关于硬件选择的一些问题:
- arduino 只要是R3这个型号的基本可以,不放心的话也可以参考下文中接线图中arduino样式。
- 关于电源的问题,电池只要是3S电池基本没问题,电池影响的是整体的续航。重点是降压模块的选择,例如我使用的降压模块适配的电池是7~20v,因此这个区间的电池都可以。
3.上色喷漆材料(不考虑上色,可以跳过)
郡士模型油性漆
底漆-郡士补土(底漆)
- SF-287 【灰色万能水补土】1000#
上色油性漆
-
C-42【半光泽】红褐色
-
C-33【消光】消光黑
-
C-104【金属色】铬银
-
C-311【半光泽】灰白
-
C-108【半光泽】品红
-
C-307【半光泽】灰
-
C-59【光泽】橙红
-
C-113【半光泽】RLM04黄
-
T-102 油性蓝标稀释剂 110ml
瓦力模型组装
视频参考
模型组装视频来源Youtube上的Simon Bluett,可根据视频步骤安装。
点击下载视频:瓦力组装视频
(此视频仅做教学参考)
也可以参考参考我们实际组装的视频:
【新人up挑战从零复刻瓦力机器人!没想到组装就要这么久!】 https://www.bilibili.com/video/BV1rjfHYmEwf/?share_source=copy_web&vd_source=dca4f4e90d161d558c4bc0dc37c88e84
选择上色的模型,在上色前要先进行基础打磨以及模型试组装,试组装可以用双面胶暂时固定。
此视频是我们实际上色的视频:
【新人up挑战从零复刻瓦力机器人,喷色差点崩溃!!】 https://www.bilibili.com/video/BV1yufHYpEsm/?share_source=copy_web&vd_source=dca4f4e90d161d558c4bc0dc37c88e84
几个组装的注意事项:
-
模型组装时有些小部件需要用胶水粘合在一起,大部分的部件还是靠模型中的螺栓连接的。
-
在进行模型组装前组装时需要提前布线,确保舵机线有足够的长度连接电路板。
-
Youtube上的Simon Bluett视频中脖子结构与舵机的连接方式为订书钉连接,但实测表明其结构强度不足,因此建议使用回形针进行替代。
硬件组装(接线图)
此接线图是根据我们所做的瓦力机器人绘制的,请确保电子设备的接线与下图相符。
舵机控制板和arduino的引脚连接
控制板ACC - arduino 5v
控制板GND - arduino GND
控制板SDA - arduino A4
控制板SCL - arduino A5
控制板EN - arduino 7
请注意:
-
无论接入的是树莓派的方案还是小智AI esp硬件的方案,Arduino的硬件连接部分都是一样的。
-
电机驱动板需要对插在Arduino上方,因电机驱动板和Arduino的引脚相同,所以**接在Arduino的线也可以根据同样的位置接在电机驱动板上。**我们通过焊接的方式连接arduino的。
程序刷写
请先将程序写入树莓派和arduino,并校准舵机,测试通过后再将电路板安装至机器人内部。
机器人的编程可以分为两个主要部分;Arduino的代码,以及树莓派上的网络服务器。
请下载我们提供的修改程序+代码
文件名:walle-replica-3.0 - 修改版程序
请点击下载: 夸克网盘分享
Arduino
1.刷写前请确保硬件设备与上文接线图相符。
2.点击上方“夸克网盘分享”下载程序代码包,打开后请下载/克隆文件夹wall-e。
(如要添加语音识别模块,请使用我们修改后的wall-e.ino主程序,在walle-replica-3.0 - 修改版程序文件夹内)
3.在Arduino IDE中的打开wall-e.ino;。此外, MotorController.hpp 和 Queue.hpp文件也会自动在IDE的不同选项卡上打开。
4.安装Adafruit_PWMServoDriver.h库
前往 Sketch → Include Library → Manage Libraries
搜索 Adafruit PWM Servo Driver.
安装最新版本的库
5.用USB数据线连接电脑和控制器。确保在“工具”菜单中选择正确的板子和端口。
6.上传wall-e.ino 主程序
测试
-
将主程序上传到Arduino,在Arduino仍连接到计算机的情况下,连接12V(3S)电池通电。
-
打开串口检测(Arduino IDE右上方的按钮),将波特率设置为115200。
-
现在测试瓦力的移动,发送字符“w”,“a”,“s”或“d”,这几个分别代表瓦力向前,向左,向后或向右移动。发送‘q’可以停止移动。
-
现在测试瓦力的头部运动,发送字母“j”、“l”、“i”或“k”,使头部向左或向右倾斜,眼睛向上或向下。在这个阶段,由舵机控制的关节,由于没有做行程上的设置,所以转到范围可能会比实际更广,看起来不协调。这个问题将通过执行以下舵机校准步骤来解决。
舵机校准
-
从上文下载好的程序代码包,下载/克隆“wall-e_calibration”文件夹。
-
在Arduino IDE中打开wall-e_calibration.ino
-
将程序上传到Arduino ,打开串口监视器,设置波特率为115200。
-
该程序用于校准将每个舵机移动到对应位置所需运动范围,最大和最小PWM脉冲宽度。每个伺服器的标准LOW和HIGH位置如下:
-
在安装舵机之前,需要确保舵机的角度正确(范围可以参考下图),再安装舵机臂。由于我们使用的是180°舵机,如果舵机臂被固定在错误的角度,将无法正确控制关节。
-
当启动程序后,打开串行监视器。2-3秒后应该出现一条消息,表示准备校准第一个舵机的LOW位置(头部旋转)。
-
发送字符“a”和“d”来控制机器人前后移动,范围是-10和+10。如果需要更精细的控制,可以使用字符“z”和“c”移动机器人,范围是-1和+1。
-
一旦舵机定位在正确的位置(如下图所示),发送字符“n”以继续进行校准步骤。它将移动到同一伺服器的HIGH位置,之后机器人中的7个舵机将重复此过程。
-
当所有的关节校准后,程序将输出一个包含校准值的数组到串行监视器。
-
复制该数组,并将其粘贴到wall-e - ino程序的第144到150行。该数组看起来应该与下面类似:
int preset[][2] = {{410,120}, // head rotation
{532,178}, // neck top
{120,310}, // neck bottom
{465,271}, // eye right
{278,479}, // eye left
{340,135}, // arm left
{150,360}}; // arm right
电量检测
注:当使用电池为机器人供电时,需要实时检测电量。过放电可能会导致电池损坏,供电不足可能会损坏树莓派的SD卡。
-
使用Arduino上的电池电量检测功能时,请按照下图连接以下电阻并接线。
-
电阻(电位分压器)将12V电压降低到5V以下,可以让Arduino使用其模拟引脚对电压进行测量。电阻值建议设置为R1 = 100kΩ, R2 = 47kΩ。
-
在Arduino中,取消主程序 wall-e.ino 中的第54行。
-
如果您使用不同的电阻器值,请根据公式更改程序第54行电位分压器增益因子的值:POT_DIV = R2 / (R1 + R2)。
-
该程序现在应该每10秒自动检查一次电池电量,这个电量将显示在树莓派网络界面的“状态”。
oLed显示屏
此功能由GitHub上的hpkevertje分享,这是一个一个1.3英寸的小oLED显示屏,在电池指示面板上可以显示瓦力机器人的电池电量。这个功能需要启用上面所说的电量检测电路,每次计算电量时屏幕都会更新。
这个功能需要先完成上文所说的电量检测,每次计算电量时屏幕都会更新。
该函数在页面模式下使用u8g2显示库;
在Arduino UNO上,您可能会收到内存使用量高的警告,但此警告可以忽略。
1.在Arduino上使用oLed显示功能,请根据上文提供的接线图接线:
(如需获得高清版接线图请留言)
-
在Arduino库管理器中安装U8g2库:
-
在Sketch → Include Library → Manage Libraries
-
搜索U8gt
-
安装最新版本的库
-
在Arduino主程序wall-e.ino中定义OLED。
-
如果您使用的是库支持的另一种显示方式,则可以按照库参考页面上的文档更改第78行上的构造函数。默认是用于sh1106_128x64_name显示。
添加自定义舵机动作(可选)
源代码带有两个动画,可以复制电影中的场景;
机器人瓦力启动时的眼球运动,以及机器人瓦力好奇地环顾四周时的一系列动作。
从版本2.7后,用户可以更简单地添加自定义动作
-
打开animations.ino文件,它位于与主Arduino主程序相同的文件夹中
-
每个动作命令都包含您希望所有舵机移动到的位置,以及动画应该等待的时间,直到移动到下一个指令。
-
可以通过在switch语句中插入一个额外的case来添加动作。将额外的代码放入默认部分上方的空格中。例如:
case 3:
// --- Title of your new motion sequence ---
// time,head,necT,necB,eyeR,eyeL,armL,armR
queue.push({ 12, 48, 40, 0, 35, 45, 60, 59});
queue.push({1500, 48, 40, 20, 100, 0, 80, 80});
// Add as many additional movements here as you need to complete the animation
// queue.push({time, head rotation, neck top, neck bottom, eye right, eye left, arm left, arm right})
break;
可修改的项目分别为,时间,头,脖子上部,脖子下部,右眼,左眼,左手,右手
例如代码中这个位置(画圈处)表示:保持12毫秒以及这12毫秒中相对应位置舵机的角度
-
时间需要以毫秒为单位(例如,3.5秒= 3500)
-
舵机的位置命令需要为0到100之间的整数,其中0 = LOW, 100 = HIGH,和在wall-e_calibration中校准的伺服位置一样。
-
如果想要禁用特定的舵机,可以将其数值设置为-1。
树莓派设置
以下内容需要具备基础的命令行终端使用知识
下图是我们使用到的树莓派的线序,用以参考
-
硬件设置
-
将树莓派的电源线连接到12V转5V 转换器的USB电源输出口
-
连接Arduino与树莓派用USB连接。
-
如果您有树莓派相机,可以将线连接至CSI相机连接器。(这里我们没使用)
-
为了进行设置和安装的便捷,您可以将显示器插入HDMI端口和USB键盘和鼠标。或者通过SSH从另一台计算机连接并配置树莓派。
基础设置
- 安装树莓派以运行最新版本的树莓派OS Desktop。安装说明可以在树莓派的网站上找到。
- 确保树莓派已连接到互联网。
- 在树莓派上打开“Terminal”。
- 将github的存储库克隆到树莓派的主目录:
输入这串指令就能自动从github上下载瓦力的控制系统到树莓派里
cd ~
git clone GitHub - chillibasket/walle-replica: Robot and controller code for a replica robot
-
可以通过编辑“config.py”文件来配置web界面设置:
-
打开配置文件:
-
在第14行,您可以更改web界面的密码。默认密码为“walle”。
-
在第15行,可以设置用于连接Arduino的默认串行端口。您可以使用dmseg | grep tty命令找到所有连接的串行端口的列表。
-
在第16行和第17行,可以配置在启动web服务器时Arduino和相机是否应该自动连接。
-
完成了配置的编辑后,运行安装脚本,设置所有必需的库(可能需要一些时间):
cd ~/walle-replica
sudo chmod +x ./raspi-setup.sh
sudo ./raspi-setup.sh
使用Web界面控制机器人
-
如果安装成功,当树莓派上电后,web服务器会自动启动。这是使用Systemd服务完成的。
-
检查web界面,可以在树莓派界面上,通过http://localhost:5000 查看web界面。
-
访问web界面,可以在同一网络的任意一台计算机/设备上打开浏览器,输入树莓派的IP地址在后面加上端口 :5000 。例如192.168.1.10:5000
-
如何查看树莓派IP地址:方法一在树莓派上查看,需要使用命令hostname -I确定网络上树莓派的当前IP地址;方法二从同一WiFi网络上的另一台计算机查看接口,可以使用电脑在无线路由器后台查看树莓派IP地址。
-
使用web界面控制机器人前,首先需要确保与Arduino的串行通信已经启动。要做到这一点,请进入web界面的Settings选项卡,从下拉列表中选择正确的串口,然后按下Reconnect按钮。如果配置设置正确,设备会自动启动。
以下是一些用于控制web界面的指令:
停止自动web界面服务:sudo systemd stop wall .service
启动时禁用启动:sudo systemd disable wall .service
重新启用启动时的启动:sudo systemd enable wall .service
使用Blocky控制
-
从3.0版本开始,web界面中有个新的选项,机器人可以图形编程使用拖放脚本语言进行控制。只需从左侧栏中拖动要执行的操作并将其放入编辑器区域。例如,你可以控制瓦力,转动电机,播放音频。
-
对于驱动电机的命令,您可能需要调整“config.py”文件底部第25至28行的参数,以确保速度和转弯量是正确的。
以下是树莓派可选要不要做的功能
添加播放声音(可选)
(这个部分我们有做)
-
默认情况下,树莓应该自动选择是否将音频输出到HDMI端口或耳机插孔。但是,可以使用以下命令确保它始终使用耳机插孔:amixer cset numid= 31
-
确保想使用的所有声音文件都是*.wav类型的。大多数音乐编辑器应该能够将声音文件转换为这种格式。
-
修改文件名,使其格式为[组名][文件名][声音长度(毫秒)].wav。例如:voice_eva_1200.wav。在web界面中,音频文件将使用“组名”进行分组,并按字母顺序排序。
-
将声音文件上传到树莓派的以下文件夹:~/wall -replica/web_interface/static/sounds/
-
当重新加载页面时,所有文件都应该出现在web界面中。如果文件没有出现,可能需要更改访问该文件夹所需的权限:
sudo chmod -R 755 ~/wall -replica/web_interface/static/sounds
添加视频流(可选)
(这个部分我们暂时没做)
web服务器自动支持任何连接到树莓派上的CSI连接器与带状电缆的摄像头。(目前暂不支持USB网络摄像头)
将树莓派设置为WiFi热点(可选)
(这个部分我们暂时没做)
这个部分的难度较高,且使用频率较少,时间有限的可以不做
-
树莓派可以设置为WiFi热点网络。控制机器人的电脑/手机/平板电脑可以直接连接到该网络。
-
为了设置WiFi热点,我们将使用RaspAP项目,该项目负责所有配置和工具以使系统工作。
-
以下操作以快速安装指南为依据:
-
更新Raspian,内核和固件(然后重新启动):
sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot now
-
确保在raspi-config的本地化选项中设置了正确的WiFi国家:sudo raspi-config
-
运行快速安装程序:curl -sL https://install.raspap.com | bash
-
对于安装过程中出现的最初几个是/否提示,输入“y”(是)以接受所有推荐的设置。
-
最后两个提示(广告拦截和下一个)是不需要的,所以你可以输入“n”(否)。
-
重新启动树莓派:sudo Reboot
-
现在树莓派应该通过以下方式开启WiFi热点网络:
-
SSID (wifi名称):raspi-webgui
-
密码:ChangeMe
-
通过电脑、手机或平板电脑连接WiFi网络后,在浏览器中输入以下地址即可打开瓦力的网络界面:http://10.3.141.1:5000
-
推荐进入WiFi配置页面http://10.3.141.1 修改WiFi名称和密码。默认用户名为“admin”,密码为“secret”。
-
点击左侧栏中的“Hotspot”。在“Basic”选项卡中可以更改WiFi网络名称,在“Security”选项卡中可以更改WiFi密码。
-
要更改WiFi设置管理界面的admin密码,请点击界面右上角的“admin”图标。



























