RaspberryPiのROSでmp3を再生する

ROS

sound_play

ROSで音を再生しようする場合, sound_playパッケージを使うのが一般的なようです.
sound_playパッケージは次のコマンドでインストールできます(kineticの場合).

sudo apt-get install ros-kinetic-sound-play

しかし, sound_playはRaspberry Piには合っていません.
sound_playはデフォルトのスピーカーで再生を行います. そしてRaspberry Piのデフォルトのスピーカーはオンボードのイヤホンジャックで, これの音質は悪いことで有名です. というよりも常時「ザー」といったノイズが入るので, 音質以前に使いにくくなっています.
したがって, Raspberry Piで音を鳴らす場合はDACを使うのが一般的です.
オーディオ用のDACといっても高価なものは必要ではなく, USBスピーカーやUSBのDACで十分です. 実際に私もUSBのDACを繋いで, GUIからデフォルトのスピーカーに設定したのですが, sound_playでUSBの方から音を出すことはできませんでした(コマンド自体は動いています). 残念ながらこれに対する解決方法が見つからないため, 今回は別のアプローチをとっていきます.

sound_pipes

今回使ったアプローチはPipeです. Linuxではwavファイルならaplay, mp3ならmpg123のコマンドでファイルを再生できます. ROS(C++)からPipeを使ってこれらのコマンドを実行することでファイルを再生します.

作成したパッケージをsound_pipesと名付けて, GitHubで公開しました. まずはこのパッケージをインストールします.

cd ~/catkin_ws/src
git clone git@github.com:botamochi6277/sound_pipes.git
cd ~/catkin_ws/
catkin_make
botamochi6277/sound_pipes
ROS package to play mp3 and wav files. Contribute to botamochi6277/sound_pipes development by creating an account on GitHub.

インストールできたら再生用のノードを立ち上げます.

rosrun sound_pipes player

この状態で, sound_pipes/soundというTopic(std_msgs/String)に再生したいファイルのフルパスをPublishします. とりあえず, 1曲再生するなら次のコマンドで再生できます. <full path of sound>/home/ubuntu/Music/music01.mp3のように置き換えて実行してください.

rostopic pub -1 sound_pipes/sound std_msgs/String "<full path of sound>"

roswww経由で指令を出すこともできます.

Tamiya Cam-Robot Singing with ROS and Raspberry Pi

コメント