添加智能家居 AI Agent 初赛作品压缩包
基于 openvela 的新平台适配与 AI Agent 智能应用开发(第三届中国研究生操作系统 开源创新大赛 · 应用创新赛道)
知微智居取意”见微知著”——从细微的环境传感信号中洞察需求,主动完成决策与 控制。作品将 openvela 深度适配到 Allwinner R528(Gemini-S1)开发板,并在该平台 上基于 openvela 内置 AI Agent 框架,开发了一个能”感知环境 → 自主推理 → 联动家电“的智能家居管家:温湿度、光照、空气质量等多路传感器经 uORB 汇聚,用户 通过语音或文字下达指令,Agent 调用自定义硬件工具完成灯光调节、空调红外控制等操作。
移植采用路径 B(已有平台深度适配):在 openvela vendor 层提供的 R528 芯片支持 之上,完成 openvela 独有框架适配(AI Agent / LVGL / uORB / 蓝牙),并新增 NuttX 上游不存在的外设驱动(SGP30 空气质量、红外收发场景链路等)。详见 移植指南。
烧录镜像(约 26 MB)作为本仓库发行版(Release)附件发布:
rtos_nuttx_r528s3-gemini-s1_uart0_128Mnand.img
d214d4f6c972c5dc256c6fbbfc6791279b44029bca31c487a86d73472020455a
烧录步骤与首次配置见可执行文件说明。
packages/ai_agent/ # openvela AI Agent 框架 + 本队自定义 Tool/Skill ├── src/tools/ # 自定义 C 语言硬件工具(空调、环境等) ├── src/voice/ # 语音 ASR/TTS 集成 └── ... vendor/allwinnertech/ ├── apps/ # 板级应用 │ ├── ir_scene_manager/ # 【原创】红外场景管理服务 │ ├── env_housekeeper/ # 【原创】环境管家核心 │ ├── luncher_mini/ # LVGL 主界面(环境仪表盘 + 空调管理) │ ├── led_rgb/ ltr553/ shtc3/ ... # 传感器/外设应用 │ └── ir_gpio_test/ # 【原创】红外发射硬件诊断 ├── boards/r528/r528s3-gemini-s1/ # 板级 BSP(Kconfig/defconfig/链接脚本/启动) └── chips/r528/.../hal/source/ # 外设驱动 ├── sensor/sgp30/ # 【新增】SGP30 空气质量 uORB 驱动 ├── cir_tx/ cir_rx/ # 红外发射/接收驱动 └── sensor/temperature、als/ # SHTC3、LTR553 docs/ # 移植指南、赛题说明、代码原创说明
# 在完整 openvela 源码树中,将本仓库内容按上述路径放置后配置构建 ./build.sh r528s3-gemini-s1:nsh_minidisplay # 产物经 USB Type-C 烧录到 SPI NAND # 串口 UART2(115200)可见启动日志与 NSH 提示符
注:本仓库为参赛作品源码集,需置于 openvela 完整源码树(含 nuttx 内核与 vendor 芯片支持)对应目录下编译。LLM / 语音服务的 API Key 需自行申请并配置(密钥文件 agent_config.h 按约定不纳入版本库)。
agent_config.h
本作品在平台适配过程中开发的通用传感器驱动,已回馈给 openvela 上游社区, 共提交 3 个 PR:
drivers/sensors: add SGP30 uORB driver
drivers/sensors: add LTR553 uORB driver
drivers/sensors: add SHTC3 uORB driver
目标仓库均为 openvela/nuttx 的 dev 分支。三个驱动合计新增约 2900 行原创代码, 为 openvela 补齐了三款上游此前不支持(或缺少 uORB 接口)的常用环境传感器。
openvela/nuttx
dev
上游已有 SGP30 的字符设备驱动(sgp30.c),但缺少接入 uORB 传感器框架 的实现。本 PR 补齐这一能力:
sgp30.c
drivers/sensors/sgp30_uorb.c | 新增 617 行 drivers/sensors/sgp30.c | +50 (新增 sgp30_measure_for_service) include/nuttx/sensors/sgp30.h | +52 (质量枚举、快照结构、函数声明) drivers/sensors/Kconfig | +19 drivers/sensors/Make.defs | +4 drivers/sensors/CMakeLists.txt | +6/-1
为何需要 uORB 版:SGP30 依赖持续 1 Hz 采样维持其内部基线补偿算法,而字符 设备接口仅在 read() 时测量,无法保证采样节奏。uORB 版以独立内核线程按固定 周期采样并发布 SENSOR_TYPE_CO2 / SENSOR_TYPE_TVOC 两个 topic。
read()
SENSOR_TYPE_CO2
SENSOR_TYPE_TVOC
两种接口由 CONFIG_SENSORS_SGP30_UORB 二选一编译,沿用上游 BMP180 驱动 (bmp180.c / bmp180_uorb.c)的既有惯例。
CONFIG_SENSORS_SGP30_UORB
bmp180.c
bmp180_uorb.c
上游支持同厂的 LTR308 环境光传感器(ltr308_uorb.c),但完全没有 LTR553 支持。LTR553 在单一封装内集成环境光与红外接近两个通道,本 PR 为其提供驱动:
ltr308_uorb.c
drivers/sensors/ltr553_uorb.c | 新增 1027 行 include/nuttx/sensors/ltr553.h | 新增 drivers/sensors/Kconfig | +26 drivers/sensors/Make.defs | +4 drivers/sensors/CMakeLists.txt | +4
单个内核线程轮询设备并发布两个 topic(SENSOR_TYPE_LIGHT 含 lux 与原始红外 通道、SENSOR_TYPE_PROXIMITY 含近似距离),两通道共用一组 I2C 事务与一次唤醒。 照度按数据手册的 CH0/CH1 比值分段公式换算。
SENSOR_TYPE_LIGHT
SENSOR_TYPE_PROXIMITY
上游已支持多款 Sensirion 温湿度传感器(sht21.c、sht3x.c、sht4x.c),但 没有 SHTC3 —— 该型号使用不同的命令集,并采用 wake/sleep 低功耗模型:
sht21.c
sht3x.c
sht4x.c
drivers/sensors/shtc3_uorb.c | 新增 1224 行 include/nuttx/sensors/shtc3.h | 新增 drivers/sensors/Kconfig | +9 drivers/sensors/Make.defs | +4 drivers/sensors/CMakeLists.txt | +4
发布 SENSOR_TYPE_AMBIENT_TEMPERATURE 与 SENSOR_TYPE_RELATIVE_HUMIDITY 两个 topic。实现要点:
SENSOR_TYPE_AMBIENT_TEMPERATURE
SENSOR_TYPE_RELATIVE_HUMIDITY
i2c_master
sensors/sensor.h
kthread
mutex
nuttx/tools/uncrustify.cfg
nxstyle
Signed-off-by
本作品基于 openvela 开发,移植与适配参考以下官方资源:
packages/ai_agent/docs/
nuttx/boards/
基线版本:openvela manifest trunk-5.4。
trunk-5.4
本作品以 Apache License 2.0 开源,详见 LICENSE。第三方库引用与代码 来源说明见 代码原创说明。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
知微智居 — 面向 AIoT 的多传感器感知与自主决策家居 Agent
知微智居取意”见微知著”——从细微的环境传感信号中洞察需求,主动完成决策与 控制。作品将 openvela 深度适配到 Allwinner R528(Gemini-S1)开发板,并在该平台 上基于 openvela 内置 AI Agent 框架,开发了一个能”感知环境 → 自主推理 → 联动家电“的智能家居管家:温湿度、光照、空气质量等多路传感器经 uORB 汇聚,用户 通过语音或文字下达指令,Agent 调用自定义硬件工具完成灯光调节、空调红外控制等操作。
作品亮点
平台与移植路径
移植采用路径 B(已有平台深度适配):在 openvela vendor 层提供的 R528 芯片支持 之上,完成 openvela 独有框架适配(AI Agent / LVGL / uORB / 蓝牙),并新增 NuttX 上游不存在的外设驱动(SGP30 空气质量、红外收发场景链路等)。详见 移植指南。
文档
可执行文件下载
烧录镜像(约 26 MB)作为本仓库发行版(Release)附件发布:
rtos_nuttx_r528s3-gemini-s1_uart0_128Mnand.imgd214d4f6c972c5dc256c6fbbfc6791279b44029bca31c487a86d73472020455a烧录步骤与首次配置见可执行文件说明。
目录结构
编译与烧录
使用示例(语音 / 文字指令)
社区贡献
本作品在平台适配过程中开发的通用传感器驱动,已回馈给 openvela 上游社区, 共提交 3 个 PR:
drivers/sensors: add SGP30 uORB driverdrivers/sensors: add LTR553 uORB driverdrivers/sensors: add SHTC3 uORB driver目标仓库均为
openvela/nuttx的dev分支。三个驱动合计新增约 2900 行原创代码, 为 openvela 补齐了三款上游此前不支持(或缺少 uORB 接口)的常用环境传感器。PR #1 — SGP30 uORB 驱动
上游已有 SGP30 的字符设备驱动(
sgp30.c),但缺少接入 uORB 传感器框架 的实现。本 PR 补齐这一能力:为何需要 uORB 版:SGP30 依赖持续 1 Hz 采样维持其内部基线补偿算法,而字符 设备接口仅在
read()时测量,无法保证采样节奏。uORB 版以独立内核线程按固定 周期采样并发布SENSOR_TYPE_CO2/SENSOR_TYPE_TVOC两个 topic。两种接口由
CONFIG_SENSORS_SGP30_UORB二选一编译,沿用上游 BMP180 驱动 (bmp180.c/bmp180_uorb.c)的既有惯例。PR #2 — LTR553 uORB 驱动
上游支持同厂的 LTR308 环境光传感器(
ltr308_uorb.c),但完全没有 LTR553 支持。LTR553 在单一封装内集成环境光与红外接近两个通道,本 PR 为其提供驱动:单个内核线程轮询设备并发布两个 topic(
SENSOR_TYPE_LIGHT含 lux 与原始红外 通道、SENSOR_TYPE_PROXIMITY含近似距离),两通道共用一组 I2C 事务与一次唤醒。 照度按数据手册的 CH0/CH1 比值分段公式换算。PR #3 — SHTC3 uORB 驱动
上游已支持多款 Sensirion 温湿度传感器(
sht21.c、sht3x.c、sht4x.c),但 没有 SHTC3 —— 该型号使用不同的命令集,并采用 wake/sleep 低功耗模型:发布
SENSOR_TYPE_AMBIENT_TEMPERATURE与SENSOR_TYPE_RELATIVE_HUMIDITY两个 topic。实现要点:共同的工程约束
i2c_master、sensors/sensor.h、kthread、mutex),可用于任意支持 I2C 的 NuttX 平台。nuttx/tools/uncrustify.cfg官方配置格式化,nxstyle检查 零报错;提交均含 DCOSigned-off-by签名。参考资料
本作品基于 openvela 开发,移植与适配参考以下官方资源:
packages/ai_agent/docs/(架构、工具列表、Skills、CLI、通道说明)nuttx/boards/目录基线版本:openvela manifest
trunk-5.4。许可证
本作品以 Apache License 2.0 开源,详见 LICENSE。第三方库引用与代码 来源说明见 代码原创说明。