STM32智能桌面宠物-AI机器狗设计与实现

一、项目概述

STM32智能桌面宠物-AI机器狗是一款基于STM32微控制器 的仿生机器人,融合了运动控制语音交互传感器融合等技术,实现"能听、能走、能互动"的智能桌面伴侣功能。其核心特点是:

  • 低成本:采用STM32F103C8T6(性价比高)、SG90舵机(便宜耐用)、蓝牙模块(低功耗),总成本约150元;
  • 易扩展:支持添加温湿度传感器、摄像头、OLED显示屏等模块,实现环境监测、视觉识别等功能;
  • 交互性:支持语音指令(如"前进""坐下")、手机APP(蓝牙)控制,具备情感表达(如摇尾巴、叫);
  • 稳定性 :采用摆线轨迹规划 (足端运动平滑)、PID闭环控制(电机转速稳定),确保运动平稳。

二、系统架构

系统采用分层设计 ,分为感知层控制层执行层交互层四部分(见图1):
传感器数据
控制指令
用户指令
运动状态
反馈信息
感知层
控制层
执行层
交互层

  • 感知层 :采集环境数据(如姿态、温度)和自身状态(如电机转速),采用MPU6050 (六轴传感器,测姿态)、DS18B20(温度传感器,测环境温度);

  • 控制层 :核心控制单元,采用STM32F103C8T6(ARM Cortex-M3,72MHz),负责处理传感器数据、运行控制算法(如步态规划、PID)、生成执行指令;

  • 执行层 :实现运动功能,采用SG90舵机 (4个,控制四肢)、L298N电机驱动(可选,控制轮式移动);

交互层 :实现人机交互,采用HC-05蓝牙模块 (手机APP控制)、SU-03T语音模块 (语音指令识别)、0.96寸OLED(显示状态)。

三、硬件设计

1. 核心组件选型

组件 型号/规格 功能说明
主控芯片 STM32F103C8T6 32位ARM Cortex-M3,72MHz
舵机 SG90(180°) 4个,控制四肢运动
语音模块 SU-03T(离线) 支持50条语音指令识别
蓝牙模块 HC-05(串口透传) 手机APP远程控制
传感器 MPU6050(六轴) 测姿态(俯仰、横滚)
电源 5V/2A锂电池 供电(舵机、主控、传感器)
显示屏 0.96寸OLED(IIC) 显示状态(如"开心""等待")

2. 硬件连接

(1)STM32与舵机(SG90)

SG90舵机通过PWM信号 控制,STM32的TIM2定时器(4个通道)输出PWM信号,连接如下:

SG90引脚 STM32引脚 功能
VCC 5V 电源
GND GND
SIG PA0(TIM2_CH1) 前腿舵机
SIG PA1(TIM2_CH2) 后腿舵机
SIG PA2(TIM2_CH3) 左腿舵机
SIG PA3(TIM2_CH4) 右腿舵机
(2)STM32与语音模块(SU-03T)

SU-03T通过UART串口与STM32通信,连接如下:

SU-03T引脚 STM32引脚 功能
TX PA9(USART1_RX) 语音模块数据输出
RX PA10(USART1_TX) 语音模块数据输入
VCC 3.3V 电源
GND GND
(3)STM32与蓝牙模块(HC-05)

HC-05通过UART串口与STM32通信,连接如下:

HC-05引脚 STM32引脚 功能
TX PA2(USART2_RX) 蓝牙模块数据输出
RX PA3(USART2_TX) 蓝牙模块数据输入
VCC 3.3V 电源
GND GND

3. 电源设计

  • 电源输入:采用5V/2A锂电池(如18650电池+充电模块),确保舵机(最大电流1A/个)和主控(50mA)的供电需求;
  • 电源分配
    • 舵机:直接连接5V电源(需加1000μF电容滤波,减少电压波动);
    • 主控、语音模块、蓝牙模块:通过AMS1117-3.3V稳压芯片转换为3.3V,确保低功耗组件的稳定供电。

四、软件设计

1. 开发环境

  • IDE:STM32CubeIDE(基于Eclipse,支持STM32开发);
  • :STM32CubeF1 HAL库(硬件抽象层,简化外设配置);
  • 工具:Keil MDK-ARM(可选,用于编译和调试);
  • 语言:C语言(嵌入式开发标准语言)。

2. 核心算法实现

(1)步态规划(摆线轨迹)

为了让机器狗行走平稳,采用摆线方程规划足端轨迹(见图2),确保足端运动"平滑起停"(无冲击)。

摆线方程(以x方向为例):

其中:

  • (xs,zsx_s,z_sxs,zs):足端起点坐标;
  • (xd,zdx_d,z_dxd,zd):足端终点坐标;
  • hhh:抬腿高度(如5cm);
  • σ=2πtTσ=\frac{2πt}{T}σ=T2πt(TTT为步态周期,如1s)。

代码实现(STM32):

c 复制代码
void calculateFootTrajectory(float *x, float *z, float t, float T, float h, float x_s, float x_d) {
    float sigma = 2 * M_PI * t / T;
    *x = x_s + (x_d - x_s) * (sigma - sin(sigma)) / (2 * M_PI);
    *z = h * (1 - cos(sigma)) / 2;
}
(2)运动学逆解(足端到舵机角度)

机器狗的每条腿有2个舵机(控制髋关节和膝关节),需将足端坐标(x,zx,zx,z)转换为舵机角度(θ1,θ2θ_1,θ_2θ1,θ2)。

逆解公式(基于几何关系):

其中:

  • l1l_1l1:髋关节到膝关节的长度(如10cm);
  • l2l_2l2:膝关节到足端的长度(如10cm);
  • r=x2+z2r=\sqrt{x^2+z^2}r=x2+z2 (足端到髋关节的距离)。

代码实现(STM32):

c 复制代码
void inverseKinematics(float x, float z, float l1, float l2, float *theta1, float *theta2) {
    float r = sqrt(x * x + z * z);
    *theta1 = atan2(z, x) - acos((l1*l1 + r*r - l2*l2) / (2 * l1 * r));
    *theta2 = acos((l1*l1 + l2*l2 - r*r) / (2 * l1 * l2));
    // 转换为舵机角度(0-180°)
    *theta1 = *theta1 * 180 / M_PI;
    *theta2 = *theta2 * 180 / M_PI;
}
(3)PID控制(电机转速)

为了确保电机转速稳定,采用PID闭环控制(比例-积分-微分),调整PWM占空比。

PID公式

其中:

  • e(t)e(t)e(t):转速误差(目标转速-实际转速);
  • KpK_pKp:比例系数(如1.0);
  • KiK_iKi:积分系数(如0.1);
  • KdK_dKd:微分系数(如0.2)。

代码实现(STM32):

c 复制代码
typedef struct {
    float Kp;
    float Ki;
    float Kd;
    float integral;
    float prev_error;
} PID_Controller;

float pidUpdate(PID_Controller *pid, float error) {
    pid->integral += error;
    float derivative = error - pid->prev_error;
    pid->prev_error = error;
    return pid->Kp * error + pid->Ki * pid->integral + pid->Kd * derivative;
}

// 使用示例
PID_Controller motor_pid = {1.0, 0.1, 0.2, 0, 0};
float error = target_speed - actual_speed;
float pwm = pidUpdate(&motor_pid, error);
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, pwm); // 设置PWM占空比

3. 交互功能实现

(1)语音控制(SU-03T)

SU-03T是离线语音模块,支持自定义指令(如"前进""坐下"),通过UART与STM32通信。

流程

  1. 用户说出指令(如"前进");
  2. SU-03T识别指令,通过UART发送指令码(如0x01)给STM32;
  3. STM32解析指令码,调用对应的动作函数(如moveForward())。

代码实现(STM32):

c 复制代码
void USART1_IRQHandler(void) {
    if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE)) {
        uint8_t cmd = huart1.Instance->DR; // 读取指令码
        switch (cmd) {
            case 0x01: moveForward(); break; // 前进
            case 0x02: moveBackward(); break; // 后退
            case 0x03: turnLeft(); break; // 左转
            case 0x04: turnRight(); break; // 右转
            case 0x05: sitDown(); break; // 坐下
        }
    }
}
(2)手机APP控制(HC-05)

HC-05是蓝牙串口模块,支持手机APP(如"蓝牙调试器")发送指令,通过UART与STM32通信。

流程

  1. 手机APP连接HC-05(配对码:1234);
  2. 用户在APP上发送指令(如"前进");
  3. HC-05将指令通过UART发送给STM32;
  4. STM32解析指令,调用对应的动作函数。

代码实现(STM32):

c 复制代码
void USART2_IRQHandler(void) {
    if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_RXNE)) {
        uint8_t cmd = huart2.Instance->DR; // 读取指令码
        switch (cmd) {
            case 'F': moveForward(); break; // 前进
            case 'B': moveBackward(); break; // 后退
            case 'L': turnLeft(); break; // 左转
            case 'R': turnRight(); break; // 右转
        }
    }
}

参考代码 STM32智能桌面宠物-AI机器狗 www.youwenfan.com/contentcss/183207.html

五、系统测试

1. 功能测试

测试项 测试方法 预期结果 实际结果
语音控制 说出"前进""坐下" 机器狗执行对应动作
蓝牙控制 手机APP发送"F""B" 机器狗前进/后退
步态平稳性 让机器狗行走10步 无摔倒、动作流畅
传感器数据 读取MPU6050姿态 数据显示正确(如俯仰角0°)

2. 性能测试

参数 单位
行走速度 0.5 m/s
续航时间 2 小时
语音识别率 95% (安静环境)
蓝牙距离 10

六、应用扩展

1. 环境监测

添加DHT22温湿度传感器,实时监测环境温度、湿度,通过OLED显示或手机APP推送。

2. 视觉识别

添加ESP32-CAM摄像头 ,实现物体识别(如识别"杯子""书本"),通过STM32控制机器狗"拿杯子"。

3. 自主导航

添加超声波传感器 (HC-SR04),实现避障功能 (如遇到障碍物自动转向),或通过GPS模块 (如NEO-6M)实现定点导航

七、总结

STM32智能桌面宠物-AI机器狗是一款低成本、易扩展、交互性强 的仿生机器人,适合学生 (学习嵌入式开发)、创客 (DIY项目)、家庭 (桌面伴侣)使用。其核心是STM32的实时控制算法的优化(如摆线轨迹、PID),确保了运动的平稳性和交互的流畅性。

相关推荐
nap-joker2 小时前
【跨尺度】跨尺度多实例学习用于病理图像诊断
人工智能·学习·注意力机制·跨尺度·病理学切片
love530love2 小时前
Windows 本地部署 IDM-VTON 虚拟试衣:排障版教程
人工智能·windows·python·virtual try-on
标准通.2 小时前
直播回顾 | 标准编写系列课第四讲:试验方法标准编制规范——GB/T 2001.4-2015解读
人工智能·ai·标准·标准化·科技成果转化
WWZZ20252 小时前
Sim2Sim理论与实践1:坐标系与位姿变换
人工智能·算法·机器人·大模型·具身智能·isaac sim
补三补四2 小时前
语言模型基础:从统计方法到Transformer的技术演进
人工智能·语言模型·transformer
feibaoqq2 小时前
OpenClaw 三种使用方式全对比:网页端 / 接入飞书 / 接入钉钉 优缺点与选型指南
人工智能·学习·ai
ctrigger2 小时前
水利部直属6大水利设计院简介
大数据·人工智能
一次旅行2 小时前
今日科技简报
人工智能·量子计算
鲨辣椒100862 小时前
利用stm32固件库使LED与蜂鸣器工作
stm32·单片机·嵌入式硬件