Warning
This document is outdated and may contain obsolete information. Please refer to the repositories README on : Qualcomm QRB ROS GitHub.
QRB ROS Audio Service
Overview
The ROS package provides essential audio capabilities, it is the entry point for ROS to provide audio capabilities.
It supports both step-by-step and one-touch playback, allowing playback from built-in sounds. Additionally, it offers recording functionality, with the option to save to a local file or a topic.
Playback and record capabilities depend on qrb_ros_audio_common.
Build
Use QIRP SDK to build.
Build and install QIRP SDK with the steps in qirp-sdk-workflows or Quick start (using the prebuild package).
Set up environments with the steps in Set up the cross-compile environment.
Create the
ros_wsdirectory in<qirp_decompressed_workspace>/qirp-sdk/.Put
qrb_audio_manager,qrb_ros_audio_service,qrb_ros_audio_service_msgsandqrb_ros_audio_common_msgspackages under<qirp_decompressed_workspace>/qirp-sdk/ros_ws.# qrb_audio_manager and qrb_ros_audio_service in qrb_ros_audio_service: git clone https://github.qualcomm.com/QUIC-QRB-ROS/qrb_ros_audio_service.git # qrb_ros_audio_service_msgs and qrb_ros_audio_common_msgs in qrb_ros_interfaces git clone https://github.qualcomm.com/QUIC-QRB-ROS/qrb_ros_interfaces.git
Build this project.
export AMENT_PREFIX_PATH="${OECORE_TARGET_SYSROOT}/usr;${OECORE_NATIVE_SYSROOT}/usr" export PYTHONPATH=${PYTHONPATH}:${OECORE_TARGET_SYSROOT}/usr/lib/python3.10/site-packages colcon build --merge-install --cmake-args \ -DPython3_ROOT_DIR=${OECORE_TARGET_SYSROOT}/usr \ -DPython3_NumPy_INCLUDE_DIR=${OECORE_TARGET_SYSROOT}/usr/lib/python3.10/site-packages/numpy/core/include \ -DPYTHON_SOABI=cpython-310-aarch64-linux-gnu -DCMAKE_STAGING_PREFIX=$(pwd)/install \ -DCMAKE_PREFIX_PATH=$(pwd)/install/share \ -DBUILD_TESTING=OFF
Push to the device and Install.
cd <qirp_decompressed_workspace>/qirp-sdk/ros_ws/install tar czvf qrb_ros_audio.tar.gz lib share scp qrb_ros_audio_service.tar.gz root@[ip-addr]:/opt/ ssh root@[ip-addr] (ssh) tar -zxf /opt/qrb_ros_audio_service.tar.gz -C /opt/qcom/qirp-sdk/usr/
Run
Source this file to set up the environment on your device.
ssh root@[ip-addr] (ssh) export HOME=/opt (ssh) source /opt/qcom/qirp-sdk/qirp-setup.sh (ssh) export ROS_DOMAIN_ID=xx (ssh) source /usr/bin/ros_setup.bash
Use this launch file to run this package.
ros2 launch qrb_ros_audio_service audio_service.launch.py
Run
qrb_ros_audio_commonon another ssh terminal.Run test cases on a third ssh terminal.
stream_handle indicate the stream created by Audio Service when command is “create”. The value can be found on third ssh terminal (if use “ROS Command”: stream_handle=***; if use “Python Script”: command create success 1 stream_handle ***).
Test Case
Using ROS Command
Using Python Script
Get build-in sound names
mkdir -p /opt/qcom/qirp-sdk/usr/share/qrb-audio-manager/sounds
chmod 0755 /opt/qcom/qirp-sdk/usr/share/qrb-audio-manager -R
adb push clip.wav /opt/qcom/qirp-sdk/usr/share/qrb-audio-manager/sounds
chmod 0644 /opt/qcom/qirp-sdk/usr/share/qrb-audio-manager/sounds/*
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “get-buildin-sound” }”
python3 audio_service_test.py –get-buildin-sound
One-touch playback
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “play”, source: “clip”, volume: 100, }”
The playback will be stopped and released automatically after end of file. Or stop it before end of file:
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “stop”, stream_handle: 3520332881, }”
Note: One-touch playback will be released after stopping successful.
python3 audio_service_test.py –mode=’one-touch’ –source=’security’ –volume=100
“Ctrl+C” audio_service_test.py.
One-touch playback and repeat
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “play”, source: “clip”, volume: 100, repeat: -1, }”
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “stop”, stream_handle: 3520332881, }”
python3 audio_service_test.py –mode=’one-touch’ –source=’security’ –volume=100 –repeat=-1
“Ctrl+C” audio_service_test.py.
Step-by-step playback
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ type: “playback”, command: “create”, source: “/tmp/music.wav”, volume: 100, }”
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “start”, stream_handle: 2551300426, }”
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “mute”, mute: true, stream_handle: 2551300426, }”
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “mute”, mute: false, stream_handle: 2551300426, }”
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “stop”, stream_handle: 2551300426, }”
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “release”, stream_handle: 2551300426, }”
python3 audio_service_test.py –type=’playback’ –source=’/tmp/yesterday_48KHz.wav’ –volume=100
python3 audio_service_test.py –set-mute –mute=True –stream_handle=2124364840
python3 audio_service_test.py –set-mute –mute=False –stream_handle=2124364840
“Ctrl+C” audio_service_test.py.
Streaming playback
Firstly, create and start a streaming playback, it subscribes audio pcm data from topic “loopback”:
step-by-step streaming playback:
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ audio_info: { channels: 1, sample_rate: 16000, sample_format: 16, }, type: “playback”, command: “create”, volume: 100, topic_name: “loopback”, }”
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “start”, stream_handle: 1246004764, }”
one-touch streaming playback:
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ audio_info: { channels: 1, sample_rate: 16000, sample_format: 16, }, command: “play”, volume: 100, topic_name: “loopback”, }”
Secondly, create and start a step-by-step record, it publishes audio pcm data to topic “loopback”:
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ audio_info: { channels: 1, sample_rate: 16000, sample_format: 16, }, type: “record”, command: “create”, pub_pcm: true, topic_name: “loopback”, }”
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “start”, stream_handle: 2681124530, }”
Stop and release playback:
for step-by-step streaming playback:
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “stop”, stream_handle: 1246004764, }”
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “release”, stream_handle: 1246004764, }”
for one-touch streaming playback:
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “stop”, stream_handle: 1246004764, }”
Stop and release step-by-step record:
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “stop”, stream_handle: 2681124530, }”
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “release”, stream_handle: 2681124530, }”
step-by-step streaming playback:
python3 audio_service_test.py –type=’playback’ –channels=1 –sample_rate=16000 –sample_format=16 –pub_pcm=True –volume=100 –topic_name=’loopback’
one-touch streaming playback:
python3 audio_service_test.py –mode=’one-touch’ –channels=1 –sample_rate=16000 –sample_format=16 –pub_pcm=True –volume=100 –topic_name=’loopback’
python3 audio_service_test.py –type=’record’ –channels=1 –sample_rate=16000 –sample_format=16 –pub_pcm=True –topic_name=’loopback’
“Ctrl+C” playback audio_service_test.py.
“Ctrl+C” record audio_service_test.py.
Step-by-step record
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ audio_info: { channels: 1, sample_rate: 16000, sample_format: 16, }, type: “record”, command: “create”, source: “/tmp/rec.wav”, }”
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “start”, stream_handle: 1502099078, }”
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “stop”, stream_handle: 1502099078, }”
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “release”, stream_handle: 1502099078, }”
python3 audio_service_test.py –type=’record’ –source=’/tmp/rec.wav’ –channels=1 –sample_rate=16000 –sample_format=16
“Ctrl+C” audio_service_test.py.
Publish recording data
publish recording data to a topic (default topic name is “qrb_audiodata”, but it can be specified using topic_name):
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ audio_info: { channels: 1, sample_rate: 16000, sample_format: 16, }, type: “record”, command: “create”, pub_pcm: true, }”
or, publish recording data to /qrb_audiodata. meanwhile, save it to file:
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ audio_info: { channels: 1, sample_rate: 16000, sample_format: 16, }, type: “record”, command: “create”, pub_pcm: true, source: “/tmp/rec.wav”, }”
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{command: “start”, stream_handle: 806639317, }”
ros2 topic echo /qrb_audiodata
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “stop”, stream_handle: 806639317, }”
ros2 service call /audio_server qrb_ros_audio_service_msgs/srv/AudioRequest “{ command: “release”, stream_handle: 806639317, }”
publish recording data to a topic (default topic name is “qrb_audiodata”, but it can be specified using topic_name): python3 audio_service_test.py –type=’record’ –source=’/tmp/rec.wav’ –channels=1 –sample_rate=16000 –sample_format=16 –pub_pcm=True
or, publish recording data to /qrb_audiodata. meanwhile, save it to file:
python3 audio_service_test.py –type=’record’ –source=’/tmp/rec.wav’ –channels=1 –sample_rate=16000 –sample_format=16 –pub_pcm=True
ros2 topic echo /qrb_audiodata
Packages
Supported Platforms
This package is designed and tested to be compatible with ROS 2 Humble running on Qualcomm RB3 gen2.
Hardware |
Software |
|---|---|
LE.QCROBOTICS.1.0 |
Updates
Date |
Changes |
|---|---|
2024-09-26 |
Initial release |
2025-01-03 |
Update index.rst |