Google Assistant Ввод в Python Вывод - PullRequest
0 голосов
/ 14 апреля 2020

вопрос довольно прямой. Я хотел бы управлять дроном (Bitcraze Crazyfl ie), используя Google Home. Входные данные: «Drone fly to x3 y4», обработанный как обычно Firebase et c. Результатом является вывод Google Assistant: «Flying to x3 y4», , но также Ouput, например, в формате JSON, для навигации по дрону. Поскольку дрон работает с Python, это предпочтительный язык вывода.

РЕДАКТИРОВАТЬ Добавлено больше контекста

В настоящее время я использую сервер узлов, выполняющий этот код:

        'use strict';

    // Import the Dialogflow module from the Actions on Google client library.
    const {dialogflow} = require('actions-on-google');

    // Import the firebase-functions package for deployment.
    const functions = require('firebase-functions');

    // Instantiate the Dialogflow client.
    const app = dialogflow({debug: true});

    // Handle the Dialogflow intent named 'fly'.
    // The intent collects parameters named 'xaxis, yaxis'.
    app.intent('fly', (conv, {xaxis,yaxis}) => {
        const xAxis = xaxis;
        const yAxis = yaxis;
        // Respond with the user's coordinates and end the conversation.
        conv.close('Roger that, flying to ' + xAxis + ", " + yAxis);

    });

    // Set the DialogflowApp object to handle the HTTPS POST request.
    exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);

Теперь я хотел бы получить const xAxis и yAxis и используйте их в Python программе. Я пытался использовать

process.stdout.write(xAxis + yAxis);

Прослушивание в Python с чем-то вроде

out = sensor.stdout.read(1)

, но код будет запускаться на сервере Google, поэтому прослушивание локального порта не работает.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 15 апреля 2020

Лучший подход - использовать другую машину в GCP, а не общаться с вашим домом. P C. Вы узнаете больше, и вам будет легче, в конечном счете, создавать решения. Поскольку я больше знаком с AWS, а не с GCP, я не могу назвать компоненты сети / безопасности, которые необходимо настроить, но документы говорят, что вам не нужно. Итак, теоретически, это должно быть как раз то, чтобы раскрутить другую вычислительную машину с запущенным на ней кодом Python.

Если вы решите поговорить с вашим домом P C, вам нужно будет перенаправить порты на вашем маршрутизаторе. В настоящее время он выступает в качестве брандмауэра для устройств локальной сети и не позволяет внешним машинам инициировать подключения к вашим внутренним адресам. например, ваш компьютер GCP инициирует соединение с вашим домом P C. Другой способ разрешен по умолчанию. Если вы подумаете об этом, у вашего маршрутизатора есть один IP-адрес в глобальной сети, но ваша локальная сеть может иметь несколько устройств (несколько сетевых адресов). Если ваш компьютер GCP подключается к WAN IP маршрутизатора через порт 8080, к какому IP-адресу локальной сети он должен подключаться? Вы должны помочь вашему маршрутизатору и явно сказать об этом.

Когда у вас есть сетевое решение, вы можете отладить само подключение (сервер может общаться с клиентом) с помощью netcat (nc / ncat, в зависимости от Linux distro). Netcat - это универсальный сетевой инструмент, с помощью которого вы можете просто открывать соединения (перед добавлением своей программы в стек отладки) и гарантировать, что сетевая часть вашего решения работает должным образом.

nc -v <destination_ip> <port>

Прост.

Это должно привести вас туда, где вы хотите быть. Работающее соединение между вашим контроллером беспилотника GCP и Python процессорной машиной.

Бонус - если вы хотите быстрый способ заставить ваш компьютер (P C или другой) прослушивать порт, вы можете использовать встроенный в Python модуль файлового сервера HTTP с

python -m http.server 8080

Это будет обслуживать файлы из каталога, в котором вы выполнили эту команду. Так что имейте это в виду, если вы открыты для мира.
Или простой «эхо-сервер», использующий netcat.

nc -v -l 8080

Наконец, для solid Python HTTP API Framework, я настоятельно рекомендую FastAPI. Это позволяет быстро написать HTTP-сервер API, например, с помощью метода POST, который может вызывать ваш беспилотный контроллер GCP. Он имеет большой бонус для генерации как интерактивных документов OpenAPI, пример , для вашего кода, так и с использованием сторонних инструментов от Swagger (которые вы можете видеть в связанном примере), сгенерируйте сервер / клиент / тестирование кода "котельной плиты". Я также упомянул, что их документы великолепны?

...