发作品签到
专业版

AI桌面机器人-Echo

工程标签

5.3k
0
0
15

简介

这是一个十分硬核,功能超多的桌面机器人。是基于RV1106,有LVGL菜单,可以陪你聊天,翻译,看天气,能跑AI相机,小巧的linux桌面助手和开发板~

简介:这是一个十分硬核,功能超多的桌面机器人。是基于RV1106,有LVGL菜单,可以陪你聊天,翻译,看天气,能跑AI相机,小巧的linux桌面助手和开发板~
星火计划2025
复刻成本:150

开源协议

CC BY-NC-SA 4.0

(未经作者授权,禁止转载)
创建时间:2025-03-21 10:37:44更新时间:2025-03-31 02:01:34

描述

AI桌面机器人
Echo

📒 简介

这可能是你见过最硬核的,功能最全的AI桌面机器人~

  • 功能丰富:本项目基于RV1106,是一个有LVGL菜单,可以陪你聊天,翻译,看天气,能跑AI相机,小巧的linux桌面助手和开发板~
  • 用途广泛:提高你的桌面办公体验、作为陪伴、进行二次开发,或者作为课设和毕设的参考
  • 操作简单:本项目如果仅复刻,无需编译Linux系统,直接使用提供的固件即可,大大简化操作(但需要会基本的Linux命令)
  • 可多平台移植:不想复刻这个开发板,重新编译,软件可以在任何Linux设备跑,可以在你的ubuntu虚拟机跑仿真
  • 如果深入学习,可以掌握的知识如下:

    🤖 功能展示

    部分界面展示如下(功能太多就不全部展示了):

    📁 系统组成

    系统框图如下图所示,主控芯片RV1106,SDK使用的更改的luckfox-pico的SDK,图形库使用的LVGL。WIFI使用的SDIO接口,使用的RTL8723BS;屏幕使用的2.4寸触摸屏,存储介质可以自行选择使用SD卡或者板上的NAND Flash。具体的内容详见原理图。

    📑 功能说明

    各个历史版本实现的功能如下表所示:

    1. LCD使用的2.4寸屏幕,SPI ST7789V,触摸为IIC FT6336U,触摸屏幕型号为P024C128-CTP
    2. LVGL菜单可以自行按照仓库代码的范式自行添加内容;
    3. 小电视功能暂时就只是一个ffmpeg的一个演示;
    4. 游戏参考延续了OV-Watch智能手表的一些游戏的逻辑;
    5. AI聊天采用websocket与服务器(你的电脑),进行通信,由于RV1106是单核A7算力不够,所以AI聊天的相关模型推理等放到了Server端,详细见Server端的Python代码,当然,为了照顾不想搭建环境的同学,打包好了一个Server的exe可执行文件,可以自行下载到window电脑运行,作为服务器;
    6. 意图理解,这个是用谷歌的FastText模型进行文字的分类任务,还是深度学习那一套;
    7. 供电暂时只有TypeC供电,后续可加入电池提高空间自由度

    🔨 硬件介绍

    Echo-Mate的核心板,硬件框图如下所示:

    具体的细节这里不做赘述,详见工程的原理图和PCB。原理图很多地方就是参考RV1106的官方设计手册等资料进行的外围电路设计,如果不想做驱动板不想打外壳,直接打这个RV1106核心板,在核心板上做开发也是可以的。

    注意,硬件例如CSI摄像头等地方,需要差分走线,详见PCB的网络差分对。

    Echo-Mate AI桌面机器人的“腿”,也就是电机驱动板,使用TC118S驱动减速电机,逻辑比较简单,这里也不再过多赘述。

    💻 软件介绍

    1. 工程的软件框架介绍

      Echo-Mate的软件框架如下图所示,Middleware用到较多的包,在仓库的buildroot默认设置已经设置好了,如果需要加库请自行操作。

      这里只对大概框架进行说明,具体的代码细节需要在仓库中自行学习。仓库中都写有README,有详细的如何编译,如何烧录,请仔细看!

      1. UI层使用LVGLPageManager仍然使用栈,进行多页面的管理,相比之前的OV-Watch手表项目,这个项目中的PageManager更加完善,可以直接使用char字符来注册和查询页面,相比直接用变量更加方便管理,开源界面空间有限不过多赘述。详细可以到手册或者代码去看。
      2. UI层中,创建APP的逻辑就是,进入页面后,开启一个线程运行APP,主线程还是UI线程,详细内容见仓库代码,例如:
        // 创建并初始化Application对象
        void* create_aichat_app(const char* address, int port, const char* token, const char* deviceId, const char* aliyun_api_key, int protocolVersion, int sample_rate, int channels, int frame_duration) {
            auto* app = new Application(std::string(address), port, std::string(token), std::string(deviceId), std::string(aliyun_api_key), protocolVersion, sample_rate, channels, frame_duration);
            return static_cast(app);
        }
        
        int start_ai_chat(const char* address, int port, const char* token, const char* deviceId, 
                          const char* aliyun_api_key, int protocolVersion, int sample_rate, 
                          int channels, int frame_duration) {
        
            .....省略此处.....
            pthread_mutex_lock(&running_mutex);
            // 创建应用
            app_instance = create_aichat_app(address, port, token, deviceId, aliyun_api_key, 
                                             protocolVersion, sample_rate, channels, frame_duration);
            pthread_mutex_unlock(&running_mutex);
            .....省略此处.....
        
            return 0;
        }
        
      3. 业务层,就是这些APP的实际实现的具体功能了,例如UI中AI Chat聊天APP的功能,或者AI相机,yolov5的推理,这些运行的结果可以在UI层进行显示,即UI层与具体业务层进行交互。
      4. DeskBot_demo的目录结构说明
        DeskBot_demo/
        ├── bin/                   # 可执行文件
        ├── build/                 # build缓存
        ├── common/                # 通用层
        │   ├── sys_manager/       # 开发板硬件对应的管理
        │   └── xxx_manager/       # xxx对应的管理
        ├── conf/                  # 系统设置
        ├── gui_app/               # UI层的软件
        │   ├── common/            # UI层扩展lib
        │   ├── font/              # UI字体
        │   ├── images/            # UI图片
        │   ├── pages/             # UI层主要pages
        │   └── ui.c/h             # 
        ├── lvgl/                  # lvgl核心组件
        ├── utils                  # 其他
        ├── lv_conf.h              # lvgl设置
        └── main.c
        
    2. AI Chat聊天原理介绍

      AI Chat的原理图如下图所示。snowboy在开发板部署,作热词唤醒;FSMN-VAD模型实现语音活动端点识别;SenceVoice作语音转文字ASR;CosyVoice作文字转语音TTS;FastText作意图识别,即做文本的多分类任务。为什么不参考小爱同学使用bert进行分类任务, 是因为bert要针对特定任务做微调,我电脑有点带不动>.< 。
      注意:这些模型都是在你的电脑运行的,相当于你的电脑作为服务器。

      由于RV1106开发板是单核A7的,算力不是很够,没有办法在本地运行sherpa-onnxsherpa-ncnn,会导致无法实时的进行语音识别,之前为了实现本地ASR,试过运行模型 zipformerRTF(Real-Time Factor)非常高,都超过1了,完全无法实现实时的语音识别,所以本地部署方案直接否决。

      因此采用如下图所示的方法,电脑端(或者你有其他好的做服务器也行)作为服务器Server,开发板作为Client。具体的websocket的数据传输协议详见手册或者github中的AIchat_demo说明。

      除了CosyVoiceDeepSeek,其他模型都是部署到电脑本地,为了照顾没有GPU的同学,Server中的的生成式模型,CosyVoiceDeepSeek,调用的API,因为没有卡想要效果好就很慢。当然有GPU的同学有卡的同学,可以完全实现部署到电脑本地~

      AI Chat的具体的工作流程如下图所示:

      如果意图识别想要增加其他意图例如跳舞等,可以自行收集数据,按照Server文件夹中的数据格式数据,然后进行训练得到自己的模型即可。注意,训练前请先试用jieba分词,已经写好了cutdata.py,自行按照规范操作即可。

          前方直行	__label__MoveForward
          向后挪一点	__label__MoveBackward
          好的,谢谢你,再见!	__label__TalkEnd
          往前进一点	__label__MoveForward
          请向右移动	__label__MoveTurnRight
          ...此处以下省略...
      
    3. 智能相机YOLO Camera原理介绍

      这里的YOLO相机为了方便直接使用的nihui大佬的OpenCV-Mobile, 使用 opencv-mobile 捕获摄像头图像的方式较为方便,但是失去了 VI 组件和 VPSS 组件的硬件加速,在性能上有明显损失,如果想要帧率更高,可以基于VI, VPSS进行图像捕获。

      我已经编译好了适配Echo开发板的opencv-mobile包(与luckfox-pico相同,只是白名单需要改一下然后重新编译),可以直接拿去使用,这里不再赘述,东西太多了。

      YOLO相机具体实现的流程如下图(参考Luckfox-pico例程):

    4. 其他原理介绍
      更多软件细节,请到代码仓库中自行学习。例如:基本的数据结构堆栈链等,通信协议,C++状态机,C++设计模式,多线程管理,如何部署RKNN调用NPU,如何进行数据处理与模型训练等等。
      注意:天气和自动获取时间需要连接WIFI,地理地区对应的adcode城市代码已经放在附件的excel表中。

    🔨 3D打印外壳介绍

    可以直接拿到打包好的文件进行光固化打印即可,直接在立创3D打印下单,外壳的配件和组装好的图片如下所示:

     

    📥 复刻指南

    1. 需要的物料如下:

      • Echo核心板(BOM参见原理图,注意WIFI模块是RTL8723BS模块)
      • 3D打印外壳(去立创3D打印即可,注意主动轮和从动轮,都要打两份)
      • 焊接工具,焊接软线等
      • 螺丝螺母若干, 马达,双面胶等,详见附件配件表pdf
    2. 复刻需要的开发环境如下:

      • windows电脑一台
      • USB连接线
      • SD卡, 读卡器
      • usb转ttl串口模块
      • RK瑞芯微驱动助手
      • RK瑞芯微烧录工具
      • MobaXterm
    3. 深入学习需要的开发环境如下:

      • Ubuntu22.04
      • python环境(python=3.10)
      • 以及带脑子,会查资料~

    这里会简单说明一些固件烧录和程序执行,详细内容见手册

    1. 固件烧录
      附件中上传了SD卡上的buildroot固件,由于只能上传50M的包,所以将多个part01-03全选然后解压缩即可。以下是简易的烧录示意:
      首先格式化SD卡(可以使用SD Card formatter),然后使用RK瑞芯微烧录工具进行烧录,烧好插上开发板即可。注意,使用SD卡作为存储介质启动,需要保证NAND Flash为空内容!

      NAND FLASH的烧录和擦除方法可以详见手册

    2. 开发板使用

      1. 登录,可以使用串口登录和SSH登录(USB虚拟网卡)
      2. WIFI连接,时区设置, 文件传输等,详见手册
      3. 默认登录用户和密码为:
      登录账号: root
      登录密码: root
      
    3. 程序执行
      首先解压附件中的bin.rar,然后把bin文件夹传到开发板中,然后vi更改system_para.conf, 需要更改AI_Chat_Server地址为同网络下运行server的电脑地址,可通过ipconfig命令查看,开发板和电脑互ping一下就知道了;
      还需要更改高德的api_key,用于访问天气;以及需要更改阿里云百炼的api_key。这两个key都需要注册一下,应该都是个人用户免费的。
      想要正常访问天气等,需要连接WIFI哦,连接WIFI的指令可以看手册,或者网上搜~

      然后再进入bin文件夹内,执行main即可,注意必须进入bin文件夹中执行,因为有各种文件依赖:

      cd ./bin
      chmod +x ./main
      ./main
      

      如果想要正常运行聊天功能,还需要在电脑上运行Server服务,如果有python环境的可以参考仓库按照Server环境搭建与运行搭建环境然后运行即可。ctrl+C可中断程序.

      python ./main.py --access_token="123456"
      

      如果不想搭建环境不想用python,这里也打包好了.exe可执行文件(有点大2个G),直接运行即可,运行方式如下:
      解压完AiChatServer-Win-exe-V1.0.rar, 进入main文件夹,然后在这个文件中进入cmd,运行即可. ctrl+双击C可中断程序.

      .\main.exe --access_token="123456"
      

      Server打包好的exe百度网盘:
      AiChatServer-Win-exe-V1.1.rar 网盘链接: https://pan.baidu.com/s/1_s_79DHZS9EZjnfybqlNJw?pwd=r7f7 提取码: r7f7

    4. 3D外壳装配
      详见附件的复刻视频或者B站视频~

    📑 课后作业

    有能力的同学可以完成以下作业,我会大致给出解决的方向:

    1. 整体:熟悉整个工程包括软件和硬件 (基本项)
    2. 硬件:自行更改核心板,加入EMMC作为存储介质 (困难)
    3. 软件:在LVGL菜单添加一个简单的APP,例如定时器, 可以参考之前手表项目的逻辑实现 (简单)
    4. 软件:不使用Opencv-mobile, 使用VI,VPSS组件进行捕获图形, 试下提高帧率 (中等)
    5. 软件:在意图识别中加入一个意图分类,例如增减屏幕亮度 (复杂)
      (目前有的意图只有: 前后左右运动,以及对话结束说拜拜)
    6. 驱动:是否可以实现DRM驱动ST7789V屏幕,目前使用的fb,可以参考网上的tinydrm的移植 (困难)
    7. 驱动:修改设备树,使能和禁止蓝色的LED (简单)
    8. 其他...

    🔗 参考资料

    [1] luckfox rkmpi学习指南
    [2] 新一代kaldi(k2-fsa)sherpa-onnx
    [3] FunASR
    [4] SenceVoice
    [5] SenceVoice论文
    [6] CosyVoice
    [7] FastText
    [8] OpenCV-Mobile
    [8] 小智ESP32

    设计图

    未生成预览图,请在编辑器重新保存一次

    BOM

    暂无BOM

    附件

    序号文件名称下载次数
    1
    光固化3D打印.rar
    73
    2
    Rockchip参考文档.rar
    47
    3
    配件表.pdf
    135
    4
    sd-buildroot_250326_镜像.part01.rar
    64
    5
    sd-buildroot_250326_镜像.part02.rar
    53
    6
    sd-buildroot_250326_镜像.part03.rar
    37
    7
    Echo外壳安装视频.mp4
    49
    8
    bin_250328.rar
    36
    9
    AMap_adcode_citycode.xlsx
    39
    克隆工程
    添加到专辑
    0
    0
    分享
    侵权投诉

    评论

    全部评论(1)
    按时间排序|按热度排序
    粉丝0|获赞0
    相关工程
    暂无相关工程

    底部导航