19浏览
查看: 19|回复: 0

[项目] 给小智AI装身体:FireBeetle ESP32-S3驱动四足机器人+2.8寸屏

[复制链接]
本帖最后由 云天 于 2026-3-6 20:09 编辑

       用语音唤醒AI,让它不仅能聊天,还能站起来、招手、动耳朵——这才是真正的智能伙伴!
【项目背景】
       小智AI开源项目相信很多人都玩过,它把大模型装进了小小的ESP32开发板,让我们可以和AI面对面聊天。但你是否想过,让小智AI拥有一个“身体”?我利用FireBeetle ESP32-S3、2.8寸TFT触摸屏、六个舵机等硬件,给小智AI安装了一套四足机器人外壳,现在它不仅能听会说,还能通过语音指令做出各种动作——前进、后退、左转、右转、坐下、趴下、招手、动耳朵……甚至回答问题时还会配合点头、动耳朵卖萌!

【项目亮点】

       1. 首次在FireBeetle ESP32-S3上成功驱动2.8寸320x240 TFT触摸屏,显示AI的表情、对话内容和设备状态,交互感直接拉满。
       2. 完美集成六路舵机控制,让四足机器人能完成复杂的步态动作,且不干扰音频和屏幕显示。
       3. 深度定制小智AI开源固件,通过MCP工具让AI直接调用舵机动作,你可以用自然语言指挥它:“向前走三步”、“开心地招招手”。

【硬件清单】

部件
型号/规格
数量
主控DFRobot FireBeetle ESP32-S31
显示屏2.8寸 320x240 TFT电阻触摸屏 (ILI9341)1
麦克风I2S麦克风模块 (如INMP441)1
功放MAX98357 I2S功放模块1
喇叭无源小喇叭 8Ω 3W1
舵机SG90 9g 微型舵机6
外壳亚克力四足机器人外壳(自制)1套
电源3.7V锂电池供电(主控板、舵机单独供电)2
连接线杜邦线、面包板等若干

【软件准备】

       1. 小智AI开源项目代码
       克隆仓库:`git clone https://github.com/78/xiaozhi-esp32.git`  
       本项目基于小智AI v2.0.5版本开发。

       2. 开发环境  
       安装ESP-IDF v5.1+  
       配置FireBeetle ESP32-S3为目标芯片  

【硬件连接】

       根据我的配置文件 `config.h`,各模块引脚定义如下:

功能
引脚
备注
I2S麦克风 WSGPIO13
I2S麦克风 SCKGPIO14
I2S麦克风 DINGPIO12
I2S功放 DOUTGPIO7
I2S功放 BCLKGPIO9
I2S功放 LRCKGPIO16
左前腿舵机GPIO4舵机信号线
左后腿舵机GPIO5
右后腿舵机GPIO6
右前腿舵机GPIO8
左耳舵机GPIO10
右耳舵机GPIO11
屏幕背光GPIO21PWM控制
屏幕MOSIGPIO15SPI数据
屏幕SCLKGPIO17SPI时钟
屏幕DCGPIO3数据/命令
屏幕RSTGPIO38复位
屏幕CSGPIO18片选
板载LEDGPIO48
启动按键GPIO0用于配置WiFi


       注意:由于ESP32-S3的PWM通道有限,我复用了LEDC定时器,将所有舵机挂载到同一个定时器(TIMER2)上,使用不同通道(2~7),避免了与屏幕背光(可能占用通道0/1)的冲突。
【硬件组装】
给小智AI装身体:FireBeetle ESP32-S3驱动四足机器人+2.8寸屏图1


给小智AI装身体:FireBeetle ESP32-S3驱动四足机器人+2.8寸屏图7


给小智AI装身体:FireBeetle ESP32-S3驱动四足机器人+2.8寸屏图8


给小智AI装身体:FireBeetle ESP32-S3驱动四足机器人+2.8寸屏图2


给小智AI装身体:FireBeetle ESP32-S3驱动四足机器人+2.8寸屏图3


给小智AI装身体:FireBeetle ESP32-S3驱动四足机器人+2.8寸屏图6


【软件修改与代码解析】

       1. 添加舵机控制类

       为了使AI能控制舵机,我编写了 `ServoController` 类,封装了PWM输出、角度转换、平滑运动、扫描等功能。核心代码位于 `servo_controller.cpp` 和 `servo_controller.h`。

       关键方法:
       `SetAngle(int angle)`:直接设置舵机角度(0~180)
       `RotateClockwise(int degrees)`:顺时针旋转指定角度
       `SweepBetween(int min, int max, int speed)`:在区间内往复扫描
       使用FreeRTOS任务处理命令队列,保证运动不阻塞主循环

       2. 自定义板级文件

       小智AI支持多款开发板,我需要为FireBeetle ESP32-S3 + 屏幕 + 舵机创建新的板级配置。在 `boards/` 目录下 `bread-compact-wifi-lcd` 文件夹,包含 `compact_wifi_board_lcd.cc` 和 `config.h`。

       在 `compact_wifi_board_lcd.cc` 中:
       继承 `WifiBoard` 类,重写 `InitializeSpi()`、`InitializeLcdDisplay()` 等函数以适配ILI9341屏幕。
       在 `InitializeServoController()` 中创建六个舵机控制器实例,分配不同的LEDC通道。
       在 `InitializeTools()` 中通过MCP Server注册一系列舵机动作工具,让AI可以调用。例如:

  1. mcp_server.AddTool("self.servo.forward",
  2.                    "向前移动指定的步数",
  3.                    std::vector<Property>{
  4.                        Property("steps", kPropertyTypeInteger, 5, 1, 20),
  5.                        Property("delay", kPropertyTypeInteger, 300, 100, 1000),
  6.                        Property("angle", kPropertyTypeInteger, 20, 10, 60)
  7.                    },
  8.                    [this](const PropertyList& properties) -> ReturnValue {
  9.                        int steps = properties["steps"].value<int>();
  10.                        int delay = properties["delay"].value<int>();
  11.                        int angle = properties["angle"].value<int>();
  12.                        WalkForward(steps, delay, angle);
  13.                        return ReturnValue::Success();
  14.                    });
复制代码


       这样,AI在对话中理解到“向前走三步”时,就会调用该工具,执行定义好的步态函数。

       3. 步态设计

       参考四足机器人的常见步态,我实现了对角线交替步态,确保机器人在运动中的稳定性。以 `WalkForward` 为例:

  1. void WalkForward(int steps, int delay_ms, int angle) {
  2.     for (int step = 0; step < steps; step++) {
  3.         // 右对角线向前:右前(8)向前,左后(5)向前
  4.         SetServo8Angle(85 + angle);
  5.         SetServo5Angle(95 - angle);
  6.         vTaskDelay(pdMS_TO_TICKS(delay_ms));
  7.         // 左对角线向后:左前(4)向后,右后(6)向后
  8.         SetServo4Angle(100 + angle);
  9.         SetServo6Angle(95 - angle);
  10.         vTaskDelay(pdMS_TO_TICKS(delay_ms));
  11.         // ... 后续归中、另一对角线等
  12.     }
  13. }
复制代码


       由于机械安装差异,你可能需要微调角度正负和基准值(如85/95/100),确保四条腿能平稳交替。

【屏幕显示】

       通过 `esp_lcd` 驱动ILI9341,小智AI原生的UI会自动显示在屏幕上,包括表情、对话文字、WiFi状态等。我在 `config.h` 中正确配置了分辨率、镜像、颜色顺序等参数。

  1. #define LCD_TYPE_ILI9341_SERIAL
  2. #define DISPLAY_WIDTH   320
  3. #define DISPLAY_HEIGHT  240
  4. #define DISPLAY_SWAP_XY true
  5. #define DISPLAY_MIRROR_X true
  6. #define DISPLAY_MIRROR_Y true
复制代码
【PCB设计】
给小智AI装身体:FireBeetle ESP32-S3驱动四足机器人+2.8寸屏图5


给小智AI装身体:FireBeetle ESP32-S3驱动四足机器人+2.8寸屏图4


【编译过程】

       1. **焊接/连接硬件**:按照引脚表连接所有模块。建议先用面包板测试,确认每个舵机、屏幕、音频都能正常工作。
       2. **编写配置文件**:将上述 `config.h` 和 `compact_wifi_board_lcd.cc`修改后 放入 `boards/bread-compact-wifi-lcd/` 目录。
       3. **编译固件**:
  1. idf.py set-target esp32s3
  2.    idf.py menuconfig
复制代码


       在menuconfig中,选择“Board Type”为“Bread Compact WiFI + LCD”,LCD Type选择“ILI9341 240*320”。保存退出。
  1. idf.py build
  2.    idf.py flash monitor
复制代码


       4. 测试:首次烧录后,手机连接小智AI的WiFi热点进行配网(xiaozhi.me教程)。然后对着麦克风说“你好”,机器人应该会动耳朵回应,屏幕显示表情。尝试说“站起来”、“向前走两步”、“招招手”等,观察动作是否符合预期。如有偏差,调整步态函数中的角度和延迟。

【使用效果】

(面包板测试)


(PCB电路板、亚克力外壳)

       经过调试,我的四足机器人已经能稳定完成以下动作:
       基本姿态:站立、坐下、趴下
       移动:前进、后退、左转、右转(可指定步数和幅度)
       交互动作:招手(右前腿)、动耳朵(左右耳独立摆动)、点头(身体前倾)
       复合动作:开心招手(先动耳朵再招手)、回答问题时轻微动耳朵

       AI还能根据对话内容主动调用动作,比如当它被夸奖时,会开心地摇耳朵;当它需要思考时,会微微点头。屏幕上的表情也随之变化,整个互动过程非常生动。

【总结与展望】

       本项目成功为小智AI开源项目增加了物理实体,让它从单纯的语音助手变成了一个有表情、能行动的机器人伙伴。通过自定义板级文件和舵机控制类,我们不仅驱动了2.8寸大屏,还实现了多路舵机的精准控制,且不干扰原有的音频和网络功能。

       未来可以做的改进:
       增加更多传感器,如超声波避障、陀螺仪姿态稳定。
       优化步态,实现更流畅的行走和转向。
       添加触摸屏交互,直接点击屏幕触发动作。
       通过WiFi远程控制,让机器人成为家庭监控小助手。

       如果你也对让AI拥有“身体”感兴趣,不妨试试这个项目,让你的小智AI动起来!有任何问题欢迎在社区交流。

【附件】
       完整代码已打包,可下载参考。  
下载附件bread-compact-wifi-lcd.zip





您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2026 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail