博通BK7258 AI开发板集成阿里云多模态交互开发套件的探索

博通BK7258 AI开发板集成阿里云多模态交互开发套件的探索

背景

目前智能硬件行业普遍都在关注AI玩具/AI情感陪伴机器人。

硬件方面,博通的BK7258的AI玩具开发板(如下图)是行业内的选择之一。

本文基于硬件博通BK7258 AI玩具开发板,进行AI情感陪伴机器人相关的探索。

注:本文是第一次接触硬件嵌入式开发的新手的自学记录,适合没有接触过相关内容的同学阅读,也欢迎相关行业的专家老师多批评指正。

基础功能上手和环境搭建

这是我第一次接触硬件开发,还没有建立起基础的技术价值观。

首先参考官网文档和网上相关教程进行基础操作和设置。

快速上手指南

BK7258 AI开发套件出厂默认集成了官方SDK,可以直接启动。

这里要吐槽下,博通提供的官方文档和教程散落在多处,更新也不是很及时,对于初学者来说不是特别友好。

官方的《AI开发套件快速使用指南》详见如下链接

https://dl.bekencorp.com/armino_sdk_resource/bk_aidk/ai_board_introduct

可参考文档直接进行搭建。

这里强调下,默认环境只有声网云服务里的豆包模型这一个选项,其他选项默认灰色不可选,需要额外配进行编译烧录。

完成相关配置后,可以直接跟开发板做语音对话,开发板上的屏幕可以显示眼睛。

开发环境搭建

本文基于Windows电脑构建开发环境,这里参考B站官方教程 https://www.bilibili.com/video/BV1dudLY7E1u 进行配置。

文档里有些内容实际操作会遇到问题,本文记录实际操作过程。

Armino AIDK SDK代码下载

官方操作文档如下 https://docs.bekencorp.com/arminodoc/bk_aidk/bk7258/zh_CN/v2.0.1/get-started/index.html#armino-aidk-sdk

踩坑点:

  • 官方文档里gitlab代码下载需要gitlab账号,个人用户没有该账号不建议使用这种方法;
  • 文档里通过git下载github环境,如果本地没有科学上网环境,下载可能失败;
  • 尝试手动下载 https://github.com/bekencorp/bk_aidk# 版本v2.0.1 下载后bk_aidk-ai_release-v2.0.1解压失败,文件夹架构不完整;
  • 尝试手动下载 https://github.com/bekencorp/bk_idk,下载后bk_idk-release-v2.0.1解压失败,文件夹架构不完整;

最后验证可用的方案如下。

访问如下官方下载链接 https://dl.bekencorp.com/SDK/bk_aidk,下载文件bk_aidk-ai_release-v2.0.1.9.tar.xz,并进行两次解压,得到文件夹bk_aidk-ai_release-v2.0.1.9,本示例中文件夹路径为 C:\Users\LeoYu\armino\bk_aidk-ai_release-v2.0.1.9,里面文件结构如下图。

Docker环境部署

该步骤主要参考如下官方文档 https://docs.bekencorp.com/arminodoc/bk_idk/bk7258/zh_CN/v2.0.1/get-started/env-docker.html

从 Beken 官方下载站点获取 Docker 镜像bekencorp-armino-idk-v1.2.tar:下载地址 https://dl.bekencorp.com/tools/arminosdk/docker_img/armino-idk

踩坑点:该Docker镜像有三个版本v1.0,v1.1,v1.2,需要使用当下最新版本v1.2,否则后续构建会失败。

本例中,下载的文件bekencorp-armino-idk-v1.2.tar放在C:\Users\LeoYu\armino中。

然后需要访问https://www.docker.com/找到Docker Desktop进行下载、安装和启动(很简单,过程略)。

然后电脑端打开PowerShell执行如下指令加载该armino-idk镜像:

cd C:\Users\LeoYu\armino
docker load -i bekencorp-armino-idk-v1.2.tar

进行编译

进入SDK根目录,Windows系统PowerShell执行命令进行编译测试:

cd C:\Users\LeoYu\armino\bk_aidk-ai_release-v2.0.1.9\bk_avdk\bk_idk
./dbuild.ps1 make bk7258

踩坑点:这里使用的是Armino AIDK SDK包中的 bk_avdk\bk_idk 这个路径下的环境进行的编译,请特别留意路径。

编译结束后,PowerShell输出结果如下。

此时,C:\Users\LeoYu\armino\bk_aidk-ai_release-v2.0.1.9\bk_avdk\bk_idk\build\app\bk7258 路径下会得到如下内容,证明能正常生成固件,编译功能可用。

软件烧录初尝试

本节内容主要参考B站官方教程视频https://www.bilibili.com/video/BV1MLXVYRE6v/

Armino 支持在 Windows/Linux 平台进行固件烧录, 烧录方法参考烧录工具中指导文档。 app工程在编译完成后,在build/app/bk7258目录下生成all-app.bin,使用此bin文件烧录即可。安全工程首次烧录时,需要先烧录bootloader.bin,再烧录all-app.bin。

具体说明可参考文档 https://docs.bekencorp.com/arminodoc/bk_idk/bk7258/zh_CN/v_ai_2.0.1/get-started/index.html

安装烧录工具

首先安装烧录工具(BKFIL),https://dl.bekencorp.com/tools/flash/ 在此目录下获取最新版本,如:BEKEN_BKFIL_V2.1.12.2_20251030(zip).zip
解压后得到BKFIL.exe,启动后如下图;

编译特定项目

下面我们参考视频教程,编译beken_genie这个project。

踩坑点:bk_aidk-ai_release-v2.0.1.9\bk_avdk\bk_idk\projects中默认是没有beken_genie个project的,如果从bk_aidk-ai_release-v2.0.1.9\projects中复制beken_genie这个project到bk_aidk-ai_release-v2.0.1.9\bk_avdk\bk_idk\projects中,后续会有一系列报错需要解决。所以我们直接在bk_aidk-ai_release-v2.0.1.9\这个文件夹下进行编译。

cd C:\Users\LeoYu\armino\bk_aidk-ai_release-v2.0.1.9\
./dbuild.ps1 make bk7258 PROJECT=beken_genie

执行结束后截图如下:

编译结束后,在\bk_aidk-ai_release-v2.0.1.9\build\beken_genie\bk7258路径下,可以得到烧录所需的all-app.bin文件。

进行烧录

将开发板设备开机,并与电脑通过type-C口连接;

打开烧录工具BKFIL,选择串口

选择正确的bin文件路径,并点击烧录。

烧录完成后,可以看到如下日志,显示All Finished Successfully。

烧录完成后,开机,再次按照“快速上手指南”章节的内容进行配对连接,即可进行对话。

定制化功能开发尝试

后面主要是嵌入式硬件设备的开发了,我之前从来没有接触过,下面进行尝试。

我们这里尝试让硬件接入阿里云百炼的多模态交互开发套件。

百炼多模态交互开发套件开通

访问 https://bailian.console.aliyun.com/cn-beijing/?spm=5176.29619931.J_C-NDPSQ8SFKWB4aef8i6I.1.140510d7M6f6N4&tab=app#/app/app-market/multi-modal-app 开通多模态交互开发套件的服务,并创建一个“多模态交互应用”,选择自定义创建,其他内容可以先保持默认配置,最后点击发布。

发布后,点击立即运行,并打开视频模式,可以直接进行对话,证明应用创建成功并可用。

注:下图红框的免费额度建议点击开通。

下载多模态交互开发套件SDK

访问链接 https://help.aliyun.com/zh/model-studio/mmi-rtos-sdk,按照下图下载对应版本的SDK。

多模态交互开发套件SDK集成

后面的部分,我们尝试让AI编码助手Qoder帮忙进行分析和处理。

把如下需求描述给Qoder:

背景:
在博通BK7258 AI开发板上,通过armino开发框架,基于beken_genie的项目工程做功能开发。
该项目的结构,以及后续的改动,请务必参考beken_genie的项目工程文档,链接如下 https://docs.bekencorp.com/arminodoc/bk_aidk/bk7258/zh_CN/v2.0.1/projects/beken_genie/index.html

需求:
该项目尝试用阿里云多模态交互开发套件的SDK替换beken_genie项目中的ASR+LLM+TTS,相关SDK软件已下载放到toQoder文件夹下的qwen_sdk中,
该SDK的使用文档,可以参考https://help.aliyun.com/zh/model-studio/mmi-rtos-sdk;

具体要求:
1. 阿里云多模态交互开发套件使用的是后付费模式,按照文档,“当不加载libc_license.a时为后付费模式。”
2. 对话模式使用: Duplex(全双工);
3. 必要的阿里云App ID、Workspace ID、API Key相关参数如下:
    CONFIG_QWEN_APP_ID="<YOUR_APP_ID>"
    CONFIG_QWEN_WS_ID="<YOUR_WORKSPACE_ID>"
    CONFIG_QWEN_API_KEY="<YOUR_API_KEY>"

Qoder分析需求后对项目文件进行相应的修改,随后就可以通过如下指令在Powershell进行编译。

cd C:\Users\LeoYu\armino\bk_aidk-ai_release-v2.0.1.9\
./dbuild.ps1 make bk7258 PROJECT=beken_genie

编译后把得到的得到all-app.bin文件烧录到开发板中。

完成烧录后,把开发板通过type-c线接入电脑,在电脑端使用console软件MobaXterm查看COM口日志信息,发现如下问题:

  • 栈溢出问题:
    出现 “Usage fault is caused by indicates that a stack overflow (hardware check) has taken place” 错误
  • Qwen SDK 未初始化:
    显示 “Qwen voice chat not initialized”
    说明 Qwen SDK 的初始化过程由于栈溢出而中断
  • 同时也有部分组件启动成功:
    系统能够成功启动并显示 “INITED” 状态
    CPU1 启动成功
    bk_genie_core_init success 初始化成功
    电池监控初始化成功

把启动日志和相关现象同步给Qoder,进行功能修复和优化。

踩坑点:

1. 编译过程中遇到ninja: error: loading ‘build.ninja’: No such file or directory错误,这是构建系统问题(build.ninja 文件丢失),可通过如下指令清理后重新构建:

    cd c:\Users\LeoYu\armino\bk_aidk-ai_release-v2.0.1.9; Remove-Item -Recurse -Force build\beken_genie\bk7258_cp2 -ErrorAction SilentlyContinue; .\dbuild.ps1 make bk7258 PROJECT=beken_genie

    2. 遇到TTS播放大模型声音卡顿的问题,是因为player_rb_size缓冲区不足,导致大量音频数据溢出丢失,云端TTS音频推送速率 ~120KB/s,本文中将 player_rb_size 增大到 900KB解决了该问题;

    3. make 是增量编译,通常只编译修改过的文件,所以步骤上也比第一次编译少很多,但是如果有以下情况:

    • 修改了Kconfig配置(如make menuconfig后)
    • 切换了项目或配置文件
    • 编译出现奇怪的错误(如找不到头文件、链接错误)
    • 修改了CMakeLists.txt结构

    那可以执行如下清除指令后再进行编译

    清除后重新编译
    .\dbuild.ps1 make bk7258 PROJECT=beken_genie distclean
    .\dbuild.ps1 make bk7258 PROJECT=beken_genie

    4. 目前音频采样率,上下行都是16kHz,验证可用,具体涉及到的相关配置,总结如下表

    经过多轮优化,目前已实现如下对话功能:

    • 语音唤醒: 支持语音唤醒词触发对话(目前使用的是beken_genie项目默认唤醒词:hi armino 或 嗨阿米诺 用于唤醒,byebye armino 或 拜拜阿米诺 用于关闭)
    • 全双工对话: 采用 Duplex 模式,支持实时双向语音交互
    • 语音识别(ASR): 阿里云百炼云端多模态交互开发套件ASR服务
    • 大语言模型智能问答(LLM): 阿里云百炼云端多模态交互开发套件文本模型智能问答
    • 语音合成(TTS): 阿里云百炼云端多模态交互开发套件TTS服务,音色为 CosyVoice-v3-Flash (龙菲菲)

    最后,可以让Qoder生成需求文档如下,包含描述整个项目功能和基于beken_genie项目做的所有改动。

    # BK7258 AI开发板 - 阿里云多模态交互开发套件集成 Spec 文档
    
    ## 1. 项目概述
    
    ### 1.1 背景
    本项目基于博通(Beken)BK7258 AI开发板,使用 Armino AIDK SDK (v2.0.1.9) 开发框架,对官方 `beken_genie` 项目进行功能定制开发。目标是将BK7258 AI开发板原生集成的AI语音对话功能(ASR+LLM+TTS)替换为阿里云百炼多模态交互开发套件(MMI RTOS SDK),实现定制化的语音交互体验。
    
    ### 1.2 硬件平台
    - **开发板**: 博通 BK7258 AI开发套件
    - **芯片**: BK7258 双核处理器 (CPU0 + CPU1)
    - **音频**: 16kHz PCM 采样,支持双麦克风输入和扬声器输出
    - **网络**: Wi-Fi 连接
    
    ### 1.3 软件框架
    - **SDK版本**: bk_aidk-ai_release-v2.0.1.9
    - **开发框架**: Armino AIDK SDK
    - **基础项目**: beken_genie
    - **编译环境**: Docker + PowerShell (Windows)
    
    ---
    
    ## 2. 核心功能
    
    ### 2.1 语音唤醒与对话
    - **语音唤醒**: 支持语音唤醒词触发对话(目前使用的是beken_genie项目默认唤醒词:hi armino 或 嗨阿米诺 用于唤醒,byebye armino 或 拜拜阿米诺 用于关闭)
    - **全双工对话**: 采用 Duplex 模式,支持实时双向语音交互
    - **语音识别(ASR)**: 阿里云百炼云端多模态交互开发套件ASR服务
    - **大语言模型智能问答(LLM)**: 阿里云百炼云端多模态交互开发套件文本模型智能问答
    - **语音合成(TTS)**: 阿里云百炼云端多模态交互开发套件TTS服务,音色为 CosyVoice-v3-Flash (龙菲菲)
    
    ### 2.2 网络连接
    - **Wi-Fi连接**: 自动连接配置的Wi-Fi网络
    - **WebSocket通信**: 与阿里云百炼服务建立WSS安全连接
    - **自动重连**: 网络断开后自动重连机制
    
    ### 2.3 音频处理
    - **音频采集**: 16kHz 16bit PCM 格式
    - **音频播放**: 16kHz 16bit PCM 格式
    - **音量控制**: 0-100级音量调节,与系统音量同步
    - **AEC支持**: 支持回声消除
    
    ### 2.4 LED状态指示
    - **绿色常亮**: 服务连接成功
    - **红色常亮**: 服务断开
    - **红色快闪**: 服务错误
    
    ---
    
    ## 3. 阿里云百炼服务配置
    
    ### 3.1 服务模式
    采用**后付费模式**,按照阿里云文档说明,不加载 `libc_license.a` 库文件。
    
    ### 3.2 必要配置参数
    ```c
    CONFIG_QWEN_APP_ID="<YOUR_APP_ID>"
    CONFIG_QWEN_WS_ID="<YOUR_WORKSPACE_ID>"
    CONFIG_QWEN_API_KEY="<YOUR_API_KEY>"
    CONFIG_QWEN_DEVICE_NAME="beken_genie_device"
    ```
    
    **获取方式**:
    1. 登录 [阿里云百炼控制台](https://bailian.console.aliyun.com/)
    2. 创建多模态交互应用
    3. 在应用详情页获取 App ID、Workspace ID 和 API Key
    
    ### 3.3 工作模式
    - **模式**: Duplex(全双工)
    - **音频流模式**: PCM 格式
    - **采样率**: 16kHz(上行和下行)
    - **文本模式**: ASR和LLM文本同时返回
    
    ---
    
    ## 4. 项目结构改动
    
    ### 4.1 新增组件
    
    #### 4.1.1 qwen_voice_chat 组件
    **路径**: `projects/common_components/qwen_voice_chat/`
    
    **文件结构**:
    ```
    qwen_voice_chat/
    ├── CMakeLists.txt          # 组件构建配置
    ├── Kconfig                 # 菜单配置选项
    ├── README.md               # 组件说明文档
    ├── RESOURCE_OPTIMIZATION.md # 资源优化说明
    ├── include/
    │   ├── qwen_audio_engine.h # 音频引擎头文件
    │   ├── qwen_voice_chat.h   # 主头文件
    │   └── qwen_websocket.h    # WebSocket传输层头文件
    └── src/
        ├── qwen_audio_engine.c # 音频引擎实现(麦克风/扬声器管理)
        ├── qwen_sdk_hal.c      # SDK HAL适配层(时间/内存/互斥锁等)
        ├── qwen_voice_chat.c   # 核心功能实现
        └── qwen_websocket.c    # WebSocket传输层实现
    ```
    
    **功能说明**:
    - `qwen_voice_chat.c`: 核心模块,负责SDK初始化、配置管理、事件处理
    - `qwen_audio_engine.c`: 音频引擎,管理BK7258音频硬件与SDK的数据交互
    - `qwen_websocket.c`: WebSocket传输层,处理与阿里云服务的网络通信
    - `qwen_sdk_hal.c`: 硬件抽象层适配,实现SDK所需的系统函数
    
    #### 4.1.2 阿里云SDK
    **获取路径**: https://help.aliyun.com/zh/model-studio/mmi-rtos-sdk
    
    **文件结构**:
    ```
    qwen_sdk/
    ├── ReleaseNote.md          # SDK版本说明
    ├── include/
    │   ├── c_mmi.h             # MMI主接口
    │   ├── c_mmi_config.h      # 配置接口
    │   ├── c_mmi_msg.h         # 消息接口
    │   ├── c_mmi_storage.h     # 存储接口
    │   ├── c_utils/            # 工具函数
    │   ├── c_mmi_cmd/          # 命令接口
    │   ├── lib_c_sdk.h         # SDK基础接口
    │   └── qwen_test.h         # 测试接口
    ├── libs/
    │   ├── libqwen_sdk.a       # 核心SDK库(后付费模式)
    │   ├── libc_mmi_cmd.a      # 命令库
    │   ├── libc_mmi_cmd_application.a
    │   ├── libc_mmi_cmd_voice_translate.a
    │   ├── libc_mmi_cmd_volume.a
    │   └── libhal_dummy.a      # HAL虚拟库
    └── third_party/
        ├── cJSON/              # JSON解析库
        └── tinycrypt/          # 加密库
    ```
    
    ### 4.2 修改的文件
    
    #### 4.2.1 beken_genie 主项目
    **路径**: `projects/beken_genie/`
    
    **修改文件**:
    
    1. **CMakeLists.txt**
       - 添加 `qwen_voice_chat` 组件到 `EXTRA_COMPONENTS_DIRS`
       - 添加 `qwen_voice_chat` 到依赖列表
    
    2. **main/CMakeLists.txt**
       - 在 `PRIV_REQUIRES` 中添加 `qwen_voice_chat` 依赖
    
    3. **main/app_main.c** (主要改动)
       - 添加条件编译支持 `CONFIG_QWEN_VOICE_CHAT`
       - 当启用Qwen SDK时,禁用原有的 `audio_engine`、`video_engine` 初始化以避免资源冲突
       - 添加Qwen事件回调函数 `qwen_event_callback()`
       - 在 `user_app_main()` 中初始化Qwen语音对话功能
       - 配置为Duplex全双工模式
       - 延迟初始化以确保系统稳定性
       - 在 `main()` 中跳过原有的 `audio_turn_on()` 调用(Qwen SDK独立管理音频)
    
    4. **main/Kconfig.projbuild**
       - 保留原有配置(未修改)
    
    ### 4.3 配置系统改动
    
    #### 4.3.1 Kconfig 配置
    **文件**: `projects/common_components/qwen_voice_chat/Kconfig`
    
    **新增配置项**:
    ```
    QWEN_VOICE_CHAT          - 启用Qwen语音对话功能
    QWEN_VOICE_CHAT_DEBUG    - 启用调试日志
    QWEN_APP_ID              - 阿里云App ID
    QWEN_WS_ID               - 阿里云Workspace ID
    QWEN_API_KEY             - 阿里云API Key
    QWEN_DEVICE_NAME         - 设备名称
    QWEN_MODE_DUPLEX         - 全双工模式(默认)
    QWEN_MODE_PUSH2TALK      - 按键说话模式
    QWEN_MODE_TAP2TALK       - 点击说话模式
    QWEN_RECORDER_BUFFER_SIZE - 录音缓冲区大小(KB)
    QWEN_PLAYER_BUFFER_SIZE  - 播放缓冲区大小(KB)
    QWEN_INIT_DELAY_MS       - 初始化延迟(ms)
    QWEN_VOLUME_LEVEL        - 默认音量级别
    ```
    
    #### 4.3.2 sdkconfig 配置
    **路径**: `build/beken_genie/bk7258/config/sdkconfig.h`
    
    **生成的配置宏**:
    ```c
    #define CONFIG_QWEN_VOICE_CHAT 1
    #define CONFIG_QWEN_VOICE_CHAT_DEBUG 1
    #define CONFIG_QWEN_APP_ID "<YOUR_APP_ID>"
    #define CONFIG_QWEN_WS_ID "<YOUR_WORKSPACE_ID>"
    #define CONFIG_QWEN_API_KEY "<YOUR_API_KEY>"
    #define CONFIG_QWEN_DEVICE_NAME "beken_genie_device"
    #define CONFIG_QWEN_MODE_DUPLEX 1
    #define CONFIG_QWEN_RECORDER_BUFFER_SIZE 4
    #define CONFIG_QWEN_PLAYER_BUFFER_SIZE 4
    #define CONFIG_QWEN_INIT_DELAY_MS 4000
    #define CONFIG_QWEN_VOLUME_LEVEL 80
    ```
    
    ---
    
    ## 5. 技术实现细节
    
    ### 5.1 音频数据流
    
    ```
    麦克风采集 → BK7258音频驱动 → qwen_audio_engine.c → c_mmi_put_recorder_data() → Qwen SDK → WebSocket发送
    
    WebSocket接收 → Qwen SDK → c_mmi_get_player_data() → qwen_websocket.c → BK7258音频驱动 → 扬声器播放
    ```
    
    ### 5.2 初始化流程
    
    1. **系统启动**: `main()` 函数执行
    2. **基础服务初始化**: `bk_init()`, `media_service_init()`
    3. **用户应用启动**: `user_app_main()`
    4. **Qwen初始化**:
       - 配置App ID、Workspace ID、API Key
       - 配置音频参数(16kHz PCM, Duplex模式)
       - 初始化音频引擎
       - 注册网络事件回调
       - 检查Wi-Fi连接状态
    5. **Wi-Fi连接后**:
       - 触发 `EVENT_NETIF_GOT_IP4` 事件
       - 启动WebSocket连接
       - 启动音频采集和播放
    
    ### 5.3 事件处理机制
    
    **Qwen SDK事件**:
    - `C_MMI_EVENT_USER_CONFIG`: 用户配置事件
    - `C_MMI_EVENT_DATA_INIT`: SDK初始化完成
    - `C_MMI_EVENT_SPEECH_READY`: 语音服务就绪
    - `C_MMI_EVENT_ASR_COMPLETE`: ASR识别完成
    - `C_MMI_EVENT_TTS_START/TTS_END`: TTS开始/结束
    - `C_MMI_EVENT_DATA_DEINIT`: SDK反初始化
    
    **应用层事件回调**:
    - `QWEN_EVENT_CONNECTED`: 服务连接成功
    - `QWEN_EVENT_DISCONNECTED`: 服务断开
    - `QWEN_EVENT_ERROR`: 服务错误
    - `QWEN_EVENT_ASR_RESULT`: ASR识别结果
    - `QWEN_EVENT_TTS_DATA`: TTS数据
    
    ### 5.4 资源管理
    
    **内存使用**:
    - 录音缓冲区: 8KB (可配置)
    - 播放缓冲区: 900KB (匹配云端推送速率)
    - WebSocket发送缓冲区: 8KB
    - WebSocket接收缓冲区: 8KB
    
    **线程**:
    - 发送任务: 6KB栈空间,负责将SDK数据发送到WebSocket
    - 播放定时器: 20ms周期,负责从SDK获取播放数据
    
    ---
    
    ## 6. 编译与烧录
    
    ### 6.1 编译命令
    ```powershell
    cd C:\Users\LeoYu\armino\bk_aidk-ai_release-v2.0.1.9
    .\dbuild.ps1 make bk7258 PROJECT=beken_genie
    ```
    
    ### 6.2 输出文件
    - **固件**: `build/beken_genie/bk7258/all-app.bin`
    - **应用**: `build/beken_genie/bk7258/app.bin`
    - **映射文件**: `build/beken_genie/bk7258/app.map`
    
    ### 6.3 烧录步骤
    1. 打开 BKFIL 烧录工具
    2. 选择正确的COM端口
    3. 选择 `all-app.bin` 文件
    4. 点击烧录按钮
    5. 等待烧录完成
    
    ---
    
    ## 7. 功能验证
    
    ### 7.1 测试项目
    - [x] 语音唤醒功能
    - [x] 语音对话功能
    - [x] 音量调节功能
    - [x] 设备重启功能
    
    ### 7.2 已知问题
    - TTS输出在特定情况下可能存在轻微卡顿(已优化缓冲区配置)
    
    ---
    
    ## 8. 参考资料
    
    ### 8.1 官方文档
    - [BK7258 AI开发套件文档](https://docs.bekencorp.com/arminodoc/bk_aidk/bk7258/zh_CN/v2.0.1/projects/beken_genie/index.html)
    - [阿里云百炼MMI RTOS SDK文档](https://help.aliyun.com/zh/model-studio/mmi-rtos-sdk)
    
    ### 8.2 SDK版本
    - **Qwen SDK版本**: v1.1.0
    - **Armino AIDK SDK**: v2.0.1.9
    
    ---
    
    ## 9. 附录
    
    ### 9.1 文件变更汇总
    
    | 文件路径 | 变更类型 | 说明 |
    |---------|---------|------|
    | `projects/common_components/qwen_voice_chat/` | 新增 | 完整的Qwen语音对话组件 |
    | `toQoder/qwen_sdk/` | 新增 | 阿里云百炼SDK |
    | `projects/beken_genie/CMakeLists.txt` | 修改 | 添加组件路径和依赖 |
    | `projects/beken_genie/main/CMakeLists.txt` | 修改 | 添加qwen_voice_chat依赖 |
    | `projects/beken_genie/main/app_main.c` | 修改 | 集成Qwen SDK初始化逻辑 |
    | `projects/common_components/qwen_voice_chat/Kconfig` | 新增 | 配置菜单定义 |
    
    ### 9.2 关键API列表
    
    **初始化与生命周期**:
    - `qwen_voice_chat_init()` - 初始化
    - `qwen_voice_chat_start()` - 启动服务
    - `qwen_voice_chat_stop()` - 停止服务
    - `qwen_voice_chat_deinit()` - 反初始化
    
    **配置与控制**:
    - `qwen_voice_chat_set_work_mode()` - 设置工作模式
    - `qwen_voice_chat_set_voice_id()` - 设置音色
    - `qwen_voice_chat_set_volume()` - 设置音量
    - `qwen_voice_chat_get_volume()` - 获取音量
    
    **状态查询**:
    - `qwen_voice_chat_is_connected()` - 检查连接状态
    - `qwen_voice_chat_reset_dialog()` - 重置对话上下文
    
    ---
    
    ## 10. 安全注意事项
    
    ### 10.1 API Key 安全
    - **不要将真实的 API Key 提交到代码仓库**
    - 使用环境变量或配置文件管理敏感信息
    - 在 `sdkconfig` 文件中设置敏感配置
    - 生产环境中考虑使用加密存储
    
    ### 10.2 配置示例
    在 `sdkconfig` 或 `Kconfig` 中配置:
    ```
    CONFIG_QWEN_APP_ID="mm_xxxxxxxxxxxxxxxxxxxx"
    CONFIG_QWEN_WS_ID="llm-xxxxxxxxxxxxx"
    CONFIG_QWEN_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxx"
    ```
    
    ### 10.3 获取阿里云凭证
    1. 访问 [阿里云百炼控制台](https://bailian.console.aliyun.com/)
    2. 创建多模态交互应用
    3. 在应用设置中获取:
       - **App ID**: 应用唯一标识
       - **Workspace ID**: 工作空间标识
       - **API Key**: 访问密钥(请妥善保管)
    
    ---
    
    *文档生成时间: 2026年2月20日*
    *基于: bk_aidk-ai_release-v2.0.1.9*
    *版本: 脱敏版*
    

    效果demo展示

    总结与后续计划

    总结

    这是第一次接触硬件嵌入式开发,还挺有意思的。

    本文基于硬件博通BK7258 AI玩具开发板,搭建Armino AIDK SDK开发环境,并初次尝试了软件编译和软件烧录到硬件;随后尝试了把阿里云百炼的多模态交互开发套件集成到BK7258硬件中,实现了基础的全双工实时语音交互功能。

    目前整体项目架构如下:

    ┌──────────────────────┐
    │           你的项目架构                     │
    ├──────────────────────┤
    │  应用层: 语音对话逻辑 (qwen_voice_chat)    │
    ├──────────────────────┤
    │  中间件: Armino SDK / FreeRTOS             │
    ├──────────────────────┤
    │  硬件抽象: HAL层 (qwen_sdk_hal.c)          │
    ├──────────────────────┤
    │  硬件层: BK7258芯片                        │
    │    ├── CPU0: 网络 + 应用逻辑            │
    │    ├── CPU1: 音频/视频处理              │
    │    ├── 音频编解码器                     │
    │    ├── Wi-Fi模块                        │
    │    └── GPIO/LED/电源管理                │
    └──────────────────────┘

    后续规划

    本文仅做了简单的环境搭建,还有很多可以优化的方向:

    • 多模态交互开发套件内的提示词优化;
    • 多模态交互开发套件内的知识库、长期记忆、插件开启和使用;
    • 多模态交互开发套件的视频功能接入;
    • 唤醒词定制化;
    • 自建长期记忆系统;
    • 通过硬件摄像头接入VL模型实现人脸追踪或者多模态理解;
    • 还有另外一条技术路线值得探索:让硬件分别调用ASR、LLM、TTS模型,自建更灵活的大模型调用链路;

    我下一步会先首先尝试通过硬件摄像头接入VL模型。

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注