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

行空板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 系列实验之麦克纳姆轮语音控制 TT 马达四驱动智能小车
实验开源代码

// 引入离线语音识别库,实现语音唤醒、自定义拼音指令识别、持续收音监听
#include "asr.h"
// 行空板K10底层驱动库,负责LCD屏幕初始化、画布文字绘制、硬件底层初始化
#include "unihiker_k10.h"
// Microbit四路直流电机驱动库,专门驱动麦克纳姆四轮小车,支持单路/全部电机独立调速、换向
#include <Microbit_Motor.h>

// =====================硬件对象实例化=====================
UNIHIKER_K10   k10;        // 行空板主控对象,统一管理屏幕、系统通信总线
ASR            asr;         // 离线语音识别模块实例,处理麦克风收音与人声解析
uint8_t        screen_dir=2; // 屏幕旋转参数:数值2代表屏幕倒置显示
Microbit_Motor motorbit;    // 四路电机驱动实例,控制M1左前、M2右前、M3右后、M4左后四个麦轮电机

//=====================================================================
// 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, "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();
	}

	// ==========语音指令1:qian jin 小车直线前进==========
	if (asr.isDetectCmdID(0+1)) {
		// motorRun(电机通道, 转向, 速度)
		// ALL:同时控制M1/M2/M3/M4四路全部电机;CW=顺时针;速度200(区间0~255,中高速)
		motorbit.motorRun(ALL, CW, 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):一次性切断四路电机输出,电机断电锁死,小车立刻静止
		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)) {
		// CCW=逆时针,四轮统一反转,车身直线向后倒退
		motorbit.motorRun(ALL, CCW, 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/M3逆时针,M2/M4顺时针,纵向分力抵消,横向合力向右
		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();
	}

	// ==========语音指令5:zuo heng 小车整体向左横向平移==========
	if (asr.isDetectCmdID(4+1)) {
		// 麦轮差速组合:M1/M3顺时针,M2/M4逆时针,横向合力向左
		motorbit.motorRun(M1, CW, 200);
		motorbit.motorRun(M2, CCW, 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();
	}

	// ==========语音指令6:zhuan quan 小车原地顺时针转圈==========
	if (asr.isDetectCmdID(5+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();
	}

	// ==========语音指令7:xie zou 小车斜向直行(左前斜走)==========
	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 四路电机驱动板,实现语音全向控制小车。
固定唤醒口令:你好小新;
共 7 组语音动作指令:前进、停车、后退、右横移、左横移、原地转圈、斜向行走;
依靠麦克纳姆轮斜辊差速原理,实现直行、横移、自转、斜走,屏幕大号字体实时显示车辆运动状态;
四路电机统一设定速度 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 = 左后轮

三、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, “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);
    四路电机全部停止输出,四轮无驱动力,小车立刻静止。
    ③ hou tui 后退
    motorbit.motorRun(ALL, CCW, 200);
    四轮全部逆时针同步反转,车身直线向后倒退。
    ④ you heng 右横移
    M1、M3 逆时针;M2、M4 顺时针;前后纵向摩擦力相互抵消,横向合力向右,车身整体向右平移。
    ⑤ zuo heng 左横移
    M1、M3 顺时针;M2、M4 逆时针;前后纵向摩擦力抵消,横向合力向左,车身整体向左平移。
    ⑥ zhuan quan 原地转圈
    对角电机反向转动,形成旋转力偶,无前后、左右平移分量,车身原地持续旋转。
    ⑦ xie zou 斜着走
    仅 M1 左前、M3 右后电机顺时针运转,M2、M4 不工作,合力合成斜向直行运动。
  4. 屏幕清理语句

k10.canvas->canvasClear(6);
清空画布第 6 行及下方所有文字,清除上一轮运动状态,避免新旧文字重叠产生残影。

五、7 种运动模式电机配置对照表

在这里插入图片描述

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

Mind+图形编程

在这里插入图片描述

在这里插入图片描述
实验场景图与视频记录

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

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

【花雕动手做】行空板 K10 系列实验之麦克纳姆轮语音控制 TT 马达四驱动智能小车#小红书maker创造季 #dfrobot创造分享

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

行空板 K10 之麦克纳姆轮TT马达语音小车

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐