Skip to content

Commit d366a2a

Browse files
committed
feat: add code for the robot dog
1 parent 6002347 commit d366a2a

File tree

136 files changed

+1219084
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

136 files changed

+1219084
-0
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
app_default.config
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
##
2+
# @file CMakeLists.txt
3+
# @brief
4+
#/
5+
6+
# APP_PATH
7+
set(APP_PATH ${CMAKE_CURRENT_LIST_DIR})
8+
9+
# APP_NAME
10+
get_filename_component(APP_NAME ${APP_PATH} NAME)
11+
12+
# APP_SRCS
13+
aux_source_directory(${APP_PATH}/src APP_SRCS)
14+
aux_source_directory(${APP_PATH}/src/hardware APP_SRCS)
15+
aux_source_directory(${APP_PATH}/src/servo_ctrl APP_SRCS)
16+
17+
list(APPEND media_srcs "${APP_PATH}/src/media")
18+
19+
list(APPEND APP_SRCS ${media_srcs})
20+
21+
set(APP_INC
22+
${APP_PATH}/assets
23+
${APP_PATH}/include
24+
${APP_PATH}/include/media
25+
${APP_PATH}/src
26+
${APP_PATH}/src/hardware
27+
${APP_PATH}/src/servo_ctrl
28+
)
29+
30+
list(APPEND APP_INC "${APP_PATH}/assets")
31+
32+
########################################
33+
# Target Configure
34+
########################################
35+
add_library(${EXAMPLE_LIB})
36+
37+
target_sources(${EXAMPLE_LIB}
38+
PRIVATE
39+
${APP_SRCS}
40+
)
41+
42+
target_include_directories(${EXAMPLE_LIB}
43+
PRIVATE
44+
${APP_INC}
45+
)
46+
47+
target_compile_options(${EXAMPLE_LIB}
48+
PRIVATE
49+
"-DLV_LVGL_H_INCLUDE_SIMPLE"
50+
)
51+
52+
# Ensure our LittleFS safety wrapper is used (project-local, no platform edits).
53+
# This patches missing cfg->lock/unlock when CONFIG_LFS_THREADSAFE=y.
54+
target_link_options(${EXAMPLE_LIB} PUBLIC "-Wl,--wrap=lfs_mount")
55+
56+
########################################
57+
# Add subdirectory
58+
########################################
59+
60+
if (CONFIG_ENABLE_CHAT_DISPLAY STREQUAL "y")
61+
add_subdirectory(${APP_PATH}/src/display)
62+
endif()
63+
64+
add_subdirectory(${APP_PATH}/../ai_components/ai_audio)
65+
target_include_directories(${EXAMPLE_LIB} PRIVATE ${APP_PATH}/../ai_components/ai_audio)
66+
67+
########################################
68+
# Project-local override (your_robot_dog only)
69+
# Ensure only ONE LittleFS implementation/ABI in final firmware.
70+
########################################
71+
72+
if(DEFINED TOS_PROJECT_NAME AND DEFINED TOS_PROJECT_PLATFORM)
73+
if(TOS_PROJECT_NAME STREQUAL "your_robot_dog" AND TOS_PROJECT_PLATFORM STREQUAL "T5AI")
74+
if(TARGET tal_kv)
75+
# 1) Remove tal_kv vendored littlefs sources from this project build.
76+
# (Otherwise the firmware ends up with two LittleFS implementations/ABIs.)
77+
get_target_property(_tal_kv_srcs tal_kv SOURCES)
78+
if(_tal_kv_srcs)
79+
list(FILTER _tal_kv_srcs EXCLUDE REGEX ".*/src/tal_kv/littlefs/lfs\\.c$")
80+
list(FILTER _tal_kv_srcs EXCLUDE REGEX ".*/src/tal_kv/littlefs/lfs_util\\.c$")
81+
set_property(TARGET tal_kv PROPERTY SOURCES "${_tal_kv_srcs}")
82+
endif()
83+
84+
# tal_kv sources have built-in guards to avoid including tal_kv's lfs_config.h.
85+
target_compile_definitions(tal_kv PRIVATE TAL_KV_USE_PLATFORM_LITTLEFS=1)
86+
87+
# 2) tal_kv's directory-level add_definitions(-DLFS_CONFIG=...) would change LittleFS ABI.
88+
# Undefine it for this target so it uses platform LittleFS defaults.
89+
target_compile_options(tal_kv PRIVATE "-ULFS_CONFIG")
90+
91+
# 3) Make tal_kv (and consumers via tal_kv.h) pick platform lfs.h/lfs_util.h first.
92+
set(_platform_lfs_inc "${CMAKE_SOURCE_DIR}/platform/T5AI/t5_os/ap/components/littlefs")
93+
target_include_directories(tal_kv BEFORE PUBLIC "${_platform_lfs_inc}")
94+
95+
# 4) If tal_kv still includes "lfs_config.h", force it to use our no-op shim.
96+
target_include_directories(tal_kv BEFORE PUBLIC "${APP_PATH}/include")
97+
endif()
98+
endif()
99+
endif()
100+
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
menu "configure app (your_robot_dog) "
2+
3+
config TUYA_PRODUCT_ID
4+
string "product ID of project"
5+
default "y0k6ydkxphvv5g7acd"
6+
7+
choice
8+
prompt "choose chat mode"
9+
default ENABLE_CHAT_MODE_ASR_WAKEUP_FREE
10+
11+
config ENABLE_CHAT_MODE_KEY_PRESS_HOLD_SINGEL
12+
bool "press and hold button to start a single conversation."
13+
14+
config ENABLE_CHAT_MODE_KEY_TRIG_VAD_FREE
15+
bool "press the button once to start or stop the free conversation."
16+
17+
config ENABLE_CHAT_MODE_ASR_WAKEUP_SINGEL
18+
bool "say the wake-up word to initiate a single conversation, similar to a smart speaker."
19+
20+
config ENABLE_CHAT_MODE_ASR_WAKEUP_FREE
21+
bool "saying the wake-up word, you can have a free conversation."
22+
endchoice
23+
24+
if(ENABLE_CHAT_MODE_ASR_WAKEUP_SINGEL || ENABLE_CHAT_MODE_ASR_WAKEUP_FREE)
25+
choice
26+
prompt "choose wakeup keyword"
27+
default ENABLE_WAKEUP_KEYWORD_NIHAO_TUYA
28+
29+
config ENABLE_WAKEUP_KEYWORD_NIHAO_TUYA
30+
bool "the wake-up word is configured as NI HAO TUYA."
31+
32+
config ENABLE_WAKEUP_KEYWORD_NIHAO_XIAOZHI
33+
bool "the wake-up word is configured as NI HAO XIAO ZHI."
34+
35+
config ENABLE_WAKEUP_KEYWORD_XIAOZHI_TONGXUE
36+
bool "the wake-up word is configured as XIAO ZHI TONG XUE."
37+
38+
config ENABLE_WAKEUP_KEYWORD_XIAOZHI_GUANJIA
39+
bool "the wake-up word is configured as XIAO ZHI GUAN JIA."
40+
endchoice
41+
endif
42+
43+
config ENABLE_DOG_ACTION
44+
bool "enable the dog action"
45+
default y
46+
47+
config ENABLE_CHAT_DISPLAY
48+
bool "enable the display module"
49+
default n
50+
51+
if (ENABLE_CHAT_DISPLAY)
52+
rsource "./src/display/Kconfig"
53+
endif
54+
55+
config ENABLE_AUDIO_CHAT
56+
bool "enable audio chat mode"
57+
default y
58+
endmenu
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
[English](./README.md) | 简体中文
2+
3+
# your_robot_dog
4+
[your_robot_dog](./img/robot_dog.png)(https://github.com/tuya/TuyaOpen/tree/master/apps/tuya.ai/your_robot_dog) 是基于 TuyaOS 的 tuyaos_demo_ai_toy 项目在 TuyaOpen 的 your_char_bot 基础上移植而来,添加机器狗生动表情变化与控制舵机动作,移植开源的大模型智能聊天机器狗。通过麦克风采集语音,语音识别,实现对话、互动、调侃,还能通过屏幕看到情感变化,以及互动行为。
5+
6+
## 支持功能
7+
1. AI 智能对话
8+
2. 按键唤醒/语音唤醒, 回合制对话,支持语音打断(需硬件支持)
9+
3. 表情显示
10+
4. 支持 LCD 显示实时聊天内容、支持 APP 端实时查看聊天内容
11+
5. APP 端实时切换 AI 智能体角色
12+
6. 语音控制机器狗行为
13+
14+
## 依赖硬件能力
15+
1. 音频采集
16+
2. 音频播放
17+
2. 舵机驱动
18+
19+
## 已支持硬件
20+
| 型号 | config |
21+
| --- | --- |
22+
| TUYA_T5AI_ROBOT_DOG | TUYA_T5AI_ROBOT_DOG.config |
23+
24+
## 硬件烧录方式
25+
自备CH340,连接方式:
26+
CH340 TUYA_T5AI_ROBOT_DOG
27+
TX -------------- RX0
28+
RX -------------- TX0
29+
RST -------------- RST
30+
查看串口日志方式:
31+
CH340 TUYA_T5AI_ROBOT_DOG
32+
TX -------------- RX_L
33+
RX -------------- TX_L
34+
GND -------------- GND
35+
必须共地不然日志可能乱码。
36+
37+
## 编译
38+
1. 运行 `tos.py config choice` 命令, 选择TUYA_T5AI_ROBOT_DOG.config。
39+
2. 如需修改配置,请先运行 `tos.py config menu` 命令修改配置。
40+
3. 运行 `tos.py build` 命令,编译工程。
41+
42+
## 配置说明
43+
44+
### 默认配置
45+
- 随意对话模式,未开启 AEC,不支持打断
46+
- 唤醒词:
47+
- T5AI 版本: 你好涂鸦
48+
49+
### 通用配置
50+
51+
- **选择对话模式**
52+
53+
- 长按对话模式
54+
55+
|| 类型 | 说明 |
56+
| -------------------------------------- | ---- | -------------------------------------- |
57+
| ENABLE_CHAT_MODE_KEY_PRESS_HOLD_SINGEL | 布尔 | 按住按键后说话,一句话说完后松开按键。 |
58+
59+
- 按键对话模式
60+
61+
|| 类型 | 说明 |
62+
| ---------------------------------- | ---- | ------------------------------------------------------------ |
63+
| ENABLE_CHAT_MODE_KEY_TRIG_VAD_FREE | 布尔 | 按一下按键,设备会进入/退出聆听状态。如果在聆听状态,会开启 vad 检测,此时可以进行对话。 |
64+
65+
- 唤醒对话模式
66+
67+
|| 类型 | 说明 |
68+
| ---------------------------------- | ---- | ------------------------------------------------------------ |
69+
| ENABLE_CHAT_MODE_ASR_WAKEUP_SINGEL | 布尔 | 需要说出唤醒词才能唤醒设备,设备唤醒后会进入聆听状态,此时可以进行对话。每次唤醒只能进行一轮对话。如果想继续对话,需要再次用唤醒词唤醒。 |
70+
71+
- 随意对话模式
72+
73+
|| 类型 | 说明 |
74+
| -------------------------------- | ---- | ------------------------------------------------------------ |
75+
| ENABLE_CHAT_MODE_ASR_WAKEUP_FREE | 布尔 | 需要说出唤醒词才能唤醒设备,设备唤醒后会进入聆听状态,此时可以进行随意对话。如果 30S 没有检测到声音,则需要再次唤醒。 |
76+
77+
- **唤醒词**
78+
该配置只会在对话模式选择**唤醒对话****随意对话**两种模式下才会出现。
79+
|| 类型 | 说明 |
80+
| ------------------------------------- | ---- | ------------------- |
81+
| ENABLE_WAKEUP_KEYWORD_NIHAO_TUYA | 布尔 | 唤醒词是 “你好涂鸦” |
82+
83+
- **是否支持 AEC**
84+
85+
|| 类型 | 说明 |
86+
| ---------- | ---- | ------------------------------------------------------------ |
87+
| ENABLE_AEC | 布尔 | 这个是根据板子的硬件是否有回声消除功能来配置。<br />如果板子支持回声消除,则把该配置打开。**如果板子不支持回声消除,则需要关闭该功能,否则会影响唤醒对话功能**。<br />该配置没打开,则不支持语音打断的功能。 |
88+
89+
- **喇叭使能引脚**
90+
91+
|| 类型 | 说明 |
92+
| -------------- | ---- | ------------------------------------ |
93+
| SPEAKER_EN_PIN | 数值 | 该引脚控制喇叭是否使能,范围:0-64。 |
94+
95+
- **对话按键引脚**
96+
97+
|| 类型 | 说明 |
98+
| --------------- | ---- | -------------------------------- |
99+
| CHAT_BUTTON_PIN | 数值 | 控制对话的按键引脚,范围:0-64。 |
100+
101+
- **使能显示**
102+
103+
| 选项 | 说明 |
104+
| ------------------------- | ------------------------------------------------ |
105+
| enable the display module | 使能显示功能,如果板子有带屏幕,可将该功能打开。 |
106+
| enable the dog action | 使能小狗动作。 |
107+
108+
### 显示配置
109+
110+
显示使能被打开后,以下配置才会出现。
111+
112+
- **选择显示 UI 风格**
113+
114+
| 选项 | 类型 | 说明 |
115+
| ------------------ | ---- | ------------------------ |
116+
| Use Robot Dog ui | 布尔 | 默认配置,显示上方状态栏与小狗表情 |
117+
118+
## 补充说明
119+
your_robot_dog为移植项目,TUYA_T5AI_ROBOT_DOG的底板与常规T5AI开发板对比有较大差异。
120+
暂未支持音乐播放与摄像头功能。
121+

0 commit comments

Comments
 (0)