ROS1语音交互
1、环境准备
系统要求
操作系统:Ubuntu 20.04 或 18.04
ROS1 版本:Noetic (推荐) 或 Melodic
安装依赖库
# 1. 更新源
sudo apt update
# 2. 安装 ROS1 桌面完整版
# (如果已安装ROS1,跳过)
sudo apt install ros-noetic-desktop-full -y # Ubuntu 20.04
sudo apt install ros-melodic-desktop-full -y # Ubuntu 18.04
# 3. 安装本项目依赖(同时支持串口和I2C)
sudo apt install python3-pip ros-noetic-rviz i2c-tools -y
pip3 install pyserial smbus2
# 如果是 Melodic (Python2)
sudo apt install python-pip ros-melodic-rviz i2c-tools -y
pip install pyserial smbus2
# 4. 如果使用 I2C 接线,额外安装
sudo apt install python3-smbus2 -y2、三种接线方式说明
AI语音交互模块支持以下三种接线方式:
自动检测机制
ROS1节点启动时会按以下顺序自动检测接线方式:
先尝试串口:依次检测
/dev/ttyUSB0→/dev/ttyACM0→/dev/ttyAMA0→/dev/ttyS0再尝试 I2C:检测
/dev/i2c-1上是否存在从机0x2A串口检测只需设备文件存在且可打开即认为可用,无需额外验证
检测到任意一种方式后即停止检测并锁定使用该方式。无需任何手动配置。
3、IIC 协议说明
IIC 从机配置
寄存器定义
4、串口协议说明 (Type-C / UART)
帧格式
每帧固定为 5字节:
波特率
固定 115200 bps。
5、创建工作空间与目录结构
创建 catkin 工作空间
mkdir -p ~/juxi_speech_ws/src
cd ~/juxi_speech_ws/src创建 ROS 功能包
catkin_create_pkg juxi_voice rospy std_msgs visualization_msgs最终目录结构
将本项目提供的文件放置到对应位置:
~/juxi_speech_ws/
├── build/
├── devel/
└── src/
└── juxi_voice/
├── CMakeLists.txt # (替换为本项目提供的)
├── package.xml # (替换为本项目提供的)
├── juxi_voice.rviz # (新建:RViz预配置文件)
├── launch/
│ └── juxi_voice.launch # (新建:一键启动文件)
└── scripts/
├── voice_node.py # (新建:语音节点)
└── rviz_control.py # (新建:RViz控制节点)6、文件内容与放置
文件 1:voice_node.py (语音控制节点)
位置:~/juxi_speech_ws/src/juxi_voice/scripts/voice_node.py
核心功能:
自动检测 Type-C / UART / IIC 接线方式
统一命令词映射表(114条命令词,与Excel协议表V1完全一致)
根据接线方式使用对应的通信后端(串口 / I2C)
关键架构:
# 统一命令数据: ID → (串口字节2, 串口字节3, 命令文本, 播报模式)
CMD_DATA = {
1: (0x01, 0x00, "欢迎语", "被"),
3: (0x03, 0x00, "你好小犀", "主"),
14: (0x00, 0x04, "小车前进", "主"),
84: (0xFF, 0x5F, "这是红色", "被"),
...
}
# 自动检测函数
def detect_connection():
# 1. 尝试串口 /dev/ttyUSB0, /dev/ttyACM0, /dev/ttyAMA0, /dev/ttyS0
# 2. 尝试 I2C /dev/i2c-1 (从机地址 0x2A)
...(完整代码请查看项目提供的 voice_node.py 文件)
文件 2:rviz_control.py (RViz 控制节点)
位置:~/juxi_speech_ws/src/juxi_voice/scripts/rviz_control.py
订阅 /juxi_voice_cmd 话题接收命令文本,根据命令更新立方体可视化。
(完整代码请查看项目提供的 rviz_control.py 文件)
文件 3:CMakeLists.txt 和 package.xml
已在本项目中提供,直接替换 catkin_create_pkg 自动生成的默认文件即可。
7、编译与运行
编译
cd ~/juxi_speech_ws
catkin_make环境变量
source ~/juxi_speech_ws/devel/setup.bash
# 或写入 ~/.bashrc
echo "source ~/juxi_speech_ws/devel/setup.bash" >> ~/.bashrc权限设置
# I2C 权限
sudo chmod 666 /dev/i2c-1
# 串口权限
sudo chmod 666 /dev/ttyUSB0
sudo chmod 666 /dev/ttyACM0
sudo chmod 666 /dev/ttyAMA0
# 或加入用户组
sudo usermod -aG dialout $USER
sudo usermod -aG i2c $USER
# 设置后需要重新登录生效运行节点
方式一:一键启动(推荐)
cd ~/juxi_speech_ws
source devel/setup.bash
roslaunch juxi_voice juxi_voice.launch启动时会自动打开语音节点、RViz控制节点和RViz可视化界面。
方式二:分步启动(3 个终端)
终端 1:启动 roscore
roscore终端 2:语音节点
cd ~/juxi_speech_ws
source devel/setup.bash
rosrun juxi_voice voice_node.py启动时会显示检测到的接线方式:
[INFO] 自动检测: IIC /dev/i2c-1 (从机地址 0x2A)
[INFO] 语音节点启动完成 - IIC /dev/i2c-1 (从机地址 0x2A)或
[INFO] 自动检测: UART /dev/ttyUSB0
[INFO] 语音节点启动完成 - UART /dev/ttyUSB0如果未检测到任何设备:
[FATAL] 未检测到AI语音交互模块!请检查接线 (Type-C / UART / IIC)
[FATAL] 支持的端口: I2C(/dev/i2c-1) | 串口(/dev/ttyUSB0 /dev/ttyACM0 /dev/ttyAMA0 /dev/ttyS0)终端 3:RViz 控制节点
cd ~/juxi_speech_ws
source devel/setup.bash
rosrun juxi_voice rviz_control.py终端 4:RViz 可视化(直接加载预配文件,无需手动设置)
rviz -d ~/juxi_speech_ws/src/juxi_voice/juxi_voice.rviz或者先打开 RViz 再加载:
rviz
# 菜单栏: File → Open Config → 选择 juxi_voice.rviz8、RViz 预配说明
juxi_voice.rviz 已预配好以下内容,启动即可使用,无需任何手动操作:
Fixed Frame:
mapMarker 显示:已订阅
/juxi_visual_marker(单标记)MarkerArray 显示:已订阅
/juxi_visual_markers(多标记:机械臂、电量、报警等)视角:从斜上方观察,中心点在原点
9、使用方法
唤醒
对着模块说 "你好小犀" → 模块回复 "我在"
发指令
"小车前进" → 方块前进
"亮红灯" → 方块变红色
"打开流水灯" → 颜色循环变化
"报警" → 红色脉冲球体
"显示电量" → 电量文字
主机触发播报
# 被动播报 (I2C → 写 0xD1, 串口 → 发 FE EF FF XX EE)
rostopic pub /juxi_passive_play std_msgs/String "data: '这是红色'"
# 功能词播报 (I2C → 写 0xD2, 串口 → 发 FE EF 01 00 EE)
rostopic pub /juxi_func_play std_msgs/String "data: '欢迎语'"
# 命令词播报 (I2C → 写 0xD3, 串口 → 发 FE EF 00 04 EE)
rostopic pub /juxi_cmd_play std_msgs/String "data: '小车前进'"10、命令词ID对照表
共114条命令词,与
命令词播报词协议列表V1_中文.xlsx完全一致。
功能词 (ID 1-10)
命令词 (ID 11-83, 113)
被动播报词 (ID 84-112, 114)
11、ROS1 话题说明
12、常见问题排查
1.启动时报"未检测到AI语音交互模块"
检查接线方式对应的设备文件是否存在:
# I2C 接线
ls /dev/i2c-1
sudo i2cdetect -y 1 # 应看到 0x2A
# Type-C 接线
ls /dev/ttyUSB0 /dev/ttyACM0
# UART 接线
ls /dev/ttyAMA0 /dev/ttyS02.串口权限报错
sudo chmod 666 /dev/ttyUSB0 # 或 /dev/ttyACM0 等
# 或加入 dialout 用户组(需要重新登录)
sudo usermod -aG dialout $USER3.I2C 权限报错
sudo chmod 666 /dev/i2c-1
# 或加入 i2c 用户组(需要重新登录)
sudo usermod -aG i2c $USER4.RViz 里没有方块
检查 Fixed Frame 是否为
map检查 Topic 是否为
/juxi_visual_marker确认 rviz_control.py 节点已启动
5.唤醒后说指令没反应
rostopic echo /juxi_voice_cmd有数据 → RViz 配置问题;无数据 → 接线/通信异常。
6.rosrun 找不到节点
确认已执行过编译和 source:
cd ~/juxi_speech_ws
catkin_make
source devel/setup.bash7.提示语法错误
# 确认 Python 脚本有执行权限
chmod +x ~/juxi_speech_ws/src/juxi_voice/scripts/voice_node.py
chmod +x ~/juxi_speech_ws/src/juxi_voice/scripts/rviz_control.py
