1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ROS 2Advent Calendar 2024

Day 18

ROS2で音声ファイルを再生する方法

Last updated at Posted at 2024-12-17

はじめに

 ROS2で音声ファイルを再生する方法を紹介する。

動作確認環境

方法

 audio_commonパッケージ(ros2ブランチ)を使う。audio_commonパッケージは、音声再生、録音などの音声に関連する機能が実装されている。内部では、GStreamerを利用している。

インストール

 audio_commonパッケージ(ros2ブランチ)は、バイナリパッケージは提供されていない(2024.12.17時点)のでビルドする必要がある。

ROS2がインストールしてある環境で、以下のコマンドを実行してビルドする。

例:ワークスペースが~/ros2_wsの場合

cd ~/ros2_ws/src
git clone https://github.com/ros-drivers/audio_common
git checkout ros2
cd ~/ros2_ws
sudo apt update
rosdep install --from-paths src --ignore-src -r -y 
colcon build --symlink-install --packages-up-to sound_play

使い方

soundplay_nodeを起動して、音声ファイルの情報を付与したトピック(/robotsound)を受信させて音声を鳴らす。soundplay_nodeの仕様は、ROS1と同様である。詳細はROS1のsoundplay_nodeのドキュメントを参照。

音声再生用のノードの起動

ros2 launch sound_play soundplay_node.launch.xml

起動時に設定できるノードパラメータは以下の通りである。

パラメータ 概要 デフォルト 備考
loop_rate 連続再生の周期(Hz) 100 参考
device 再生デバイス 'default' 参考
default_voice 再生音声 'default_voice' 参考

再生デバイスを指定する場合は、以下のようにする。

ros2 launch sound_play soundplay_node.launch.xml device:=hw:1,0

デバイスの指定方法は、ALSAと同じになる。詳細は、以前書いた「Ubuntuで音声ファイルを再生する方法」を参照。

音声ファイルの再生

 再生したい音声ファイル情報を持ったトピックをpublishすることで音声ファイルを再生させることができる。soundplay_nodeは、/robot_soundトピック(型:SoundRequest)をsubscribeするので、このトピックをターミナルや別ノードからpublishすることで音声再生できる。

音声ファイル再生時のトピックに設定する変数は以下のようにする。

トピック変数 概要 設定値 備考
sound int8 音源のタイプ -2(PLAY_FILE)
command int8 再生方法 0(PLAY_ONCE)
volume float 音量 (0.0-1.0) 1.0 1.0を超えても設定は可能、音量も10.0までは上がった
arg string 音声ファイルのパス (.wav or .ogg) test.wav OGG/WAVファイルの指定が可能
arg2 string 音声ファイルが置かれているパッケージ名 '' 指定しない場合は、空文字('')とする

トピックをPublishし続けている間は、音声が再生される。以下に、コマンドの例を示す。

例:一度のみ、音声ファイル(test.wav)を再生する場合

ros2 topic pub -1 /robotsound sound_play/msg/SoundRequest "{sound: -2, command: 1, volume: 1.0, arg: 'test.wav', arg2: ''}"
  • arg2を指定しない場合は、空文字として、音声ファイルは実行ファイルの直下に置く、または、絶対パスを指定する

音声ファイル再生の際の注意点

まとめ

 ROS2で音声ファイルを再生する方法を紹介した。音声ファイルの情報を付与したトピックをpublishすることで簡単に音声再生させることができた。

参考

トラブルシューティング

Can't open sound device.See http://wiki.ros.org/sound_play/Troubleshooting

上記のエラーがROSログで表示される。

image.png

原因不明、調査中 (2024/9/9)。音声自体は再生できているので問題はなさそう。

付録

soundplay_nodeの詳細

定義済み音声の再生

ros2 run sound_play playbuiltin.py <ID>

例: ID=1の場合

ros2 run sound_play playbuiltin.py 1

audio_commonのROS2 Humbleでの動作

 ROS2 Humbleでは、別ブランチが必要(参考)。別の機会に動作確認予定。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?