# EDA-RobotPro AI智能机器狗 文档:https://wiki.yang17.top/products/oshwhub/oshw-c742ef3f5e014e409a924605f5b32752/ 项目来源:https://oshwhub.com/course-examples/eda-robotpro 分类:硬件项目 更新时间:2026-08-30T14:27:07.000Z 本项目是EDA-Robot的升级版,搭载ESP32S3实现小智AI控制功能 项目介绍 本项目使用 ESP32S3R8N16 模组,结合 INMP441 + MAX98357 实现小智AI对话及MCP协议控制机器狗运动。 相较于 EDA-Robot 简易机器狗项目而言,PRO版本加入的小智AI 提供的 LLM 大语言模型,不再需要通过手机 WEB 操控, 只需唤醒小智执行 “向前走”、“向后走” 等口语化指令即可。 相较于传统 ASR-PRO 指令的机器狗而言,LLM 大语言模型不需要手动指定词条应答, 而是由远端服务器模型推理得出应答结果,回答更加真实且富有情感。 本项目大部分均为插件,适合新手教学使用。 项目介绍 EDA-Robot Pro ✳️ ESP32S3系列主控 ✅ 支持AI大语言模型 ✅ 双核 主频240MHz ❌ 成本较高 ✳️ 需要联网,语音对话控制 🔋 双节 14500 电池供电 查看 PRO 详情 EDA-Robot ✳️ ESP8266主控 ❌ 离线词条语音控制 ❌ 单核 主频160MHz ✅ 成本更低 ✳️ 离线局域网手机遥控 🔋 双节 14500 电池供电 查看标准版详情 💡 EDA-Robot Pro 拥有更强大的AI功能和处理性能;EDA-Robot 则更为简单便宜。 固件功能 AI LLM ✅ 支持小智AI提供的大语言模型,能进行自然语言理解与处理。 MCP协议 ✅ 支持MCP协议服务,LLM可通过MCP协议控制机器狗动作。 动作控制 ✅ 支持通过自然语言控制,无需设置词条,均为LLM推理完成。 自定义唤醒 ✅ 支持自定义名称唤醒机器狗,定制专属宠物。 项目参数 ESP32S3 系列 ✅ ESP32S3 系列主控,内置 WiFi 功能 INMP441 模块 ✅ 采用 INMP441 语音模块,采集环境音用于 LLM 输入 MAX98357 模块 ✅ 采用 MAX98357 音频模块,输出音频用于 LLM 输 SG90/MG90 舵机组 ✅ 采用 SG90/MG90 舵机(180°版本),用于机器狗关节实现运动功能 SSD1315/06 模块 ✅ 采用 SSD1315/SSD1306 屏幕显示模块,用于表情及 LLM 输入输出显示 14500 电池组 ✅ 采用双节串联14500电池组,无需升压电路,仅需LDO即可供电,节约空间 硬件设计 主控电路 主控选用 ESP32S3系列 模组,集成 WiFi 功能,提供丰富的 GPIO 接口。 板载 USB 转串口芯片,方便程序下载和调试。 ESP32S3 主控模组原理图部分 主控模组启动电路原理图部分 查看数据手册 立创商城购买 音频采集电路 本系统使用 INMP441 数字麦克风模块进行音频采集,结构简单,可根据需求替换为更低成本型号。 INMP441音频采集电路原理图部分 INMP441数据手册引脚定义部分 音频输出电路 音频输出部分采用 MAX98357 模块,支持I2S音频输入,驱动扬声器输出。设计简单,性能稳定。 MAX98357音频输出电路原理图部分 MAX98357数据手册引脚定义部分 MAX98357原理图输出增益配置部分 显示电路 显示部分采用 SSD1306/SSD1315 OLED 屏幕,分辨率128×64,尺寸0.96或1.3英寸,需注意I2C线序及上拉电阻配置。 SSD1306 OLED显示屏电路原理图部分 查看数据手册 立创商城购买 电源供电电路 电源供电电路与 EDA-Robot 标准版一致,采用两节串联 14500 电池,串联后满电电压 8.4V, 通过两路 LDO 分别降压至 5V 为舵机供电和 3.3V 为 MCU 供电。 LDO to 5V 电路 5V 5V-LDO电路原理图部分 查看数据手册 立创商城购买 LDO to 3.3V 电路 3.3V 3.3V-LDO电路原理图部分 查看数据手册 立创商城购买 舵机电路 舵机电路与标准版一致,采用 SG90/MG90 舵机,通过 PWM 信号控制角度。 由于舵机内部自带 5V 转 3.3V 驱动电路,PWM 信号可直接由 MCU IO 控制,无需电平转换。 舵机控制电路原理图部分 其余电路 按键电路与下载接口设计简洁,均可直接连接 MCU IO。由于 MCU 资源充足,可轻松扩展更多功能。 按键电路原理图部分 舵机3D模型封装 下载接口电路部分 PCB固定螺丝部分 软件开发 完整源码请在附件查看 开发环境 软件环境:VSCode + ESP-IDF 开发语言:C / C++ 框架:ESP-IDF Framework 查看ESPIDF快速入门指南 项目依赖 本项目借助以下开源仓库协助开发: xiaozhi-esp32:An MCP-based Chatbot 感谢 Xiaoxia 及 社区贡献者 对该项目的开源贡献。 BSP 模块 本项目采用 BSP(Board Support Package)板级适配架构,基于 xiaozhi-esp32 框架, 专门为EDA-Robot Pro硬件平台定制,实现了AI语音控制的四足机器狗功能。 eda_robot_pro.cc: 主板支持包,硬件抽象层实现 eda_dog_controller.cc: 机器狗MCP控制器,实现动作队列和工具注册 eda_dog_movements_clean.cc: 步态运动算法实现 eda_dog_movements.h: 步态运动类定义和接口声明 oscillator.cc / .h: 舵机振荡器实现,提供平滑运动控制 config.h: 硬件引脚定义和系统参数配置 config.json: ESP-IDF构建配置,定义目标平台和编译选项 核心模块 eda_robot_pro.cc EDARobotPro 硬件抽象层 硬件抽象层,负责硬件初始化和设备管理,包括I2C总线、OLED显示屏、按键、音频编解码器及机器狗控制器。 class EDARobotPro { private: i2c_master_bus_handle_t display_i2c_bus_; // I2C总线句柄 Display* display_; // 显示屏实例 Button boot_button_; // Boot按键 void InitializeDisplayI2c(); // 初始化显示I2C void InitializeSsd1306Display(); // 初始化SSD1306显示屏 void InitializeButtons(); // 初始化按键 void InitializeEDARobotDogController(); // 初始化机器狗控制器 public: virtual Led* GetLed() override; // 获取LED(此板无LED) virtual AudioCodec* GetAudioCodec() override; // 获取音频编解码器 virtual Display* GetDisplay() override; // 获取显示屏 }; eda_dog_movements_clean.cc EDARobotDog 动作控制 机器狗动作控制模块,实现各种运动模式和动作序列,包括行走、转向、坐下、站立等基本动作。 class EDARobotDog { private: Oscillator servo_[SERVO_COUNT]; int servo_pins_[SERVO_COUNT]; int servo_trim_[SERVO_COUNT]; bool is_dog_resting_; public: void Init(int left_front_leg, int left_rear_leg, int right_front_leg, int right_rear_leg); void Home(); void SetTrims(int left_front_leg, int left_rear_leg, int right_front_leg, int right_rear_leg); void Walk(float steps, int period, int dir); void Turn(float steps, int period, int dir); void Sit(int period); void Stand(int period); void Sleep(); void Stretch(int period); void Shake(int period); void LiftLeftFrontLeg(int period, int height); void LiftLeftRearLeg(int period, int height); void LiftRightFrontLeg(int period, int height); void LiftRightRearLeg(int period, int height); }; oscillator.h Oscillator 振荡控制器 舵机振荡控制器,提供平滑的舵机运动控制,实现各种动作的精确执行。 class Oscillator { private: int pos_; int amplitude_; int offset_; double phase_; double phase0_; int trim_; public: void SetA(unsigned int amplitude); void SetO(int offset); void SetPh(double Ph); void SetTrim(int trim); void Refresh(); int GetPosition(); }; config.json config.json 配置文件 项目构建配置文件,定义目标平台、分区表和编译选项。 { "target": "esp32s3", "builds": [ { "name": "EDA-robot-pro", "sdkconfig_append": [ "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v1/16m.csv\"", "CONFIG_OLED_SSD1306_128X64=y" ] } ] } 实现原理 硬件抽象层架构 EDARobotPro 板级支持包 基于 xiaozhi-esp32 框架的 BSP 架构,实现硬件抽象层,统一管理 I2C 总线、OLED 显示、音频编解码器等外设。 class EDARobotPro : public WifiBoard { private: i2c_master_bus_handle_t display_i2c_bus_; esp_lcd_panel_handle_t panel_ = nullptr; Display* display_ = nullptr; Button boot_button_; Button touch_button_; void InitializeDisplayI2c(); // 初始化I2C总线 void InitializeSsd1306Display(); // 初始化SSD1306显示屏 void InitializeEDARobotDogController(); // 初始化机器狗控制器 void InitializeButtons(); // 初始化按键 public: virtual AudioCodec* GetAudioCodec() override; virtual Display* GetDisplay() override; }; 舵机振荡控制系统 Oscillator 振荡器实现 基于 LEDC PWM 的舵机控制器,通过正弦波振荡实现平滑的舵机运动,支持幅度、偏移、相位和周期控制。 void Oscillator::Refresh() { if (NextSample()) { if (!stop_) { // 正弦波振荡计算 int pos = std::round(amplitude_ * std::sin(phase_ + phase0_) + offset_); if (rev_) pos = -pos; Write(pos + 90); // 写入舵机位置 } phase_ = phase_ + inc_; // 更新相位 } } void Oscillator::Write(int position) { int angle = pos* + trim*; // 应用微调 angle = std::min(std::max(angle, 0), 180); // 限制角度范围 // 转换为LEDC占空比 uint32_t duty = (uint32_t)(((angle / 180.0) * 2.0 + 0.5) * 8191 / 20.0); ESP_ERROR_CHECK(ledc_set_duty(ledc_speed_mode_, ledc_channel_, duty)); ESP_ERROR_CHECK(ledc_update_duty(ledc_speed_mode_, ledc_channel_)); } 步态运动算法 Walk 行走算法实现 采用分步式步态控制,通过精确的舵机位置序列实现四足机器狗的前进和后退运动。 void EDARobotDog::Walk(float steps, int period, int dir) { for (int step = 0; step < (int)steps; step++) { if (dir == FORWARD) { // 前进步态序列 int current_pos[SERVO_COUNT]; // 第1步:左前腿和右后腿抬起 current_pos[LEFT_FRONT_LEG] = 110; current_pos[RIGHT_REAR_LEG] = 70; current_pos[LEFT_REAR_LEG] = 90; current_pos[RIGHT_FRONT_LEG] = 90; MoveServos(100, current_pos); // 第2步:对角线腿组协调运动 current_pos[LEFT_REAR_LEG] = 70; current_pos[RIGHT_FRONT_LEG] = 110; MoveServos(100, current_pos); // 第3步:回到中性位置 current_pos[LEFT_FRONT_LEG] = 90; current_pos[RIGHT_REAR_LEG] = 90; MoveServos(100, current_pos); // 继续其他步态序列... } } } MCP 协议集成 MCP 工具注册机制 通过 MCP 协议向 AI 大语言模型暴露机器狗控制接口,支持参数验证和回调函数执行。 void EDARobotDogController::RegisterMcpTools() { auto &mcp_server = McpServer::GetInstance(); // 注册行走工具 mcp_server.AddTool( "self.dog.walk", "行走。steps: 行走步数(1-100); speed: 行走速度(500-2000); direction: 方向(-1=后退, 1=前进)", PropertyList({ Property("steps", kPropertyTypeInteger, 4, 1, 100), Property("speed", kPropertyTypeInteger, 1000, 500, 2000), Property("direction", kPropertyTypeInteger, 1, -1, 1) }), [this](const PropertyList &properties) -> ReturnValue { int steps = properties["steps"].value(); int speed = properties["speed"].value(); int direction = properties["direction"].value(); QueueAction(ACTION_WALK, steps, speed, direction, 0); return true; } ); } FreeRTOS 任务调度 异步动作执行系统 基于 FreeRTOS 队列的异步任务调度,确保动作执行不阻塞 AI 对话和其他系统功能。 static void ActionTask(void *arg) { EDARobotDogController *controller = static_cast(arg); DogActionParams params; controller->dog_.AttachServos(); // 初始化舵机 while (true) { // 从队列接收动作指令 if (xQueueReceive(controller->action_queue_, ¶ms, pdMS_TO_TICKS(1000)) == pdTRUE) { controller->is_action_in_progress_ = true; // 根据动作类型执行相应动作 switch (params.action_type) { case ACTION_WALK: controller->dog_.Walk(params.steps, params.speed, params.direction); break; case ACTION_TURN: controller->dog_.Turn(params.steps, params.speed, params.direction); break; case ACTION_SIT: controller->dog_.Sit(params.speed); break; } // 动作完成后回到初始位置 if (params.action_type != ACTION_HOME && params.action_type != ACTION_SIT) { controller->dog_.Home(); } controller->is_action_in_progress_ = false; } } } 安装结构 结构设计 项目采用单外壳结构,由底盖构成,提供舵机固定及PCB固定。 机器狗组装图 底盖设计 底盖正面视图 底盖背面视图 延续EDA-Robot标准版设计风格,采用倒角设计 底盖内部空间充足,预留4个舵机位置及储线区域 升级舵机固定方式,添加限位卡口,舵机可无需螺丝便卡在槽位中 实物展示 实物正面 实物背面 实物实物侧视图 实物实物侧视图 底壳及主板 分解图 拓展方向 功能拓展建议 本项目提供了一个完整的 AI 机器狗方案,你可以基于此项目进行以下拓展: 增加更多机器狗动作和行为模式 支持视觉识别,添加摄像头模块 集成更多传感器(陀螺仪、加速度计等) 添加环境感知和避障功能 接入HomeAssistant实现智能家具控制 注意事项 使用注意事项 1 采购须知 采购SSD1315/SSD1306显示屏时请务必注意线序,本项目使用GND/VCC/SCL/SDA线序,EDA-Robot标准版复刻中很多同学因为买错线序导致短路烧板。 2 焊接建议 1.MAX98357、INMP441及OLED模块可以使用排针直接焊接或排母连接,建议OLED使用排针焊接后掰弯,其余模块排母连接。2.焊接时建议焊接优先级为:贴片>阻容插件>其余插件>屏幕组件>电池盒组件 3 测试流程 焊接完成后请优先检查MCU相邻IO引脚有无连锡短路,MCU到板间有无短路。电容相邻焊盘有无连锡短路或插反。上电前先用万用表蜂鸣挡测试BAT+、3.3V和5V到GND有无短路。全部确认无误后再上电。 4 编译事宜 请务必确保源码路径中无中文路径,否则可能造成编译问题。编译前请安装好VSCODE和ESPIDF工具。 5 烧录教程 烧录部分可以参考 EDA-Robot机器狗-烧录教程 物料替换对照表 立创商城采购物料清单 数量 器件 位号 商城编号 1100nFC1C5632430 410uFC2,C3,C5,C6C43351 2按键KEY1,KEY2C393938 1SSD1315/SSD1306 屏幕OLED1C5248080 1010kΩR1,R2,R4,R5,R6,R7,R9,R10,R20,R22C410695 1100kΩR23C176449 1SK-12D07-6SW1C5289941 4PZ254V-11-03PT1,T2,T3,T4C2937625 1AMS1117-5.0U2C33960103 1AMS1117-3.3U3C2977152 1ESP32S3-N16R8U5C2913202 110Pin 排针 - 10P裁切U7, OLED1C492409 113Pin 排母 - 15P裁切U1, MIC1C2932676 其他平台采购物料清单 数量 器件 位号 8M2×4 螺丝SCREW3~SCREW10 1INMP441 模块MIC1 1MAX98357 模块U1 12节串联 14500 电池组BT1 4SG90舵机T1,T2,T3,T4 💡 提示:部分通用元件可选择等效型号,重点关注封装及电气参数一致性。 烧录分区表 下表列出了 ESP32S3 固件烧录时的分区布局,地址与文件路径对应关系如下,可直接用于命令行烧录或 Flash 工具导入配置。 烧录地址 文件路径 说明 0x0 bootloader/bootloader.bin Bootloader 启动加载程序 0x8000 partition_table/partition-table.bin 分区表定义 0xd000 ota_data_initial.bin OTA 初始数据区 0x20000 xiaozhi.bin 主程序固件 0x800000 generated_assets.bin 资源文件(语音模型/AI配置) 💡 提示:使用 esptool.py 可执行如下命令进行烧录: esptool.py write_flash 0x0 bootloader/bootloader.bin 0x8000 partition_table/partition-table.bin 0xd000 ota_data_initial.bin 0x20000 xiaozhi.bin 0x800000 generated_assets.bin 变更日志 #251211 Fix 3D预览 修正模型位置,确保3D预览显示与实物接近。 Fix README 修正烧录教程的超链接地址错误。 #251218 Fix README 变更实物图 #260320 Fix xiaozhi源码/固件 优化步态算法