본문 바로가기

Study/각종 세팅

SENNHEIZER Profile microphone ROS 드라이버 셋업

오랜만에 글을 쓴다. 학회 첫 경험을 포스터, 구두 발표 둘 다 해서 으아ㅏㅇ악 하며 시간이 지나갔다. 

저번에는 카메라였지만 지금 음향 분류를 하고 있어서 마이크를 사용하고 있다. 카메라는 인기가 많아서 사용방법이 인터넷에 많은데 음향 계열을 ros로 사용하는 법은 한글 글도 많이 없는 것 같아 기록한다.


1. 드라이버 패키지 설치

https://github.com/ros-drivers/audio_common 

 

GitHub - ros-drivers/audio_common: Common code for working with audio in ROS

Common code for working with audio in ROS. Contribute to ros-drivers/audio_common development by creating an account on GitHub.

github.com

이걸 바로 워크스페이스의 소스(src) 경로에 내려받아서 빌드할 수도 있지만, 나는 자꾸 boost 라이브러리와 관련된 에러가 생겨 하지 못했다. 

 

대신, 더 쉬운 방법이 있다. 아래 명령어를 터미널에 입력하면 설치 완! 

여기서 distro는 foxy, noetic 등 ros 버전 이름이다.

sudo apt-get install ros-<distro>-audio-common

 

그래도 직접 해보고 싶다면, 

cd ~/catkin_ws/src
git clone https://github.com/ros-drivers/audio_common.git
rosdep install audio_common
cd ~/catkin_ws
catkin_make 
source ~/catkin_ws/devel/setup.bash

# from https://wiki.ros.org/audio_common/Tutorials/Streaming%20audio

2. 오디오 장치 찾기

SENNHEIZER Profile Microphone

주로 사용되는 방법은 ALSA(Advanced Linux Sound Architecture, 리눅스 커널의 사운드카드용 장치 드라이버를 위한 API  제공용 SW 프레임워크)에서 제공하는 aplay, arecord 명령어를 사용하는 것이다. 

이 명령어로 여러 일을 할 수 있지만, 지금은 음향 장치를 파악하는 것만 한다.

  • aplay --list-devices
    하드웨어 오디오 출력 장치의 목록 제공
  • aplay --list-pcms
    하드웨어, 소프트웨어 플러그인 등등 다양한 오디오 출력 장치 목록 제공
  • arecord --list-devices
    하드웨어 오디오 입력 장치의 목록 제공
  • arecord --list-pcms
    하드웨어, 소프트웨어 플러그인 등등 다양한 오디오 입력 장치 목록 제공

이렇게 다양하게 뜬다. 이 중에서, 마이크로폰만 봐보자.

첫 번째로 연결한 마이크 (arecord --list-pcms 결과)
두 번째로 연결한 마이크 (arecord --list-pcms 결과)

이렇게 두 개가 뜨게 되는데 사람마다 다른 것 같지만 나는 hw 요소만 사용해도 작동이 되었다. 

→ 첫 번째로 연결한 마이크는 hw:Profile,0

→ 두 번째로 연결한 마이크는 hw:Profile_1,0

여기에서 hw는 위 arecord --list-pcms에서 사용하능한 오디오 출력 장치(hw, plughw, usbstream) 중 고른 것.

Profile은 장치 이름, 0은 subdevice 번호이다.


3. Udev Rule을 사용해 장치 이름 고정하기

2번을 사용해서 그때그때 사용할 수 있지만, usb 웹캠을 사용했을 때 고충을 겪어본 사람은 알듯이 순서가 자꾸 바뀐다. 이를 막기 위해서 기기 고유의 번호와 기기 종류 등을 가지고 장치 이름을 고정시키는 과정이 필요하다.

먼저, lsusb 명령어로 usb 연결된 마이크의 ID를 찾는다.

lsusb 명령어를 터미널에 친 결과

그리고 더 세부적인 정보를 알기 위해서 udevadm info -a -n /dev/bus/usb/XXX/XXX 을 터미널에 입력한다.

여기서 XXX는 앞서 lsusb로 알아낸 버스 번호, 그리고 기기 번호. 

ex) udevadm info -a -n /dev/bus/usb/001/009

이제 해당 내용을 등록하기 위한 udev rule을 작성한다.

1. 룰 경로로 이동

cd /etc/udev/rules.d
sudo vi 45-usb-mic.rules

2. 룰 파일 작성

# /etc/udev/rules.d/40-usb-mic.rules
ACTION=="add", ATTRS{idVendor}=="1377", ATTRS{idProduct}=="1100", ATTRS{serial}=="XXXXXXXXXX",GROUP="usb", MODE="0666", SYMLINK+="mic1"
ACTION=="add", ATTRS{idVendor}=="1377", ATTRS{idProduct}=="1100", ATTRS{serial}=="XXXXXXXXXY",GROUP="usb", MODE="0666", SYMLINK+="mic2"

(물론, 시리얼의 XX들은 앞서 udevadm info로 알 수 있는 숫자를 넣으면 된다. 그런데 Profile 말고 다른 마이크는 인식을 안 시켜봐서, 시리얼 넘버가 있을지 모르겠다)

3. 바뀐 룰 적용

sudo udevadm control --reload-rules
sudo udevadm trigger

4. 마이크 새로 꽂기

5. 완료!

mic1, mic2가 얌전히 있는 것을 확인할 수 있다.

 

+ 만약, ROS의 audio_capture 등을 사용한다면

launch 폴더에서 capture.launch를 수정하면 되는데, 이때 앞서 만들어준 udev 이름을 넣되 아래처럼 적는다.

기존 : "hw:Profile"

변경 : "hw:CARD=/dev/<udev 이름>"

예시 : "hw:CARD=/dev/mic1"

 

이렇게 해주면 rostopic에서 /audio/audio가 뜸을 확인할 수 있다. :)


+ 비고

ALSA

ROS driver - audio_common 

PCM vs WAV

 

 

'Study > 각종 세팅' 카테고리의 다른 글

FLIR BFS 카메라 ROS 드라이버 셋업  (0) 2023.07.13
렌즈 공부하기 - FoV, 문자 뜻  (0) 2023.03.14
Ouster OS1-64U setup  (0) 2023.01.03