# 瓦力机器人制作 **Repository Path**: simonliu009/wally-robot-manufacturing ## Basic Information - **Project Name**: 瓦力机器人制作 - **Description**: 分享制作的瓦力机器人的过程,附上来自GitHub的学习资料,有兴趣的伙伴自取,有疑问欢迎反馈 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 32 - **Created**: 2025-02-26 - **Last Updated**: 2025-02-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 瓦力机器人制作 前言: 本篇瓦力机器人制作属个人爱好,不涉及商用。我们主要是瓦力分享制作的瓦力机器人的过程,资料来源是GitHub的Simon Bluett chillibasket大佬发布的内容([点击跳转GitHub查看](https://github.com/chillibasket/walle-replica)),考虑到许多朋友翻墙困难我们也将这些资料综合整理成下文,在制作瓦力机器人的过程中根据实际情况我们也做了部分修改和调整,本项目附上代码、程序,有兴趣的伙伴自取。 ## 瓦力模型基本介绍 1.每只眼睛都可以通过舵机独立控制升降。 2.每只眼睛都有空间可以装一个小摄像头。(这部分我们还没做,大家有兴趣可以先动手做看看) 3.头部可以使用舵机左右转动。(由于头部重量较大,所以建议头部使用空心打印) 4.颈部两个关节都有舵机驱动,可以让头部向上/向下看和抬起/降低。 5.每只手臂的肩部都有一个舵机让手臂上下移动。 6.手臂由压力配合关节、手和手指组成,可以手动摆姿势。 7.履带是完全3D打印的,可以使用两个12V直流减速电机驱动。 ### 3D模型文件 资料栏已附上3D模型文件,可以直接使用这份3D文件进行模型打印,模型已经预留好对应的螺丝孔位无需额外打孔。自从项目开源后,有其他创作者根据自身想实现的效果改进了部分零件,大家也可以根据需要进行零件替换。 **注 建议模型打印完后先试组装,确保零件之间配合正常,尺寸有误差的地方,可以自行打磨。** ## 材料清单 ### 1.螺丝螺母 - M3 螺母*26个 - M3内六角螺丝(10mm长)*14个 - M3内六角螺丝(20mm长)*12个 - M3内六角螺丝(6mm长)*2个 ![输入图片说明](%E6%9D%90%E6%96%99%E8%B4%AD%E4%B9%B0%E6%88%AA%E5%9B%BE/1.png) ### 2.硬件和配件 **注:树莓派要的电比较多,所以要单独供电,只有一个的话,别的设备电会不够,所以降压模块需要用到两个。为保证保证供电正常,建议树莓派和舵机分开供电** - 舵机*7个,规格:国华金属壳大扭力9g数字数码舵机180° ![输入图片说明](%E6%9D%90%E6%96%99%E8%B4%AD%E4%B9%B0%E6%88%AA%E5%9B%BE/2.png) - DC降压模块*2个,规格:5V/5A 降压电源模块 - OLED显示屏*1个,规格:【未焊/1.3寸】OLED屏 4针(蓝色显示) - 腔体喇叭*2个,规格:2840(30* 80MM)带端子8欧2W ![输入图片说明](%E6%9D%90%E6%96%99%E8%B4%AD%E4%B9%B0%E6%88%AA%E5%9B%BE/3.png) - 凸透镜*2个,规格:∅32*6mm无边透镜 ![输入图片说明](%E6%9D%90%E6%96%99%E8%B4%AD%E4%B9%B0%E6%88%AA%E5%9B%BE/4.png) - ASR-PRO语音智能语音识别控制模块*1个,规格:ASR-PRO喇叭 - ASR-PRO语音智能语音识别控制模块*1个,规格:STC-LINK官方下载器(核心板专用)不带壳+4P杜邦线 - ASR-PRO语音智能语音识别控制模块*1个,规格:ASR-PRO核心板4M(排针未焊) - ASR-PRO语音智能语音识别控制模块*1个,规格:高灵敏度麦克风 带咪套(核心板专用) - 步进直流电机驱动扩展板*1个,规格:L298P电机驱动板 ![输入图片说明](%E6%9D%90%E6%96%99%E8%B4%AD%E4%B9%B0%E6%88%AA%E5%9B%BE/5.png) - 树莓派4代B型*1个,规格:4代B型,单主板内存RAM:8GB - 舵机扩展板模块*1个,规格:PCA9685A 蓝色板子 已焊接 - 正反转调速直流电机*2个,规格:JGB37-520微型减速正反转调速直流电机每分钟/107转1.2KG.CM电压:12V ![输入图片说明](%E6%9D%90%E6%96%99%E8%B4%AD%E4%B9%B0%E6%88%AA%E5%9B%BE/6.png) - 3S电池一块 - 胶水(类似502一样粘的牢的胶水就可以) - 回形针若干 ### 3.上色喷漆材料 **郡士模型油性漆** 底漆-郡士补土(底漆) - SF-287 【灰色万能水补土】1000# 上色油性漆 - C-42【半光泽】红褐色 - C-33【消光】消光黑 - C-104【金属色】铬银 - C-311【半光泽】灰白 - C-108【半光泽】品红 - C-307【半光泽】灰 - C-59【光泽】橙红 - C-113【半光泽】RLM04黄 - T-102 油性蓝标稀释剂 110ml ![输入图片说明](%E6%9D%90%E6%96%99%E8%B4%AD%E4%B9%B0%E6%88%AA%E5%9B%BE/7.png) ![输入图片说明](%E6%9D%90%E6%96%99%E8%B4%AD%E4%B9%B0%E6%88%AA%E5%9B%BE/8.png) ## 组装过程 此安装视频来源Youtube上的Simon Bluett,可根据视频步骤安装。 几个组装的注意事项: 1.有些小部件需要用胶水粘合在一起(试组装时可以用双面胶代替胶水),大部分的部件还是靠螺栓连接的。 2.组装时需要提前布线,确保舵机线有足够的长度连接电路板。 3.视频里面脖子安装部分是用订书钉,实际操作下来建议使用回形针。 视频太大了不好上传,可[点击观看组装视频](http://www.youtube.com/watch?v=ZRK9f4FZlD8) ## 程序刷写 1.请先将程序写入树莓派和arduino,测试通过,再将电路板安装至机器人内部。 2.机器人的编程可以分为两个主要部分;Arduino的代码,以及树莓派上的网络服务器。 ### Arduino #### 基本安装 1. 确保电子设备的接线与下图相符。 ![输入图片说明](%E6%95%99%E7%A8%8B%E5%86%85%E9%99%84%E5%9B%BE/1.png) 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 主程序 #### 测试 1. 将主程序上传到Arduino,在Arduino仍连接到计算机的情况下,连接12V(3S)电池通电。 2. 打开串口检测(Arduino IDE右上方的按钮),将波特率设置为115200。 3. 现在测试瓦力的移动,发送字符“w”,“a”,“s”或“d”,这几个分别代表瓦力向前,向左,向后或向右移动。发送‘q’可以停止移动。 4. 现在测试瓦力的头部运动,发送字母“j”、“l”、“i”或“k”,使头部向左或向右倾斜,眼睛向上或向下。在这个阶段,由舵机控制的关节,由于没有做行程上的设置,所以转到范围可能会比实际更广,看起来不协调。这个问题将通过执行以下舵机校准步骤来解决。 #### 舵机校准 1. 从在线存储库下载/克隆“wall-e_calibration”文件夹。 2. 在Arduino IDE中打开wall-e_calibration.ino 3. 将程序上传到Arduino ,打开串口监视器,设置波特率为115200。 4. 该程序用于校准将每个伺服电机移动到对应位置所需运动范围,最大和最小PWM脉冲宽度。每个伺服器的标准LOW和HIGH位置如下 5. 在安装舵机之前,需要确保舵机的角度正确(范围可以参考下图),再安装舵机臂。由于伺服器只能旋转180度,如果它们被固定在错误的角度,将无法正确控制关节。 ![输入图片说明](%E6%95%99%E7%A8%8B%E5%86%85%E9%99%84%E5%9B%BE/2.png) ![输入图片说明](%E6%95%99%E7%A8%8B%E5%86%85%E9%99%84%E5%9B%BE/3.png) ![输入图片说明](%E6%95%99%E7%A8%8B%E5%86%85%E9%99%84%E5%9B%BE/4.png) ![输入图片说明](%E6%95%99%E7%A8%8B%E5%86%85%E9%99%84%E5%9B%BE/5.png) **(头部控制舵机的连接,建议选择回形针,以保证强度)** ![输入图片说明](%E6%95%99%E7%A8%8B%E5%86%85%E9%99%84%E5%9B%BE/6.png) 6. 当启动程序后,打开串行监视器。2-3秒后应该出现一条消息,表示准备校准第一个伺服电机的LOW位置(头部旋转)。 7. 发送字符“a”和“d”来控制机器人前后移动,范围是-10和+10。如果需要更精细的控制,可以使用字符“z”和“c”移动机器人,范围是-1和+1。 8. 一旦舵机定位在正确的位置(如下图所示),发送字符“n”以继续进行校准步骤。它将移动到同一伺服器的HIGH位置,之后机器人中的7个舵机将重复此过程。 9. 当所有的关节校准后,程序将输出一个包含校准值的数组到串行监视器。 10. 复制该数组,并将其粘贴到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卡。** 1. 使用Arduino上的电池电量检测功能时,请按照下图连接以下电阻并接线。 ![输入图片说明](%E6%95%99%E7%A8%8B%E5%86%85%E9%99%84%E5%9B%BE/7.png) 2. 电阻(电位分压器)将12V电压降低到5V以下,可以让Arduino使用其模拟引脚对电压进行测量。电阻值建议设置为R1 = 100kΩ, R2 = 47kΩ。 3. 在Arduino中,取消主程序 wall-e.ino 中的第54行。 4. 如果您使用不同的电阻器值,请根据公式更改程序第54行电位分压器增益因子的值:POT_DIV = R2 / (R1 + R2)。 5. 该程序现在应该每10秒自动检查一次电池电量,这个电量将显示在树莓派网络界面的“状态”。 #### oLed显示屏(可选)(由:GitHub上的hpkevertje贡献) **注意事项** 可以集成一个1.3英寸的小oLED显示屏,在电池指示面板上可以显示瓦力机器人的电池电量。这个功能需要启用上面所说的电量检测电路,每次计算电量时屏幕都会更新。 该函数在页面模式下使用u8g2显示库; 在Arduino UNO上,您可能会收到内存使用量高的警告,但此警告可以忽略。 1. 在Arduino上使用oLed显示功能,请在伺服电机模块的i2c总线上连接i2c oLed显示器(如图) ![输入图片说明](%E6%95%99%E7%A8%8B%E5%86%85%E9%99%84%E5%9B%BE/8.png) 2. 在Arduino库管理器中安装U8g2库: 3. 在Sketch -> Include Library -> Manage Libraries 4. 搜索U8gt(创作者:oliver) 5. 安装最新版本的库 6. 在Arduino主程序wall-e.ino中定义OLED。 7. 如果您使用的是库支持的另一种显示方式,则可以按照库参考页面上的文档更改第78行上的构造函数。默认是用于sh1106_128x64_name显示。 #### 添加自定义舵机动作(可选) 源代码带有两个动画,可以复制电影中的场景; 机器人瓦力启动时的眼球运动,以及机器人瓦力好奇地环顾四周时的一系列动作。 从版本2.7后,用户可以更简单地添加自定义动作 1. 打开animations.ino文件,它位于与主Arduino主程序相同的文件夹中 2. 每个动作命令都包含您希望所有舵机移动到的位置,以及动画应该等待的时间,直到移动到下一个指令。 3. 可以通过在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; ``` 4. 时间需要以毫秒为单位(例如,3.5秒= 3500) 5. 舵机的位置命令需要为0到100之间的整数,其中0 = LOW, 100 = HIGH,和在wall-e_calibration中校准的伺服位置一样。 6. 如果想要禁用特定的舵机,可以将其数值设置为-1。 ### 树莓派设置 1. 硬件设置 2. 将树莓派的电源线连接到12V转5V 转换器的USB电源输出口 3. 连接Arduino与树莓派用USB连接。 4. 如果您有树莓派相机,将线连接至CSI相机连接器。 5. 为了进行设置和安装的便捷,您可以将显示器插入HDMI端口和USB键盘和鼠标。或者通过SSH从另一台计算机连接并配置树莓派。 #### 基础设置 1. 安装树莓派以运行最新版本的树莓派OS Desktop。安装说明可以在树莓派的网站上找到。 2. 确保树莓派已连接到互联网。 3. 在树莓派上打开“Terminal”。 4. 将存储库克隆到树莓派的主目录: cd ~ git clone https://github.com/chillibasket/walle-replica.git 5. 可以通过编辑“config.py”文件来配置web界面设置: 6. 打开配置文件:nano ~/wall -replica/web_interface/config.py 7. 在第14行,您可以更改web界面的密码。默认密码为“walle”。 8. 在第15行,可以设置用于连接Arduino的默认串行端口。您可以使用dmseg | grep tty命令找到所有连接的串行端口的列表。 9. 在第16行和第17行,可以配置在启动web服务器时Arduino和相机是否应该自动连接。 10. 完成了配置的编辑后,运行安装脚本,设置所有必需的库(可能需要一些时间): cd ~/walle-replica sudo chmod +x ./raspi-setup.sh sudo ./raspi-setup.sh #### 使用Web服务器 1. 如果安装成功,当树莓派上电后,web服务器会自动启动。这是使用Systemd服务完成的。 2. 在树莓派上,您可以在http://localhost:5000 查看web界面 3. 要从同一WiFi网络上的另一台计算机查看接口,首先需要使用命令hostname -I确定网络上树莓派的当前IP地址 4. 要访问web界面,在同一网络的任意一台计算机/设备上打开浏览器,输入树莓派的IP地址,端口:5000。例如192.168.1.10:5000 5. 要开始控制机器人,首先需要确保与Arduino的串行通信已经启动。要做到这一点,请进入web界面的Settings选项卡,从下拉列表中选择正确的串口,然后按下Reconnect按钮。如果配置设置正确,设备会自动启动。 以下是一些用于控制web界面的指令: 停止自动web界面服务:sudo systemd stop wall .service 启动时禁用启动:sudo systemd disable wall .service 重新启用启动时的启动:sudo systemd enable wall .service 使用Blocky控制(由:GitHub上dkrey贡献) 1. 从3.0版本开始,web界面中有个新的选项,机器人可以图形编程使用拖放脚本语言进行控制。只需从左侧栏中拖动要执行的操作并将其放入编辑器区域。例如,你可以控制瓦力,转动电机,播放音频。 2. 对于驱动电机的命令,您可能需要调整“config.py”文件底部第25至28行的参数,以确保速度和转弯量是正确的。 ##### 使用Blocky控制(由:GitHub上dkrey贡献) 1. 从3.0版本开始,一个新的选项添加到web界面中,机器人可以图形编程使用拖放脚本语言进行控制。只需从左侧栏中拖动要执行的操作并将其放入编辑器区域。例如,你可以控制瓦力,转动电机,播放音频。 2. 对于驱动电机的命令,您可能需要调整“config.py”文件底部第25至28行的参数,以确保速度和转弯量是正确的。 ##### 添加视频流(可选) web服务器自动支持任何连接到树莓派上的CSI连接器与带状电缆的摄像头。(目前暂不支持USB网络摄像头) ##### 添加新的声音(可选) 1. 默认情况下,树莓应该自动选择是否将音频输出到HDMI端口或耳机插孔。但是,可以使用以下命令确保它始终使用耳机插孔:amixer cset numid= 31 2. 确保想使用的所有声音文件都是*.wav类型的。大多数音乐编辑器应该能够将声音文件转换为这种格式。 3. 修改文件名,使其格式为[组名]_[文件名]_[声音长度(毫秒)].wav。例如:voice_eva_1200.wav。在web界面中,音频文件将使用“组名”进行分组,并按字母顺序排序。 4. 将声音文件上传到树莓派的以下文件夹:~/wall -replica/web_interface/static/sounds/ 5. 当重新加载页面时,所有文件都应该出现在web界面中。如果文件没有出现,可能需要更改访问该文件夹所需的权限: sudo chmod -R 755 ~/wall -replica/web_interface/static/sounds ##### 将树莓派设置为WiFi热点(可选) 1. 树莓派可以设置为WiFi热点网络。控制机器人的电脑/手机/平板电脑可以直接连接到该网络。 2. 为了设置WiFi热点,我们将使用RaspAP项目,该项目负责所有配置和工具以使系统工作。 3. 以下操作以快速安装指南为依据: 4. 更新Raspian,内核和固件(然后重新启动): sudo apt-get update sudo apt-get dist-upgrade sudo reboot now 5. 确保在raspi-config的本地化选项中设置了正确的WiFi国家:sudo raspi-config 6. 运行快速安装程序:curl -sL https://install.raspap.com | bash 7. 对于安装过程中出现的最初几个是/否提示,输入“y”(是)以接受所有推荐的设置。 8. 最后两个提示(广告拦截和下一个)是不需要的,所以你可以输入“n”(否)。 9. 重新启动树莓派:sudo Reboot 10. 现在树莓派应该通过以下方式开启WiFi热点网络: 11. SSID (wifi名称):raspi-webgui 12. 密码:ChangeMe 13. 通过电脑、手机或平板电脑连接WiFi网络后,在浏览器中输入以下地址即可打开瓦力的网络界面:http://10.3.141.1:5000 14. 推荐进入WiFi配置页面http://10.3.141.1 修改WiFi名称和密码。默认用户名为“admin”,密码为“secret”。 15. 点击左侧栏中的“Hotspot”。在“Basic”选项卡中可以更改WiFi网络名称,在“Security”选项卡中可以更改WiFi密码。 16. 要更改WiFi设置管理界面的admin密码,请点击界面右上角的“admin”图标。