跳到主要内容
版本:V2.0.5.x

3.6.开发注意事项


1. 常见问题排查

问题原因解决
无法连接 x86IP 地址或端口错误检查 192.168.41.1:10097 是否可访问
ASR 识别为空音频太小或无效增加麦克风音量,检查 VAD 状态
没有音频流机器人面前没有人脸天工所搭载的3588s上的麦克风阵列,收音是有方向性的,大约是麦克风阵列前方一个60度角的圆锥空间区域内,对话的时候需要让音源在这个空间内(也就是说话的人要在这个空间范围内),要不然麦克风阵列收不到音
LLM 无响应Ollama 未启动ollama serve 启动 Ollama
TTS 无声音PyAudio 设备错误检查音频输出设备,运行 python -c "import pyaudio; print(pyaudio.PyAudio().get_default_output_device_info())"

2. 性能优化建议

# 1. 减少日志输出
# 将 log_config.py 中的 LOG_LEVEL 改为 WARNING

# 2. 调整 LLM 响应速度
# 使用更小的模型:ollama pull qwen2.5:0.5b

# 3. 优化 TTS 质量
# 调整 PiperProvider 中的合成参数

# 4. 增加 ROS 队列大小
self.create_subscription(
AudioFrame,
'audio_sentence_frames',
callback,
10 # 增大这个数字以容纳更多消息
)

3. 添加新功能的步骤

例子:添加文本日志存储功能

import json
from datetime import datetime

class ConversationLogger:
def __init__(self, log_file="conversations.jsonl"):
self.log_file = log_file

def log_turn(self, question: str, answer: str):
"""记录一轮对话"""
record = {
"timestamp": datetime.now().isoformat(),
"question": question,
"answer": answer
}

with open(self.log_file, 'a', encoding='utf-8') as f:
f.write(json.dumps(record, ensure_ascii=False) + '\n')

# 在 tk_audio_process.py 中使用
logger = ConversationLogger()

def on_answer_complete(question, answer):
logger.log_turn(question, answer)

4. 单元测试示例

import unittest

class TestFunASRClient(unittest.TestCase):
def setUp(self):
self.client = FunASRClient(
host="192.168.41.1",
port=10097
)

def test_to_text_with_valid_audio(self):
"""测试有效音频识别"""
# 读取测试音频
with open("test_audio.pcm", "rb") as f:
audio_bytes = f.read()

# 识别
result = self.client.to_text(audio_bytes)

# 验证结果
self.assertIsNotNone(result)
self.assertGreater(len(result), 0)

def test_to_text_with_empty_audio(self):
"""测试空音频"""
result = self.client.to_text(b"")
self.assertEqual(result, "")

if __name__ == '__main__':
unittest.main()