No version for distro humble. Known supported distros are highlighted in the buttons above.
No version for distro jazzy. Known supported distros are highlighted in the buttons above.
No version for distro rolling. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 1.0.0
License Apache License 2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/miroboticslab/cyberdog_ros2.git
VCS Type git
VCS Version main
Last Updated 2021-10-15
Dev Status UNMAINTAINED
CI status No Continuous Integration
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

Audio interaction package

Additional Links

No additional links.

Maintainers

  • jia

Authors

No additional authors.

audio_interaction


模块简介

该模块用于实现整个音频模块的交互部分,主要包括以下几个方面的功能: 1、与其它模块之间关于通用播放的交互功能 2、语音助手相关控制与交互功能(APP(grpc)、决策模块) 3、与APP(grpc)之间关于音量调解的交互功能

播放功能

简介

本模块实现了一个action server作为通用播放接口,其它任意模块可以通过实现action client来请求播放本地音频文件以实现播放提醒的功能。

目前语音播放的action接口播放的实现是阻塞的,即在播放一条本地音频(current_goal)的同时会拒绝接受新的播放请求(pending_goal),直到当前音频播放完毕,才有新的请求能被接收进来,后期的持续升级中,此处将会将当前设计修改为:播放一条本地音频的同时会一定程度上接受有限数量的放请求,audio_base中的播放器会将这些本地的音频播报请求做混音(mix)处理,这样就可以同时满足一定数量的请求能够被同时播放出来。

混音播放多条请求的同时,为了提供更好的听觉体验,后续升级的同时,该模块将根据播放的内容, 将这些本地音源处理为不同优先的的播报类型,混音的同时,将根据播报的类型,将各个混音的音源对象做出相应的音量调节,敬请期待。

音频播放时音频模块最基础的功能,下面着重介绍。

接口描述

action name: audio_play 此处介绍audio server与client之间的接口描述,以便了解如何实现,具体的底层播放的实现细节请参见audio base 模块的README。 回调: check_play_request 涉及的接口文件如下: AudioPlay.msg 文件定义了整个action接口的结构,分为order,result,feedback三部分,如下,每部分又有单独的msg文件来定义,下方可见具体介绍。

    # goal definition
    AudioOrder order
    ---
    # result definition
    AudioResult result文件
    ---
    # feedback
    AudioFeedback feed

AudioOrder.msg order部分由三部分构成,第一部分为一个时间戳,第二部分为具体播放的曲目,第三部分为发出order请求的模块,后两部分由单独的msg文件定义

    # Time
    std_msgs/Header header
    # Song name
    AudioSongName name
    # User
    AudioUser  user

由于后期产品定义的调整,以及考虑开发者应用更加方便,AudioSongName中的定义目前已弃用,此处可直接传入一个uint16的值,这个值的具体含义可解析为一个本地(/opt/ros2/cyberdog/data/wav/)的wav文件,具体的含义可见附录。

此处支持个人开发者自由生成音频文件来扩充本地音频支援,目前支持的格式为: 采样率:16000 通道数:1 数据格式:16bit 小端 后续OTA持续升级过程中,我们将开放更广泛的采样率支持,敬请期待。

AudioUser.msg 此处定义了此action client端的具体模块名(后续优化中将被替换为优先级)

    # Assistant Messages
    #
    #
    int8 DEFAULT           = 0
    int8 STARTER           = 1
    int8 POWER             = 2
    int8 TOUCH             = 3
    int8 CAMERA            = 4
    int8 APP               = 5
    int8 BLUETOOTH         = 6
    int8 WIFI              = 7
    int8 XIAOAI            = 8
    #
    int8 id
    #

模块内部完成音播放是通过使用audio base模块中提供的方法来实现的。

在本模块中的相关实现可参见以下方法,其中play_callback在播放完成后会自动调用。

void player_init();
void player_handle(int id);
void play_callback();

语音助手控制与交互功能

功能介绍

音频模块除了支持基本的播放功能外,还支持语音助手的功能,语音助手的具体集成实现可参见audio assistant模块的README,该模块只介绍通过APP控制语音助手的交互功能。

这部分的具体功能分为以下几部分: 1、接收APP的指令,完成对语音助手的开关控制(决定助手功能功能的工作状态:是否开启) 2、查询语音助手的工作状态,并与APP的控制状态同步 3、接收语音助手发出的运动控制的指令,通知决策模块对应语音指令的下发 4、接收APP发来的获取device id的请求,并返回device id 5、接收APP发来的传输token的请求,检测token的正确性后,将token写入token.toml文件中 6、检测当前网络状态并广播

此处需要注意的是,为了提高跨平台通信的效率,模块与APP之间的通信引入了grpc的解决方案,grpc的引入不影响本模块代码的正常书写,了解grpc的解决方案,可参考cyberdog_grpc模块的README以及代码实现。

接下来选择性得介绍以上功能的重点部分。

APP控制与查询语音助手的状态通过一个service通信来实现,本模块内部实现了一个service server用于接收APP侧发来的请求,具体的实现简述如下。 service name: token_update 回调: check_app_order

涉及的接口文件如下: TokenPass.srv Token.msg

APP发出的请求主要包括以下几个部分: 1、请求关闭/开启语音助手功能:此处语音助手开启的状态下默认会优先走在线功能(可对话,可运行语音动作指令),在在线功能走失败情况下(网络问题等原因)走离线功能。目前APP的按钮只区分语音助手的开关状态,没有开放对走语音助手离线/在线的选择功能。 2、请求获取device id用于申请在线语音助手功能开启必要的token。 3、请求发送token。 4、请求获取语音助手当前运行状态。

对语音助手模块(audio assistant)的请求目前通过一个topic实现,本模块实现一个topic发布来发布相关请求,audio asistant模块实现订阅来进行接收处理。

目前本模块发布的内容包括以下几个部分,重点实现的方法可通过查询该主题发布的方法PublishAiSwitch来查询。 1、通知开启语音助手在线功能 2、通知关闭语音助手在线功能

考虑Topic发布订阅的方式无法获取接收方是否成功执行的结果,发送请求后也无法获得接收方的应答,目前的这种通信方式正在修改为service的通信方式,本模块实现一个service client来向audio assistant模块发出以下几种请求,并等待audio assistant模块的一个实际执行结果。 1、请求开启语音助手在线功能 2、请求关闭语音助手在线功能 3、请求获取语音助手当前运行状态

这样设计的好处是,本模块可以真实的获取到audio assistant模块接收请求后实际运行的结果,如:发送开启语音助手的请求,这个时候语音助手模块可能会成功开启在线功能,这时候将会返回本模块一个执行成功的结果,语音助手模块也可能会因为网络问题,实际启用了离线功能,或者因为一些其它的错误,实际完全无法启动,这个时候将会返回本模块一个执行错误的结果,当本模块收到执行错误的结果时会在一定时间内向audio assistant模块发送查询当前运行状态的一个请求,这样本模块就会得到audio assistant模块的一个实际的运行状态,方便状态维护的问题,以及APP查询语音助手工作状态时能够返回一个正确的结果。

遗憾的是由于时间问题,这部分的实现还没有完全完成topic -> service的完全替换,这部分会在之后OTA的升级过程中完善。

设计提醒

通过以上的功能介绍可以看出,此部分APP,audio_assistant以及本模块之间的交互相关功能的逻辑过于繁复,一系列audio assistant与APP之间的通信功能需要依靠本模块转发,这样的设计与整个audio模块的任务分工以及其它因素有关。

这样的设计与整个ROS2的去中心化的设计理念是不符的,提醒广大开发者尽量规避。

音量调解功能

本模块提供音量调节的接口,目前该接口是通过接收APP下发的音量设置的请求,与APP之间的通信接口即以上提到的service(name:token_update)的接口。

模块内部完成音量调节是通过使用audio base模块中提供的方法来实现的。

在本模块中的相关实现可参见以下方法:

void volume_set(int vol);
int volume_get();

附录

本地wav对照表 | 编号 | 提示音含义 | | :—- | :—- | | 1 | 开机 | | 2 | 关机 | | 3 | 开始充电/充电完成 | | 4 | 摸头启动连接/连接成功 | | 5 | 连接中/人脸录入中/人脸识别中 | | 6 | 未连接/连接失败 | | 7 | 路径规划失败/有障碍物无法通过/当前状态不可执行 | | 8 | 开始拍照 | | 9 | 录像每隔30s/录像每隔2min |

编号 TTS音频
100 唤醒狗叫
101 电量低于%10
102 现在开始充电
103 人脸录入开始,蹲在我面前不要动哦
104 充电完成了
105 正在连接遥控器
106 遥控器连接失败
107 人脸录入开始,站在我面前不要动哦
108 人脸录入失败
109 人脸录入成功
110 开始识别人脸,走到我面前,看着灯光的位置哦
111 人脸识别失败
112 人脸识别成功
113 一次只能录一个人,正对镜头别动哦
114 我有点看不清,正对镜头别动哦
115 正对镜头,脸别动哦
116 主人离我太远了,请等我一下
117 我们的距离太近了,远一些比较安全
118 图传开启
119 我跟丢主人了
120 这条路好像走不了,再找找别的路吧
121 前方有障碍物
122 开始录像
123 日志抓取失败
124 请登陆app帐号以启用小爱在线功能
125 小爱在线功能启动
126 不行了,快没电了,我要趴下了
CHANGELOG
No CHANGELOG found.

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged audio_interaction at Robotics Stack Exchange

No version for distro noetic. Known supported distros are highlighted in the buttons above.
No version for distro ardent. Known supported distros are highlighted in the buttons above.
No version for distro bouncy. Known supported distros are highlighted in the buttons above.
No version for distro crystal. Known supported distros are highlighted in the buttons above.
No version for distro eloquent. Known supported distros are highlighted in the buttons above.
No version for distro dashing. Known supported distros are highlighted in the buttons above.
No version for distro galactic. Known supported distros are highlighted in the buttons above.
No version for distro foxy. Known supported distros are highlighted in the buttons above.
No version for distro iron. Known supported distros are highlighted in the buttons above.
No version for distro lunar. Known supported distros are highlighted in the buttons above.
No version for distro jade. Known supported distros are highlighted in the buttons above.
No version for distro indigo. Known supported distros are highlighted in the buttons above.
No version for distro hydro. Known supported distros are highlighted in the buttons above.
No version for distro kinetic. Known supported distros are highlighted in the buttons above.
No version for distro melodic. Known supported distros are highlighted in the buttons above.