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
インストールできたら再生用のノードを立ち上げます.
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経由で指令を出すこともできます.
コメント