当前位置: 首页 > 知识库问答 >
问题:

从后端启动Alexa交互

相野
2023-03-14

我正在写我的第一个Alexa技能,目的是通过提供语音输入与机器人互动,并允许机器人通过Alexa接口发回信息。

我正在使用Flask Ask Python扩展来编写一个本地后端,使用ngrok来建立http通信,使用ROS来与机器人通信。

我创造了发射和停止意图,也是一个个人意图,我要求阿列克谢移动机器人。

我现在需要做的是创建一个函数,允许我使用alexa speak输出来传递消息,而无需用户交互;例如,当一个自定义条件被触发时,我希望Alexa播放一条示例消息:

if condition == True:
    def advise_function():
        sample_message = 'Messaggio di avviso'
        return statement(sample_message)

这是实际代码(供参考):

#!/usr/bin/env python
import os
import rospy
import threading
import requests
import time

from flask import Flask
from flask_ask import Ask, question, statement, session
from std_msgs.msg import String, Float64


#---------------------------------------------- FLASK & ROS INIZIALIZATION ---------------------------------------------#

app = Flask(__name__)
ask = Ask(app, "/")

# ROS node, publisher, and parameter. The node is started in a separate thread to avoid conflicts with Flask.
# The parameter *disable_signals* must be set if node is not initialized in the main thread.
threading.Thread(target=lambda: rospy.init_node('alexa_ros_node', disable_signals=True)).start()
direction_publisher = rospy.Publisher('alexa/direction', String, queue_size=100)
length_publisher = rospy.Publisher('alexa/lenght', Float64, queue_size=100)
NGROK = rospy.get_param('/ngrok', None)


#------------------------------------------------------- INTENTS -------------------------------------------------------#

# LaunchIntent -> Avvio dell'applicazione: "Apri nodo ros"
@ask.launch
def launch():
    welcome_message = 'Benvenuto nel nodo di controllo ROS. Come posso aiutarti?'
    return question(welcome_message)

# MuoviRobotIntent: "Muovi il robot"
@ask.intent('MuoviRobotIntent', default={'direzione':None, 'lunghezza':None})
def move_robot_function(direzione, lunghezza):
    direction_publisher.publish(direzione)
    length_publisher.publish(float(lunghezza))
    return statement('Ho pubblicato direzione e lunghezza sul topic ROS: {0} di {1} metri.'.format(direzione, lunghezza))


# StopIntent -> Uscita dall'applicazione: "Stop / Esci..."
@ask.session_ended
def session_ended():
    return "{}", 200

# ngrok app running
if __name__ == '__main__':
    if NGROK:
        print 'NGROK mode'
        app.run(host=os.environ['ROS_IP'], port=5000)
    else:
        print 'Manual tunneling mode'
        dirpath = os.path.dirname(__file__)
        cert_file = os.path.join(dirpath, '../config/ssl_keys/certificate.pem')
        pkey_file = os.path.join(dirpath, '../config/ssl_keys/private-key.pem')
        app.run(host=os.environ['ROS_IP'], port=5000,
                ssl_context=(cert_file, pkey_file))

共有1个答案

葛景龙
2023-03-14

查看主动事件API。我相信它应该涵盖你的用例。https://developer.amazon.com/en-US/docs/alexa/smapi/proactive-events-api.html

 类似资料:
  • 环境准备 请参考环境准备 创建工作目录 export FALCON_HOME=/home/work export WORKSPACE=$FALCON_HOME/open-falcon mkdir -p $WORKSPACE 解压二进制包 tar -xzvf open-falcon-v0.2.1.tar.gz -C $WORKSPACE 在一台机器上启动所有的后端组件 首先确认配置文件中数据库账

  • 环境准备 请参考环境准备 创建工作目录 export FALCON_HOME=/home/work export WORKSPACE=$FALCON_HOME/open-falcon mkdir -p $WORKSPACE 解压二进制包 tar -xzvf open-falcon-v0.2.0.tar.gz -C $WORKSPACE 在一台机器上启动所有的后端组件 首先确认配置文件中数据库账号密

  • 问题内容: 我想尝试PyCharm进行鼠尾草数学开发。通常我会运行eclipse来进行鼠尾草开发,但是现在我想与PyCharm一起尝试。 要使用sage环境变量启动eclipse,通常在命令行中执行以下操作: 第一行加载鼠尾草环境变量,其余行启动eclipse。如何为pyCharm做同样的事情?(请注意,我正在使用Mac和Ubuntu进行sage开发;以上命令对两个操作系统均不可知) 链接:Jet

  • 我有3个文件- kafka producer.py,consumer.py和spark-job.py。我不知道如何启动spark file来处理来自kafka的生成数据流。 > < li> 在第一个终端中启动zookeeper服务器: 。\ bin \ windows \ zookeeper-start . bat。\config\zookeeper.properties 然后在第二个单独的终端中

  • 以下是我的小程序的要点 一个python脚本,用于检查某个目录中是否有新文件(电影文件),并相应地更新sqlite3数据库,从而将要处理的文件排队。使用launchctl每分钟运行一次。 另一个python脚本,使用HandBrake命令行界面进行文件转换的实际处理。还可以使用launchctl每分钟运行一次。 在第二个脚本中,转换完成后,我想启动一个applescript,将文件导入到iTune

  • 我正在构建一个android应用程序,我需要从后台开始一项活动。我正在使用ForegroundStarter来扩展服务,以实现这一点。我有一个活动屏幕。我需要从前台服务运行的类。活动的广告屏幕。除了Android10,其他所有Android版本的课程都可以正常运行(从后台开始)。 前场先发。班 我读到在Android10上从后台启动活动有一些限制。这个代码似乎不再有效了。https://devel