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

知识点:三驱福来轮(三轮全向轮)控制原理 一、福来轮(全向 Omni 轮)基础结构与力学特性 福来轮vs麦克纳姆轮对比
二、三轮标准布局(核心硬件前提) 三个福来轮在圆形底盘上均匀正三角分布,两两夹角严格 120°,每个轮子主轴指向底盘几何中心:

三轮120°布局坐标系 1 号轮(前轮):安装角 90°,主轴沿车身 Y 轴正方向; 2 号轮(左后):安装角 210°; 3 号轮(右后):安装角 330°; 每个轮子独立配 1 个直流减速电机 + 驱动芯片,三路 PWM 独立调速、正反转控制。 关键:三个轮子缺一不可,两轮福来轮无法实现全向平移 / 原地自转。
三、底层力学运动原理(矢量叠加核心) 单个福来轮仅能沿自身主轴方向产生推力,垂直主轴方向可自由滑动,无阻力; 三个轮子的推力矢量在 XY 平面叠加,合成车身X 横向、Y 纵向平移速度 + 绕中心旋转角速度; 通过修改三个电机的转速大小、旋转方向(正负速度),改变三个推力矢量,就能合成平面内任意运动:直行、横移、斜走、原地零半径旋转。 运动学速度换算公式(主控代码核心计算) 设车身目标运动: Vx:车身左右横向速度(右为正) Vy:车身前后纵向速度(前为正) ω:车身原地旋转角速度(顺时针为正) R:底盘中心到任意轮子的距离 三个轮子目标线速度: plaintext V1 = Vy + R·ω V2 = -0.5·Vy – 0.866·Vx + R·ω V3 = -0.5·Vy + 0.866·Vx + R·ω 计算结果正负号 = 电机转向;数值绝对值 = PWM 调速占空比; 主控收到前进 / 横移 / 转圈指令后,先算出 Vx、Vy、ω,再代入公式算出三路电机转速输出。
四、6 种标准运动电机控制逻辑(对应语音遥控场景)
五、电子控制完整流程(行空板 / ESP32 语音小车适配)
六、三轮福来轮 vs 四轮麦克纳姆轮优缺点对比

七、典型应用场景 创客教育语音遥控小车(你当前行空板语音项目); 小型桌面巡检机器人、绘图机器人; 狭小空间转运轻型物料 AGV; 云台小型全向移动底座。
八、三轮驱动与四轮驱动全向福来轮配置图

【花雕动手做】行空板 K10 系列实验之TT 马达三驱动全向福来轮语音识别控制小车
实验开源代码
// 引入离线语音识别库asr.h,实现语音唤醒、拼音口令识别、持续收音监听
#include "asr.h"
// 行空板K10底层驱动库,负责LCD屏幕初始化、画布文字绘制、主板硬件初始化
#include "unihiker_k10.h"
// Microbit三路电机驱动库,适配三轮福来全向轮底盘,独立控制M1/M2/M3三路电机调速换向
#include <Microbit_Motor.h>
// =====================硬件对象实例化=====================
UNIHIKER_K10 k10; // 行空板主控对象,统一管理屏幕、系统通信总线
ASR asr; // 离线语音识别模块实例,处理麦克风收音与人声解析
uint8_t screen_dir=2; // 屏幕旋转参数:数值2代表屏幕倒置显示
Microbit_Motor motorbit; // 三路电机驱动实例,对应三轮福来轮底盘:M1、M2、M3三个独立电机
//=====================================================================
// setup() 上电初始化函数,设备开机/重启仅执行1次
// 功能:初始化主板、语音模块、屏幕,批量注册7条三轮福来轮小车语音控制口令
//=====================================================================
void setup() {
// 初始化行空板全部底层硬件:串口、I2C总线、LCD屏幕、外设IO资源
k10.begin();
// 初始化离线语音识别模块三大核心参数
// CONTINUOUS:持续收音模式,麦克风不间断监听环境人声
// CN_MODE:中文识别模式,仅识别中文拼音口令
// 12000:收音灵敏度阈值,数值越大抗环境噪音、误唤醒能力越强
asr.asrInit(CONTINUOUS, CN_MODE, 12000);
// 阻塞循环等待语音模块加载语音模型完成
// _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, "shun zhuan"); // ID=6 语音口令:顺时针原地转圈
asr.addASRCommand(6+1, "ni zhuan"); // 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();
}
// ==========语音指令1:qian jin 小车直线前进(三轮福来轮)==========
if (asr.isDetectCmdID(0+1)) {
// motorRun(电机通道, 转向, 速度)
// M2电机顺时针CW、M3电机逆时针CCW,M1不启动;三轮推力矢量合成纯向前合力
motorbit.motorRun(M2, CW, 200);
motorbit.motorRun(M3, CCW, 200);
// 全屏居中24号黑色大字显示小车运行状态
// 参数:X坐标、Y坐标、文字颜色、中英文字体、字号、自动换行开关
k10.canvas->canvasText("K10 小车前进", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
}
// ==========语音指令2:ting che 小车全部刹车停止==========
if (asr.isDetectCmdID(1+1)) {
// motorStop(ALL):一次性切断M1/M2/M3三路电机输出,电机断电锁死,小车立刻静止
motorbit.motorStop(ALL);
k10.canvas->canvasText("K10 小车停止", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
}
// ==========语音指令3:hou tui 小车直线后退==========
if (asr.isDetectCmdID(2+1)) {
// M2逆时针CCW、M3顺时针CW,与前进转向完全反向,矢量合成纯向后推力
motorbit.motorRun(M2, CCW, 200);
motorbit.motorRun(M3, CW, 200);
k10.canvas->canvasText("K10 小车后退", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
}
// ==========语音指令4:you heng 小车整体向右横向平移==========
if (asr.isDetectCmdID(3+1)) {
// M1逆时针、M2顺时针、M3逆时针,三轮推力抵消纵向分力,合成向右横向合力
motorbit.motorRun(M1, CCW, 200);
motorbit.motorRun(M2, CW, 200);
motorbit.motorRun(M3, CCW, 200);
k10.canvas->canvasText("K10 小车右横", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
}
// ==========语音指令5:zuo heng 小车整体向左横向平移==========
if (asr.isDetectCmdID(4+1)) {
// M1顺时针、M2逆时针、M3顺时针,三轮推力抵消纵向分力,合成向左横向合力
motorbit.motorRun(M1, CW, 200);
motorbit.motorRun(M2, CCW, 200);
motorbit.motorRun(M3, CW, 200);
k10.canvas->canvasText("K10小车左横", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
}
// ==========语音指令6:shun zhuan 小车原地顺时针转圈==========
if (asr.isDetectCmdID(5+1)) {
// M1/M2/M3全部逆时针CCW同步转动,三轮推力形成环绕底盘中心的旋转力偶,无平移分量
motorbit.motorRun(M1, CCW, 200);
motorbit.motorRun(M2, CCW, 200);
motorbit.motorRun(M3, CCW, 200);
k10.canvas->canvasText("K10小车顺时针转圈", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
}
// ==========语音指令7:ni zhuan 小车原地逆时针转圈==========
if (asr.isDetectCmdID(6+1)) {
// M1/M2/M3全部顺时针CW同步转动,反向旋转力偶,车身原地逆时针自转
motorbit.motorRun(M1, CW, 200);
motorbit.motorRun(M2, CW, 200);
motorbit.motorRun(M3, 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 组语音动作指令:前进、停车、后退、右横移、左横移、顺时针原地转圈、逆时针原地转圈; 依靠福来轮 90° 被动辊子矢量推力叠加,实现直行、左右横移、双向零半径自转; 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 电机,适配三轮福来轮底盘。
UNIHIKER_K10 k10;
ASR asr;
uint8_t screen_dir=2;
Microbit_Motor motorbit;
k10:行空板主控实例,负责屏幕显示、系统总线初始化; asr:语音识别实例,处理麦克风收音与人声解析; screen_dir=2:设置屏幕倒置显示; motorbit:三路电机驱动对象,对应三轮福来轮三个独立驱动电机 M1、M2、M3。
三、setup () 上电初始化(仅开机运行 1 次)
k10.begin();
初始化行空板全部底层硬件、I2C / 串口总线、屏幕外设资源。
asr.asrInit(CONTINUOUS, CN_MODE, 12000);
while(asr._asrState == 0){delay(100);}
语音模块初始化配置: CONTINUOUS:持续收音模式,麦克风实时监听环境人声; CN_MODE:中文识别模式,仅识别中文拼音口令; 12000:收音灵敏度,数值越大抗噪音、防误唤醒能力越强; 循环阻塞等待语音模块加载语音模型,硬件就绪后才执行后续代码。
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, "shun zhuan"); // ID6 顺时针转圈
asr.addASRCommand(6+1, "ni zhuan"); // ID7 逆时针转圈
批量注册 7 条离线语音拼音口令,离线语音模块仅能识别提前录入的指令,无法识别未注册词语。
四、loop () 无限主循环,实时监听语音指令
motorbit.motorRun(M2, CW, 200);
motorbit.motorRun(M3, CCW, 200);
M1 前轮停机,M2、M3 后轮反向转动,两轮推力矢量叠加,横向分力抵消,合力纯向前,车身直线直行。 ② ting che 停车
motorbit.motorStop(ALL);
M1/M2/M3 三路电机全部停止输出,三轮无驱动力,小车立刻静止锁死。 ③ hou tui 后退
motorbit.motorRun(M2, CCW, 200);
motorbit.motorRun(M3, CW, 200);
M2、M3 转向与前进完全反向,矢量合成纯向后推力,车身直线倒退。 ④ you heng 右横移
motorbit.motorRun(M1, CCW, 200);
motorbit.motorRun(M2, CW, 200);
motorbit.motorRun(M3, CCW, 200);
三轮配合转动,前后纵向推力相互抵消,仅保留向右横向合力,车身整体向右平移。 ⑤ zuo heng 左横移
motorbit.motorRun(M1, CW, 200);
motorbit.motorRun(M2, CCW, 200);
motorbit.motorRun(M3, CW, 200);
三轮推力抵消纵向分力,横向合力向左,车身整体向左平移。 ⑥ shun zhuan 顺时针原地转圈
motorbit.motorRun(M1, CCW, 200);
motorbit.motorRun(M2, CCW, 200);
motorbit.motorRun(M3, CCW, 200);
三轮全部同步逆时针转动,推力形成环绕底盘中心的旋转力偶,无平移分量,原地持续顺时针自转。 ⑦ ni zhuan 逆时针原地转圈
motorbit.motorRun(M1, CW, 200);
motorbit.motorRun(M2, CW, 200);
motorbit.motorRun(M3, CW, 200);
三轮全部同步顺时针转动,反向旋转力偶,车身原地逆时针持续自转。 4. 屏幕清理语句
k10.canvas->canvasClear(6);
清空画布第 6 行及下方所有文字,清除上一轮运动状态文字,防止新旧文字重叠产生残影。
五、7 种运动模式电机配置对照表

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

实验场景图与视频记录

【【花雕动手做】行空板 K10 系列实验之TT 马达三驱动全向福来轮语音识别控制小车#自制小车 #人工智能机器人 #语音识别 #厉害了我的车】
https://www.bilibili.com/video/BV1aVM36kEey/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987
行空板 K10 之TT马达三驱全向轮语音小车




