在这里插入图片描述

在这里插入图片描述

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

主要特点
集成摄像头&内置算法,可进行离线图像检测
集成麦克风&内置算法,可进行离线语音识别
集成扬声器&内置算法,可进行离线语音合成
2.8寸彩色屏幕,数据展示更清晰
集成度高,利于教学
接口丰富,兼容软件多,扩展性好

在这里插入图片描述
TT马达四驱麦克纳姆轮小车使用的特色底板、TT电机与扩展板

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

主打:人工智能模块

在这里插入图片描述

语音识别合成相关说明

在这里插入图片描述
在这里插入图片描述

辅助:屏幕显示相关积木

在这里插入图片描述
接脚 IO 扩展模块

在这里插入图片描述

在这里插入图片描述

LED控制模块

在这里插入图片描述

知识点:麦克纳姆轮(麦轮)

一、基础结构与核心原理

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

在这里插入图片描述

二、四轮布局与电机编号定义

使用Microbit_Motor四路驱动,编号定义:
M1:左前轮
M2:右前轮
M3:右后轮
M4:左后轮
转向标识:CW=顺时针正转,CCW=逆时针反转

三、6 种基础运动电机转向对照表

  1. 前进 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 系列实验之方盒麦克纳姆轮内置式四驱语音识别小车

实验开源代码

// 引入离线语音识别库asr.h:提供语音唤醒、拼音指令识别、持续收音监听全套功能
#include "asr.h"
// 行空板K10主板底层驱动库:封装LCD屏幕、画布绘制、主板硬件初始化、系统总线管理API
#include "unihiker_k10.h"
// Microbit四路电机驱动库,专门适配四轮麦克纳姆轮底盘,独立控制M1/M2/M3/M4四路直流减速电机
#include <Microbit_Motor.h>

// ===================== 全局硬件对象实例化 =====================
UNIHIKER_K10   k10;        // 行空板主控实例,统一管理屏幕、板载IO、底层通信总线
ASR            asr;         // 离线语音识别模块实例,负责麦克风收音、人声解析、唤醒判断
uint8_t        screen_dir=2; // 屏幕旋转配置参数:数值2 = 屏幕倒置显示,适配小车安装视角
Microbit_Motor motorbit;    // 四路电机驱动实例
/* 麦克纳姆四轮底盘电机编号标准定义
M1 = 左前轮
M2 = 右前轮
M3 = 右后轮
M4 = 左后轮
CW = Clockwise 电机顺时针旋转
CCW = CounterClockwise 电机逆时针旋转
速度参数取值范围 0~255,数值越大PWM占空比越高,电机转速越快 */

//=====================================================================
// setup() 上电初始化函数,设备开机/重启仅执行1次
// 功能:初始化主板硬件、语音识别模块、LCD画布,注册7条麦轮小车语音拼音指令
//=====================================================================
void setup() {
	// 初始化行空板全部底层硬件资源:I2C、串口、屏幕、板载外设、IO总线
	k10.begin();

	// 离线语音识别模块初始化,传入3个核心配置参数
	// 1.CONTINUOUS:持续收音模式,麦克风不间断循环监听环境人声
	// 2.CN_MODE:中文识别模式,仅支持预先注册的中文拼音口令识别
	// 3.10000:收音抗噪灵敏度阈值,数值越高过滤环境杂音、防止误唤醒能力越强
	asr.asrInit(CONTINUOUS, CN_MODE, 10000);

	// 阻塞循环等待语音识别模型加载完成
	// _asrState == 0 代表语音模块未就绪,每100ms检测一次状态,避免未初始化调用导致程序报错
	while(asr._asrState == 0){delay(100);}

	// 根据screen_dir=2参数初始化倒置LCD显示屏
	k10.initScreen(screen_dir);
	// 创建屏幕绘图画布缓存区,所有文字先写入缓存,再统一刷新到屏幕,减少高频刷屏闪烁
	k10.creatCanvas();

	// 批量注册7条离线语音控制指令,离线ASR仅能识别提前录入的拼音
	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行绘制红色提示文字 RGB=0xFF0000
		k10.canvas->canvasText("已唤醒行空板小车.......", 6, 0xFF0000);
		// 将画布缓存内所有文字一次性刷新输出到实体LCD屏幕
		k10.canvas->updateCanvas();
	}
	else {
		// 未唤醒待机状态:画布第4行绘制蓝色提示文字 RGB=0x0000FF,提示用户唤醒口令
		k10.canvas->canvasText("唤醒词为“你好小新”", 4, 0x0000FF);
		k10.canvas->updateCanvas();
	}

	// ==========语音指令ID1:qian jin 小车直线前进(CCW四轮同步逆时针,低速102)==========
	if (asr.isDetectCmdID(0+1)) {
		// ALL参数代表同时控制M1/M2/M3/M4全部四路电机,统一逆时针旋转,速度102(中低速,行驶更稳)
		// 四轮同向转动后,麦克纳姆轮横向分力两两抵消,仅保留向前的纵向合力,车身笔直前进
		motorbit.motorRun(ALL, CCW, 102);
		// 屏幕绘制状态大字:参数依次为 X坐标,Y坐标,文字黑色RGB,中英文字体,字号50,自动换行开启
		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 小车直线后退(CW四轮同步顺时针,低速102)==========
	if (asr.isDetectCmdID(2+1)) {
		// 四轮全部顺时针反转,与前进转向完全反向,纵向合力向后,车身直线倒退
		motorbit.motorRun(ALL, CW, 102);
		k10.canvas->canvasText("K10 小车后退", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
	}

	// ==========语音指令ID4:you heng 车身整体向右横向平移,速度100==========
	if (asr.isDetectCmdID(3+1)) {
		// 麦克纳姆轮标准右横移差速组合:前后纵向推力完全抵消,仅保留向右横向合力
		motorbit.motorRun(M1, CW, 100);  // 左前轮顺时针
		motorbit.motorRun(M2, CCW, 100); // 右前轮逆时针
		motorbit.motorRun(M3, CCW, 100); // 右后轮逆时针
		motorbit.motorRun(M4, CW, 100);  // 左后轮顺时针
		k10.canvas->canvasText("K10 小车右横", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
	}

	// ==========语音指令ID5:zuo heng 车身整体向左横向平移,速度100==========
	if (asr.isDetectCmdID(4+1)) {
		// 所有电机转向与右横移完全反向,纵向分力抵消,横向合力向左,整车平行左滑
		motorbit.motorRun(M1, CCW, 100); // 左前轮逆时针
		motorbit.motorRun(M2, CW, 100);  // 右前轮顺时针
		motorbit.motorRun(M3, CW, 100);  // 右后轮顺时针
		motorbit.motorRun(M4, CCW, 100); // 左后轮逆时针
		k10.canvas->canvasText("K10小车左横", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
	}

	// ==========语音指令ID6:zhuan quan 原地顺时针转圈,转速150(比平移更快)==========
	if (asr.isDetectCmdID(5+1)) {
		// 对角电机同方向、两组对角反向转动,只产生纯旋转力矩,无前后左右平移分量,零半径原地自转
		motorbit.motorRun(M1, CCW, 150); // 左前轮逆时针
		motorbit.motorRun(M2, CCW, 150); // 右前轮逆时针
		motorbit.motorRun(M3, CW, 150);  // 右后轮顺时针
		motorbit.motorRun(M4, CW, 150);  // 左后轮顺时针
		k10.canvas->canvasText("K10小车原地转圈", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
	}

	// ==========语音指令ID7:xie zou 小车斜向行走(左前方斜走,高速200)==========
	if (asr.isDetectCmdID(6+1)) {
		// 仅左前M1、右后M3电机高速顺时针运转,M2右前、M4左后轮停机,推力合成左前方斜向合力
		motorbit.motorRun(M1, 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 四路直流电机驱动板 + 四轮麦克纳姆轮底盘

核心功能

  1. 离线语音唤醒:唤醒固定关键词「你好小新」,唤醒后才可操控小车;
  2. 7 条拼音语音指令:前进、停车、后退、右横移、左横移、原地转圈、斜向直行;
  3. 麦克纳姆全向移动:依靠 45° 斜辊分力抵消原理,实现直行、横移、零半径自转、斜走;
  4. 分级差异化调速:直行 / 横移低速稳行、转圈中速、斜向行走全速;
  5. LCD 屏幕实时文字反馈,分层展示唤醒提示、小车运动状态。

二、头文件与全局对象解析

#include "asr.h"
#include "unihiker_k10.h"
#include <Microbit_Motor.h>
  1. asr.h:离线语音识别库,提供持续收音、人声唤醒、拼音指令匹配功能;
  2. unihiker_k10.h:行空板底层驱动,封装屏幕画布、硬件初始化、IO 操作 API;
  3. 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:四路电机驱动实例
    • CW:电机顺时针旋转
    • CCW:电机逆时针旋转
    • 速度参数范围 0~255,数值越大转速越快。

三、setup () 上电初始化(开机仅执行 1 次)

  1. k10.begin();
    初始化行空板全部底层硬件:I2C、串口、LCD 屏幕、板载外设总线。
  2. 语音模块初始化
asr.asrInit(CONTINUOUS, CN_MODE, 10000);
while(asr._asrState == 0){delay(100);}
  • CONTINUOUS:不间断持续收音;
  • CN_MODE:中文拼音识别模式,仅识别预存口令;
  • 10000:高抗噪灵敏度,过滤环境杂音,减少误唤醒;
  • 循环阻塞等待语音识别模型加载完成,避免未就绪调用报错。
  1. 屏幕初始化
k10.initScreen(screen_dir);
k10.creatCanvas();

按倒置参数点亮屏幕,创建画布缓存,文字先存入缓存再统一刷新,降低屏幕闪烁。
4. 注册 7 条语音指令

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 斜着走

离线语音模块仅能识别提前录入的拼音口令,无法识别未注册词语。

四、loop () 无限主循环,实时监听语音并控制小车

1. 唤醒状态屏幕提示逻辑

asr.isWakeUp() 判断是否识别唤醒词「你好小新」

  • 唤醒成功:画布第 6 行红色文字 已唤醒行空板小车.......
  • 未唤醒待机:画布第 4 行蓝色文字 唤醒词为“你好小新”
    updateCanvas() 将画布缓存一次性刷新到实体屏幕。

2. Microbit 电机库核心 API

  1. motorRun(通道, 转向, 速度)
    • 通道:ALL同时控制四路电机 / M1/M2/M3/M4 单独单路;
    • 转向:CW顺时针、CCW逆时针;
  2. motorStop(ALL):切断四路电机全部动力,小车立即锁死静止。

3. 每条语音指令电机控制逻辑

(1)qian jin 前进,速度 102
motorbit.motorRun(ALL, CCW, 102);

四轮全部同步逆时针低速运转,麦克纳姆轮横向分力两两抵消,仅保留向前合力,行驶平稳不窜动。

(2)ting che 停车
motorbit.motorStop(ALL);

四路电机同步断电刹车,小车立刻静止。

(3)hou tui 后退,速度 102
motorbit.motorRun(ALL, CW, 102);

四轮全部同步顺时针低速反转,合力向后,直线平稳倒退。

(4)you heng 右横移,速度 100
motorbit.motorRun(M1, CW, 100);
motorbit.motorRun(M2, CCW, 100);
motorbit.motorRun(M3, CCW, 100);
motorbit.motorRun(M4, CW, 100);

四轮差速配合,前后纵向推力完全抵消,只保留向右横向分力,整车平行右滑。

(5)zuo heng 左横移,速度 100
motorbit.motorRun(M1, CCW, 100);
motorbit.motorRun(M2, CW, 100);
motorbit.motorRun(M3, CW, 100);
motorbit.motorRun(M4, CCW, 100);

电机转向与右横移全部反向,纵向分力抵消,合力向左,整车平行左滑。

(6)zhuan quan 原地转圈,速度 150
motorbit.motorRun(M1, CCW, 150);
motorbit.motorRun(M2, CCW, 150);
motorbit.motorRun(M3, CW, 150);
motorbit.motorRun(M4, CW, 150);

左前、右前轮一组同向,右后、左后轮另一组反向,仅产生旋转力矩,无平移分量,原地顺时针自转,转速高于直行。

(7)xie zou 斜着走,速度 200
motorbit.motorRun(M1, CW, 200);
motorbit.motorRun(M3, CW, 200);

仅左前 M1、右后 M3 电机全速运转,M2、M4 停机,推力合成左前方斜向直行。

4. 屏幕清理

k10.canvas->canvasClear(6);

清空画布第 6 行及下方所有文字,清除唤醒提示残留内容,避免新旧文字重叠出现残影。

五、运动模式电机参数对照表

在这里插入图片描述

六、完整设备运行流程

  1. 设备上电,初始化行空板硬件、语音识别模块,循环等待语音模型加载完成;
  2. 初始化倒置 LCD 屏幕、创建绘图画布,批量注册 7 条拼音语音指令;
  3. 麦克风不间断持续监听唤醒词「你好小新」;
  4. 识别唤醒词后屏幕红色文字提示,未唤醒则蓝色文字提示唤醒口令;
  5. 说出对应语音口令,四路电机按照麦克纳姆轮矢量差速逻辑运转,屏幕同步打印车辆运行状态;
  6. 循环末尾自动清空屏幕下方文字,持续循环等待下一条语音指令。

Mind+图形编程

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

实验场景图与视频记录

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

【[花雕动手做] 行空板 K10 系列实验之方盒麦克纳姆轮内置式四驱语音识别小车 #人工智能技术 #语音识别 #行空板K10 #DIY动手做 #科技改变生活】

https://www.bilibili.com/video/BV1avKn6aEY5/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987

https://www.bilibili.com/video/BV1RbKn6vEUF/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐