项目简介
本项目是一个Wall - E机器人复刻系统,涵盖机器人和控制器代码。Arduino代码用于控制机器人的电机和舵机,实现速度控制、远程控制等功能;Raspberry Pi Web Server基于Python的Flask框架搭建,提供网页界面,用户可通过该界面远程控制机器人运动、播放声音、设置参数等。
项目的主要特性和功能
Arduino部分
- 实现舵机电机速度控制,使加速和减速更平滑。
- 采用非阻塞串口解析,支持远程控制机器人运动。
- 具备电池电量监测功能(待完善),并能控制LED面板显示电池电量。
Raspberry Pi Web Server部分
- 提供JavaScript操纵杆,方便控制机器人运动。
- 支持手动控制所有舵机电机。
- 列出机器人可执行的运动动画列表。
- 提供可播放的声音列表。
- 设有设置页面,可修改电机参数、声音音量和视频选项。
- 支持游戏手柄控制,可使用Xbox或PlayStation控制器。
- 配备简单登录页面,增强访问安全性。
安装使用步骤
Arduino
基本安装
- 确保电子设备接线与图示匹配。
- 在Arduino IDE中打开
wall - e.ino
,相关文件会自动在不同标签页打开。 - 安装
Adafruit_PWMServoDriver.h
库:在Arduino IDE中,依次选择Sketch -> Include Library -> Manage Libraries...,搜索“Adafruit Servo”并安装最新版本。 - 用USB线将计算机与微控制器连接,在“Tools”菜单中选择正确的“Board”和“Port”。
- 将草图上传到微控制器。
测试主程序
- 草图上传到Arduino后,在微控制器仍连接计算机时,开启12V电池电源。
- 打开Arduino IDE右上角的“Serial Monitor”,将波特率设置为115200。
- 发送字符 'w'、'a'、's'、'd' 分别控制机器人前进、左转、后退、右转,发送 'q' 停止所有运动。
- 发送字符 'j'、'l'、'i'、'k' 控制头部左右倾斜和眼睛上下移动。
舵机电机校准
- 在Arduino IDE中打开
wall - e_calibration.ino
。 - 将草图上传到微控制器,打开串口监视器并将波特率设置为115200。
- 根据提示,通过发送字符 'a'、'd'、'z'、'c' 调整舵机位置,发送 'n' 进行校准步骤。
- 校准完成后,将输出的校准值数组复制到
wall - e.ino
的第116 - 122行。
电池电量检测
- 按图示连接电阻和线路,推荐电阻值为
R1 = 100kΩ
,R2 = 47kΩ
。 - 取消主Arduino草图
wall - e.ino
第50行的注释。 - 若使用不同电阻值,根据公式
POT_DIV = R2 / (R1 + R2)
修改第54行的电位器分压增益因子。
添加自定义舵机动画
- 打开与主Arduino草图同一文件夹下的
animations.ino
文件。 - 在
switch
语句中插入新的case
部分,添加动画指令。 - 时间单位为毫秒,舵机位置命令为0 - 100的整数,可使用 -1 禁用特定电机。
Raspberry Pi Web Server
基本安装
- 设置Raspberry Pi运行最新版本的Raspberry Pi OS(Raspbian) - Full。
- 打开Raspberry Pi的命令行终端。
- 更新软件包列表:
sudo apt update
- 安装Flask:
- 确保pip已安装:
sudo apt install python3 - pip
- 安装Flask及其依赖项:
sudo pip3 install flask
- 确保pip已安装:
- (可选)若使用非Full版本的Raspbian,运行以下命令:
shell sudo apt install git libsdl1.2 libsdl - mixer1.2 sudo pip3 install pygame serial pyserial
- 将仓库复制到Raspberry Pi的主目录:
shell cd ~
- 设置Web服务器密码:
- 打开
app.py
:nano ~/walle - replica/web_interface/app.py
- 在第20行的
put_password_here
处插入所需密码。
- 打开
- (可选)修改默认音频目录和视频流脚本位置。
- 连接到Arduino微控制器:
- 将Arduino插入Raspberry Pi的USB端口。
- 若要在Web界面中默认选择Arduino使用的串口,在
app.py
第21行将“ARDUINO”替换为设备名称。 - 按
CTRL + O
保存,按CTRL + X
退出nano编辑器。
使用Web服务器
- 确定Raspberry Pi在网络中的当前IP地址:
hostname - I
- 启动服务器:
python3 ~/walle - replica/web_interface/app.py
- 在同一网络的计算机或设备上打开浏览器,输入Raspberry Pi的IP地址,后跟
:5000
,如192.168.1.10:5000
- 按
CTRL + C
停止服务器。 - 若要开始控制机器人,先在Web界面的“Settings”选项卡中选择正确的串口,然后点击“Reconnect”按钮。
添加摄像头流
- 确保管理脚本名称和路径正确:
/home/pi/mjpg - streamer.sh
,若保存位置不同,需更新app.py
第22行。 - 使脚本可由Web服务器执行:
chmod +x /home/pi/mjpg - streamer.sh
开机自动启动服务器
- 创建
.service
文件:nano ~/walle.service
- 粘贴以下内容: ```text [Unit] Description=Start Wall - E Web Interface After=network.target
[Service] WorkingDirectory=/home/pi/walle - replica/web_interface ExecStart=/usr/bin/python3 app.py Restart=always StandardOutput=syslog StandardError=syslog SyslogIdentifier=walle User=pi
[Install]
WantedBy=multi - user.target
``
3. 按
CTRL + O保存,按
CTRL + X退出nano编辑器。
4. 将文件复制到启动目录:
sudo cp ~/walle.service /etc/systemd/system/walle.service5. 启用自动启动:
sudo systemctl enable walle.service6. 可使用
sudo systemctl start walle.service和
sudo systemctl stop walle.service` 手动启动和停止服务。
添加新声音
- 确保音频输出到耳机插孔:
amixer cset numid=3 1
- 确保所有声音文件为
*.ogg
格式。 - 修改文件名格式为
[组名]_[文件名]_[时长(毫秒)].ogg
。 - 将声音文件上传到Raspberry Pi的
~/walle - replica/web_interface/static/sounds/
文件夹。 - 若文件未显示,可更改文件夹访问权限:
sudo chmod -R 755 ~/walle - replica/web_interface/static/sounds
设置Raspberry Pi为WiFi热点
参考 此网站 的步骤1 - 5进行设置。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】