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
