# TonyPi自然交互安慰机器人系统 **Repository Path**: wdy372105/affective_interaction_system ## Basic Information - **Project Name**: TonyPi自然交互安慰机器人系统 - **Description**: 这是一个基于TonyPi平台的二次开发项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-03-17 - **Last Updated**: 2026-05-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TonyPi 情绪陪伴融合系统(独立完整版) 本项目位于 `TonyPi/Extend/affective_interaction_system`,运行时仅依赖 `TonyPi` 目录内资源。 ## 已实现能力 - 陪伴对话(LLM 提示词驱动,强调共情与情绪价值) - 情绪识别(本地 FER2013 mini XCEPTION 模型) - 情绪仅用于感知与记录,不自动触发动作 - 手势控制 + 语音对话 + 文本对话三通道融合 - 语音控制仅保留任意语音识别: - `appbuilder_asr`:自由说话输入 - 机器人运动控制以手势为主;语音/文本在明确要求时也可控制行走 - 支持语音/文本“站起来/起身”自适应起身(按当前姿态选择起身方式) - 语音/文本交互采用“先回复,再执行动作”时序 - 语音会话唤醒/退出: - 唤醒词:`你好,小派` - 退出词:`拜拜,小派` / `再见,小派` - 会话记忆: - 记录用户与机器人的每轮对话 - 每次退出会话时自动生成摘要 - 下次被唤醒时先回顾上次摘要再开始新对话 - 默认支持软件 TTS:通过 `espeak-ng`/`espeak` 合成,再由系统音频输出到 USB 扬声器 - 动作异步执行,视觉主循环不断帧 - 摔倒自动恢复后继续执行 ## 目录结构 ```text affective_interaction_system/ ├── main_fusion.py ├── self_check.py ├── requirements.txt ├── configs/ │ ├── system_config.yaml │ ├── local.env │ └── local.env.example ├── core/ ├── bridge/ ├── decision/ ├── perception/ ├── executor/ ├── scripts/ └── models/ ``` ## 运行前准备 推荐一键重建(树莓派): ```bash bash scripts/rebuild_env.sh --reset ``` 该脚本现在会自动完成这些步骤: - 安装树莓派运行所需的系统依赖:`alsa-utils`、`espeak-ng`、`lsof`、`psmisc` 等 - 缺少 `configs/local.env` 时自动从 `configs/local.env.example` 复制一份 - 自动停止已知会占用 `/dev/ttyAMA0` 的 TonyPi 旧进程 - 重建 `.venv`、安装锁定版 Python 依赖、移除 `jax/jaxlib` - 输出 `arecord -l` / `aplay -l` 结果,提示当前 USB 麦克风和扬声器可能对应的设备号 - 最后自动运行 `self_check.py` 若你只是想重装 Python 环境,不想触发系统包安装,可用: ```bash bash scripts/rebuild_env.sh --reset --skip-apt ``` 或手动方式: ```bash cd TonyPi/Extend/affective_interaction_system python3 -m venv .venv unset PYTHONPATH PYTHONHOME source .venv/bin/activate export PYTHONNOUSERSITE=1 python -m pip install -U pip "setuptools<81" wheel python -m pip install -r requirements.txt ``` 若你不用一键脚本,也可以手动补系统依赖: ```bash sudo apt update sudo apt install -y alsa-utils espeak-ng lsof psmisc ``` 关键说明: - 不要使用 `python3 -m venv --system-site-packages .venv` - 激活 `.venv` 前先执行 `unset PYTHONPATH PYTHONHOME`,避免把 `~/.local` 旧包串进来 - 本项目依赖已锁定在 NumPy 1.x,避免 `numpy 2.x` 触发 `_ARRAY_API` 报错 - `appbuilder_asr` 依赖链当前仍会用到 `pkg_resources`,树莓派上建议固定 `setuptools<81` - 若历史环境装过 `jax`/`jaxlib`,建议卸载: ```bash python -m pip uninstall -y jax jaxlib || true ``` - 若 `self_check.py` 仍显示模块来自 `~/.local/lib/python3.11/site-packages`,请先退出虚拟环境,再用系统 Python 清理用户目录旧包后重建 `.venv` ## 密钥配置 程序启动时会自动读取 `configs/local.env`。若文件不存在,一键脚本会自动从示例模板复制一份。 ```bash cp configs/local.env.example configs/local.env ``` 编辑 `configs/local.env`: ```bash DEEPSEEK_API_KEY=你的_deepseek_key APPBUILDER_TOKEN=你的_appbuilder_token ``` ## 启动 ```bash python3 main_fusion.py --config configs/system_config.yaml ``` ## 输入方式说明 - 默认配置为终端直输模式:直接在终端输入中文,回车发送,输入 `exit` 退出。 - 终端输入 `v` 可手动触发一次语音识别。 - 终端输入 `t` 会提示当前已在文本输入模式。 - 语音通道采用会话制: - 未唤醒前只监听唤醒词,不执行普通语音指令 - 唤醒后进入持续对话,直到说出退出词 - 文本输入不受唤醒词限制(便于调试) ## 语音配置 在 `configs/system_config.yaml`: - 任意语音识别(默认,推荐) ```yaml bridge: speech: asr_mode: "appbuilder_asr" ``` - 软件 TTS(默认,推荐) ```yaml bridge: speech: require_usb_audio: true tts_mode: "system_tts" tts_engine: "espeak-ng" tts_voice: "cmn" tts_rate: 150 tts_output_device: "" # 留空自动选择第一个 USB 扬声器;如需固定设备可填 1 / 1,0 / plughw:1,0 ``` - 一键脚本会打印 `arecord -l` 和 `aplay -l`,并优先提示它检测到的 USB 录音/播放设备。 - 当 `require_usb_audio: true` 时,运行时不会再回退到默认板载声卡;如果 USB 麦克风或 USB 扬声器不是自动检测到的那个,请把 `asr_record_device_index` / `tts_output_device` 改成对应值。 - 如果你仍然要使用板载语音模块,也可以切回: ```yaml bridge: speech: tts_mode: "hardware_tts" tts_sign: "[h0][v10]" ``` 在 `runtime` 下可自定义语音会话参数: ```yaml runtime: auto_voice_poll: true voice_wakeup_phrase: "你好,小派" voice_exit_phrases: ["拜拜,小派", "再见,小派"] ``` ## 会话记忆文件 - 对话记忆文件:`logs/conversation_memory.json` - 包含最近若干次会话的完整轮次与摘要(默认保留 50 次) ## 自检 ```bash python3 self_check.py ``` ## 参考文档 - `环境重建指南.md` - `常见错误与排查记录.md` - `技术栈.md`