【花雕动手做】行空板 K10 系列实验之胜利牌羽毛球筒麦克纳姆轮四驱语音识别控制小车


行空板K10是一款专为快速体验物联网和学习人工智能而设计的开发学习板,100%采用国产芯片,知识产权自主可控,符合信息科技课程中编程学习、物联网及人工智能等教学需求。该板集成2.8寸LCD彩屏、WiFi蓝牙、摄像头、麦克风、扬声器、RGB指示灯、多种传感器及丰富的扩展接口。凭借高度集成的板载资源,教学过程中无需额外连接其他设备,便可轻松实现传感器控制、物联网应用以及人脸识别、语音识别、语音合成等AI人工智能项目。
主要特点
集成摄像头&内置算法,可进行离线图像检测
集成麦克风&内置算法,可进行离线语音识别
集成扬声器&内置算法,可进行离线语音合成
2.8寸彩色屏幕,数据展示更清晰
集成度高,利于教学
接口丰富,兼容软件多,扩展性好

今天早上打完羽毛球,捡到一个胜利牌的空球筒,于是突发奇想,试试看能否做个智能小车?
使用的TT电机、麦克纳姆轮、锂电池与扩展板






主打:人工智能模块

语音识别合成相关说明


辅助:屏幕显示相关积木

接脚 IO 扩展模块


LED控制模块

知识点:麦克纳姆轮(麦轮)
一、基础结构与核心原理
- 硬件结构
麦克纳姆轮由轮毂 + 45° 斜向自由辊子两部分组成:
轮毂:电机驱动主轮体;
辊子:环绕轮毂倾斜 45° 安装,可独立自由滚动,与地面接触产生斜向摩擦力CSDN博…。
四轮底盘必须搭配2 个左旋麦轮 + 2 个右旋麦轮,矩形四角对称安装(标准 X 型布局),缺一无法实现全向移动。 - 力学原理
单个轮子转动时,地面摩擦力会分解为纵向分力(车身前后)、横向分力(车身左右);
通过独立控制四个电机的转向、转速,让四个轮子的分力相互抵消 / 叠加,合成任意平面运动:前后直行、左右横移、原地 360° 旋转、斜向行走抖音。 - 和普通两轮差速小车核心区别

二、四轮布局与电机编号定义
使用Microbit_Motor四路驱动,编号定义:
M1:左前轮
M2:右前轮
M3:右后轮
M4:左后轮
转向标识:CW=顺时针正转,CCW=逆时针反转
三、6 种基础运动电机转向对照表
- 前进 qian jin
motorbit.motorRun(M1, CW, 200);
motorbit.motorRun(M3, CCW, 200);
逻辑:左前 CW、右后 CCW;四轮纵向分力同向叠加,横向力抵消,车身直线向前。
2. 后退 hou tui
motorbit.motorRun(M1, CCW, 200);
motorbit.motorRun(M3, CW, 200);
逻辑:与前进转向全部反向,车身直线向后倒退。
3. 右横移 you heng(车身整体向右平移)
motorbit.motorRun(M2, CCW, 200);
motorbit.motorRun(M4, CW, 200);
逻辑:右前 CCW、左后 CW;纵向分力抵消,横向合力向右,车身横着走。
4. 左横移 zuo heng(车身整体向左平移)
motorbit.motorRun(M2, CW, 200);
motorbit.motorRun(M4, CCW, 200);
逻辑:右前 CW、左后 CCW,横向合力向左。
5. 原地顺时针转圈 zhuan quan
motorbit.motorRun(M1, CW, 200);
motorbit.motorRun(M2, CW, 200);
motorbit.motorRun(M3, CW, 200);
motorbit.motorRun(M4, CW, 200);
逻辑:四轮全部同向 CW 旋转;前后左右分力形成旋转力偶,无平移分量,原地持续旋转。
6. 停车 ting che
motorbit.motorStop(ALL);
四路电机全部断电刹车,所有轮子无驱动力,小车立刻静止锁死。
四、适配代码的语音控制整体架构
1、硬件组合
行空板 K10 + ASR 离线语音识别模块 + Microbit 四路电机驱动板 + 麦克纳姆四轮底盘
语音模块:识别唤醒词「你好小新」+6 条拼音口令;
Microbit 电机库:封装四路电机motorRun/motorStop,直接控制每轮转向与 PWM 速度;
LCD 屏幕:24 号大字实时显示当前运动状态。
2、程序控制流程
上电初始化主板、语音模块、四路电机引脚;
预注册语音指令:前进 / 停车 / 后退 / 右横 / 左横 / 转圈;
麦克风持续监听唤醒词,唤醒后解锁电机控制权限;
识别到语音口令,自动输出对应电机转向组合,屏幕同步提示;
循环清空屏幕文字,持续等待下一条语音指令。
五、麦克纳姆轮优缺点
1·、优点
全向移动:可前后、左右横移、原地自转,狭小室内、仓储机器人首选;
运动灵活,无需预留转弯空间,侧向避障、侧方停靠极强;
运动解耦:平移和旋转互不干扰,可一边横移一边转向;
模块化控制:每路电机独立调速,代码只需要调整转向组合即可切换运动模式。
2、缺点
成本更高,需要 4 套独立电机驱动;
辊子耐磨差,长期重载、粗糙地面容易磨损;
传动效率低于普通橡胶轮,相同电机功率下速度略慢;
安装要求严格,轮子左右不能装反,否则运动错乱、跑偏。
六、典型应用场景
1、教育创客:行空板 / Arduino 语音遥控全向小车;
2、仓储 AGV 物流小车,狭窄货架之间侧向穿梭;
3、工业重载转运平台、机器人比赛底盘;
4、室内巡检机器人、云台全向移动底座。

【花雕动手做】行空板 K10 系列实验之胜利牌羽毛球筒麦克纳姆轮四驱语音识别控制小车
实验开源代码
// 1.离线语音识别库:提供语音唤醒、拼音指令识别、持续收音功能
#include "asr.h"
// 2.行空板K10底层驱动库:管理LCD屏幕、画布绘制、主板硬件初始化
#include "unihiker_k10.h"
// 3.Microbit四路电机驱动库,专门适配四轮麦克纳姆轮底盘,独立控制M1/M2/M3/M4电机
#include <Microbit_Motor.h>
// ===================== 全局硬件对象实例化 =====================
UNIHIKER_K10 k10; // 行空板主控实例,统一管理屏幕、系统总线、板载外设
ASR asr; // 离线语音识别模块实例,处理麦克风收音与人声解析
uint8_t screen_dir=2; // 屏幕旋转参数:数值2代表屏幕倒置显示
Microbit_Motor motorbit; // 四路电机驱动对象
/* 电机编号对应四轮麦克纳姆轮底盘布局
M1 = 左前轮
M2 = 右前轮
M3 = 右后轮
M4 = 左后轮
CW = 电机顺时针正转;CCW = 电机逆时针反转
速度参数范围 0~255,数值越大转速越快,本程序统一使用200中高速 */
//=====================================================================
// setup() 上电初始化函数,设备开机/重启仅执行1次
// 功能:初始化主板、语音模块、屏幕画布,批量注册7条麦轮小车语音控制拼音指令
//=====================================================================
void setup() {
// 初始化行空板全部底层硬件:串口、I2C总线、LCD屏幕、IO外设资源
k10.begin();
// 离线语音识别模块初始化三大核心参数
// CONTINUOUS:持续收音模式,麦克风不间断实时监听环境人声
// CN_MODE:中文识别模式,仅能识别提前注册的中文拼音口令
// 10000:收音抗噪灵敏度阈值,数值越大过滤环境杂音、防误唤醒能力越强
asr.asrInit(CONTINUOUS, CN_MODE, 10000);
// 阻塞循环等待语音识别模型加载完成
// _asrState == 0 代表模块未就绪,每100ms循环检测一次,防止未初始化调用报错
while(asr._asrState == 0){delay(100);}
// 根据预设screen_dir参数初始化倒置LCD显示屏
k10.initScreen(screen_dir);
// 创建屏幕绘图画布缓存区,所有文字先存入缓存,再统一刷新到实体屏幕,减少刷屏闪烁
k10.creatCanvas();
// 批量注册7条离线语音控制指令,语音模块仅识别预先录入的拼音
asr.addASRCommand(0+1, "qian jin"); // ID=1 语音口令:前进
asr.addASRCommand(1+1, "ting che"); // ID=2 语音口令:停车
asr.addASRCommand(2+1, "hou tui"); // ID=3 语音口令:后退
asr.addASRCommand(3+1, "you heng"); // ID=4 语音口令:右横移
asr.addASRCommand(4+1, "zuo heng"); // ID=5 语音口令:左横移
asr.addASRCommand(5+1, "zhuan quan"); // ID=6 语音口令:原地转圈
asr.addASRCommand(6+1, "xie zou"); // ID=7 语音口令:斜着走(斜向直行)
}
//=====================================================================
// loop() 主循环函数,初始化完成后无限循环持续运行
// 功能:实时检测语音唤醒状态、识别语音指令,驱动四路麦克纳姆电机,屏幕同步显示车辆运行状态
//=====================================================================
void loop() {
// 判断麦克风是否识别到固定唤醒关键词【你好小新】
if (asr.isWakeUp()) {
// 唤醒成功:画布第6行输出红色提示文字
k10.canvas->canvasText("已唤醒行空板小车.......", 6, 0xFF0000);
// 将画布缓存内所有文字一次性刷新输出到LCD实体屏幕
k10.canvas->updateCanvas();
}
else {
// 未唤醒待机状态:画布第4行输出蓝色提示文字,告知用户唤醒口令
k10.canvas->canvasText("唤醒词为“你好小新”", 4, 0x0000FF);
k10.canvas->updateCanvas();
}
// ==========语音指令ID1:qian jin 小车直线前进(麦克纳姆标准直行逻辑)==========
if (asr.isDetectCmdID(0+1)) {
// ALL代表同时控制M1/M2/M3/M4四路电机全部顺时针转动
// 四轮同向正转,纵向推力叠加、横向分力相互抵消,车身笔直向前行驶
motorbit.motorRun(ALL, CW, 200);
// 屏幕居中24号黑色中英文字体打印运行状态
// 参数说明:X坐标,Y坐标,文字RGB颜色,字体类型,字号大小,自动换行开关
k10.canvas->canvasText("K10 小车前进", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
}
// ==========语音指令ID2:ting che 小车全部刹车停止==========
if (asr.isDetectCmdID(1+1)) {
// motorStop(ALL):一次性切断四路电机全部输出,电机断电锁死,小车立刻静止
motorbit.motorStop(ALL);
k10.canvas->canvasText("K10 小车停止", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
}
// ==========语音指令ID3:hou tui 小车直线后退==========
if (asr.isDetectCmdID(2+1)) {
// 四轮全部逆时针反转,与前进转向完全反向,车身直线向后倒退
motorbit.motorRun(ALL, CCW, 200);
k10.canvas->canvasText("K10 小车后退", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
}
// ==========语音指令ID4:you heng 车身整体向右横向平移==========
if (asr.isDetectCmdID(3+1)) {
// 麦克纳姆轮横移差速组合:纵向分力完全抵消,仅保留向右横向合力
motorbit.motorRun(M1, CCW, 200); // 左前轮逆时针
motorbit.motorRun(M2, CW, 200); // 右前轮顺时针
motorbit.motorRun(M3, CW, 200); // 右后轮顺时针
motorbit.motorRun(M4, CCW, 200); // 左后轮逆时针
k10.canvas->canvasText("K10 小车右横", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
}
// ==========语音指令ID5:zuo heng 车身整体向左横向平移==========
if (asr.isDetectCmdID(4+1)) {
// 反向差速组合,纵向分力抵消,合力向左,整车横向左移
motorbit.motorRun(M1, CW, 200); // 左前轮顺时针
motorbit.motorRun(M2, CCW, 200); // 右前轮逆时针
motorbit.motorRun(M3, CCW, 200); // 右后轮逆时针
motorbit.motorRun(M4, CW, 200); // 左后轮顺时针
k10.canvas->canvasText("K10小车左横", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
}
// ==========语音指令ID6:zhuan quan 小车原地顺时针转圈==========
if (asr.isDetectCmdID(5+1)) {
// 对角电机反向转动,形成纯旋转力偶,无前后/左右平移分量,零半径原地自转
motorbit.motorRun(M1, CCW, 200);
motorbit.motorRun(M2, CW, 200);
motorbit.motorRun(M3, CCW, 200);
motorbit.motorRun(M4, CW, 200);
k10.canvas->canvasText("K10小车原地转圈", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
}
// ==========语音指令ID7:xie zou 小车斜向直行(左前方斜走)==========
if (asr.isDetectCmdID(6+1)) {
// 仅左前M1、左后M4电机顺时针运转,M2/M3停机,推力合成斜向前左方向
motorbit.motorRun(M1, CW, 200);
motorbit.motorRun(M4, CW, 200);
k10.canvas->canvasText("K10小车斜着走", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
}
// 清空画布第6行及下方全部文字,清除上一轮运动状态残留文字,避免新旧文字重叠产生残影
k10.canvas->canvasClear(6);
}
代码解读
一、项目整体简介
硬件搭配:行空板 K10 + 离线 ASR 语音识别模块 + Microbit 四路电机驱动板 + 四轮麦克纳姆轮底盘
- 唤醒固定口令:你好小新,识别唤醒词后才能操控小车;
- 共 7 组语音拼音指令:前进、停车、后退、右横移、左横移、原地转圈、斜向行走;
- 依托麦克纳姆轮 45° 斜辊推力矢量叠加原理,实现直行、横移、零半径自转、斜走全向移动;
- LCD 屏幕使用 24 号大号字体实时展示小车当前动作,电机统一固定速度 200(调速范围 0~255)。
二、头文件与全局对象解析
#include "asr.h"
#include "unihiker_k10.h"
#include <Microbit_Motor.h>
asr.h:离线语音识别库,实现持续收音、唤醒检测、自定义拼音指令识别;unihiker_k10.h:行空板底层驱动,管理 LCD 屏幕、画布缓存、主板硬件初始化;Microbit_Motor.h:四路直流电机专用驱动库,可单独控制 M1/M2/M3/M4 任意一路电机,适配麦轮底盘。
UNIHIKER_K10 k10;
ASR asr;
uint8_t screen_dir=2;
Microbit_Motor motorbit;
k10:行空板主控实例,统一管理屏幕、系统通信总线;asr:语音识别实例,负责麦克风收音、人声解析;screen_dir=2:设置屏幕倒置显示;motorbit:四路电机驱动对象,电机编号定义:- M1 = 左前轮 M2 = 右前轮
- M3 = 右后轮 M4 = 左后轮
- CW = 电机顺时针正转,CCW = 电机逆时针反转
三、setup () 上电初始化(开机仅执行 1 次)
k10.begin();
初始化行空板全部底层硬件:串口、I2C 总线、屏幕、板载 IO 外设。
asr.asrInit(CONTINUOUS, CN_MODE, 10000);
while(asr._asrState == 0){delay(100);}
语音模块初始化参数说明:
CONTINUOUS:持续收音模式,麦克风不间断监听人声;CN_MODE:中文识别模式,仅识别提前注册的拼音口令;10000:收音抗噪灵敏度,数值越大过滤环境杂音、防误唤醒能力越强;
循环阻塞等待语音模型加载完毕,模块就绪才执行后续代码,防止调用报错。
k10.initScreen(screen_dir);
k10.creatCanvas();
按照倒置参数点亮 LCD 屏幕,创建画布缓存,所有文字先存入缓存再统一刷新,减少屏幕闪烁。
asr.addASRCommand(0+1, "qian jin"); // ID1 前进
asr.addASRCommand(1+1, "ting che"); // ID2 停车
asr.addASRCommand(2+1, "hou tui"); // ID3 后退
asr.addASRCommand(3+1, "you heng"); // ID4 右横移
asr.addASRCommand(4+1, "zuo heng"); // ID5 左横移
asr.addASRCommand(5+1, "zhuan quan"); // ID6 原地转圈
asr.addASRCommand(6+1, "xie zou"); // ID7 斜着走
批量录入 7 条离线语音口令,语音模块仅能识别预存指令,无法识别未录入词语。
四、loop () 无限主循环,实时监听语音指令
1. 唤醒状态判断
asr.isWakeUp() 检测麦克风是否识别唤醒词「你好小新」:
- 唤醒成功:画布第 6 行输出红色文字
已唤醒行空板小车.......; - 未唤醒待机:画布第 4 行输出蓝色提示文字
唤醒词为“你好小新”;updateCanvas()将缓存文字一次性刷新到实体屏幕。
2. Microbit 电机库核心函数
motorRun(通道, 转向, 速度)- 通道:
ALL四路同时控制 / M1/M2/M3/M4 单路独立控制; - 转向:
CW顺时针、CCW逆时针; - 速度区间:0~255,本代码统一 200 中高速;
- 通道:
motorStop(ALL):四路电机同时断电锁死,小车立即静止。
3. 每条语音指令麦轮运动逻辑
① qian jin 前进
motorbit.motorRun(ALL, CW, 200);
四轮全部顺时针同步转动,麦轮纵向摩擦力叠加、横向分力抵消,车身直线向前行驶。
② ting che 停车
motorbit.motorStop(ALL);
M1/M2/M3/M4 全部切断动力输出,四轮无驱动力,小车立刻刹车静止。
③ hou tui 后退
motorbit.motorRun(ALL, CCW, 200);
四轮全部逆时针反转,与前进转向完全反向,车身直线向后倒退。
④ you heng 右横移
motorbit.motorRun(M1, CCW, 200);
motorbit.motorRun(M2, CW, 200);
motorbit.motorRun(M3, CW, 200);
motorbit.motorRun(M4, CCW, 200);
四路电机反向差速配合,前后纵向推力相互抵消,仅保留向右的横向合力,整车整体右移。
⑤ zuo heng 左横移
motorbit.motorRun(M1, CW, 200);
motorbit.motorRun(M2, CCW, 200);
motorbit.motorRun(M3, CCW, 200);
motorbit.motorRun(M4, CW, 200);
与右横移转向全部反向,纵向分力抵消,横向合力向左,车身整体左移。
⑥ zhuan quan 原地转圈
motorbit.motorRun(M1, CCW, 200);
motorbit.motorRun(M2, CW, 200);
motorbit.motorRun(M3, CCW, 200);
motorbit.motorRun(M4, CW, 200);
对角电机反向转动,形成纯旋转力偶,无前后、左右平移分量,零半径原地持续顺时针自转。
⑦ xie zou 斜着走
motorbit.motorRun(M1, CW, 200);
motorbit.motorRun(M4, CW, 200);
仅左前 M1、左后 M4 电机顺时针运转,右前 M2、右后 M3 停机,推力合成左前方斜向直行。
4. 屏幕清理语句
k10.canvas->canvasClear(6);
清空画布第 6 行及下方全部文字,清除上一轮动作文字,避免新旧文字重叠出现残影。
五、7 种运动电机配置对照表

六、完整运行流程
- 设备上电,初始化行空板硬件、语音识别模块,循环等待语音模型加载完成;
- 初始化倒置 LCD 屏幕、创建绘图画布,录入 7 条语音控制拼音指令;
- 麦克风不间断监听唤醒词「你好小新」;
- 识别唤醒词后屏幕红色文字提示已唤醒,未唤醒则蓝色文字提示唤醒口令;
- 说出对应语音口令,四路电机按照麦克纳姆矢量差速逻辑运转,屏幕同步打印当前运动状态;
- 循环末尾自动清空屏幕下方文字,持续等待下一条语音指令。
Mind+图形编程



实验场景图与视频记录






【【花雕动手做】行空板 K10 系列实验之胜利牌羽毛球筒麦克纳姆轮四驱语音识别控制小车#手工机械爱好者 #行空板k10 #人工智能技术 #diy造车】
行空板K10羽毛球筒麦轮四驱语音识别小车
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)