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/srcROS 기능 패키지 생성
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
# 설정 후 다시 로그인해야 적용노드 실행
방식 1: 원클릭 실행 (권장)
cd ~/juxi_speech_ws
source devel/setup.bash
roslaunch juxi_voice juxi_voice.launch시작 시 음성 노드, RViz 제어 노드, RViz 시각화 인터페이스가 자동으로 열립니다.
방식 2: 단계별 실행 (터미널 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.rviz 선택8、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
