Отправить данные в Matlab с Android/Java

Я потратил некоторое время на поиск способа отправки данных из приложения для Android в Matlab - без какого-либо подхода. Я бы предпочел сделать это с помощью JSON через веб-сервис Restful.

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

Matlab должен запускаться/ожидать POST-запросов от моего устройства Android, чтобы получать данные, приводить их в форму matlab из json, выполнять их и отправлять обратно, а затем снова ждать новых запросов.

«Веб-служба RESTful», такая как «webread», похоже, не ждет входящих данных и становится активной для них.


Как позволить Matlab прослушивать входящие данные с помощью json? или как позволить Matlab получать данные из программ на базе Android/java? Нужны ли мне другие фреймворки, API или даже сервер с базой данных, чтобы сделать это?

Может ли кто-нибудь дать мне несколько советов?


person Ghalion    schedule 16.11.2015    source источник
comment
webread - это клиент, а не сервер. Вам действительно нужно добавить спокойный сервер в Matlab. Но в чем ваша общая проблема? Может быть, есть лучший подход.   -  person zapl    schedule 16.11.2015
comment
Спасибо за вашу информацию с сервером, я попытаюсь запустить сервер Java Spring, который будет вызывать Matlab.   -  person Ghalion    schedule 17.11.2015
comment
mathworks.com/matlabcentral/answers/   -  person    schedule 23.12.2017
comment
Если у вас есть MATLAB Production Server, он может вам помочь?   -  person Justin    schedule 23.12.2017


Ответы (3)


Подход 1:

Matlab также предоставляет Matlab Mobile https://de.mathworks.com/products/matlab-mobile.html, который может выполнять код Matlab с вашего устройства, однако отправлять изображения в Matlab невозможно.

Однако вы можете использовать веб-камеру https://play.google.com/store/apps/details?id=com.pas.webcam&hl=en и откройте сервер, что довольно просто. Вы можете запустить приложение в фоновом режиме, а затем подключиться к Matlab через Matlab-Mobile и получить к нему доступ через свой IP-адрес и обычно через порт 8080.

Подход 2:

Вы можете использовать WebSocket -Server, который реализован здесь:

https://de.mathworks.com/matlabcentral/fileexchange/50040-jebej-matlabwebsocket

Для получения дополнительной информации о том, как запустить его, вы можете следовать указаниям, приведенным в файле readme GitHub, здесь: https://github.com/jebej/MatlabWebSocket

Сервер WebSocket находится на самом высоком уровне 7-го уровня (прикладной уровень) модели OSI https://en.wikipedia.org/wiki/OSI_model и строит операцию на 4-м уровне (TCP). Однако вам не нужно указывать такие вещи, как размер буфера и т. д.

Следующий пример кода напрямую взят из примера кода из проекта GitHub. Для достижения желаемого результата в приложении Android лучше всего перестроить клиентское приложение на Android.

Эхо-сервер:

classdef EchoServer < WebSocketServer
    %ECHOSERVER Summary of this class goes here
    %   Detailed explanation goes here

    properties
    end

    methods
        function obj = EchoServer(varargin)
            %Constructor
            obj@WebSocketServer(varargin{:});
        end
    end

    methods (Access = protected)
        function onOpen(obj,conn,message)
            fprintf('%s\n',message)
        end

        function onTextMessage(obj,conn,message)
            % This function sends an echo back to the client
            conn.send(message); % Echo
        end

        function onBinaryMessage(obj,conn,bytearray)
            % This function sends an echo back to the client
            conn.send(bytearray); % Echo
        end

        function onError(obj,conn,message)
            fprintf('%s\n',message)
        end

        function onClose(obj,conn,message)
            fprintf('%s\n',message)
        end
    end
end

Чтобы запустить его в MATLAB, введите:

s = EchoServer(30000);

Это затем будет использовать порт 30000 на вашем локальном компьютере.

На Android просто создайте WebSocket-Client и используйте свой URI, который вы можете узнать, используя ipconfig (Windows) или ifconig (Linux). В Android uri должен выглядеть следующим образом:

ws://192.168.1.102:30000 

Где IP-адрес может измениться в соответствии с вашим IP-адресом

person Kev1n91    schedule 25.12.2017

Вот мои 2 цента.

Ваш подход кажется правильным.

Шаг 1: вам нужно запустить веб-сервер с помощью MATLAB на вашем устройстве. Проходя через веб-сервер, похоже, вы можете использовать его для запустите webserver и выполните файл .m, когда на ваш сервер будет отправлен запрос POST или GET.

Шаг 2. Допустим, ваш сервер принимает запросы через порт 8080. С вашего устройства Android, если вы находитесь в той же сети, вы можете отправить HTTP-запрос POST на http://your.ip.address:8080, извлечь данные и выполнить код в .m файле.

Примечание. Вы также можете получить общедоступный URL-адрес локального сервера, работающего на устройстве, с помощью утилиты ngrok. Затем сделайте запрос POST на этот общедоступный URL-адрес. Вам не нужно находиться в той же сети, чтобы сделать запрос. Вот некоторое объяснение: Доступ к локальному хосту с Android через Wi-Fi.


Изменить: Дополнительный вопрос гласит:

Matlab может получать данные через клиент TCP / IP, но как сайт Android должен выполнять алгоритм POST / GET и как Matlab может ответить на него?

Позвольте мне перефразировать то, что я понимаю. Во-первых, вы хотите знать, как из кода Android можно выполнить запрос POST/GET, а во-вторых, как Matlab ответит на запрос?

  • В Android вы можете сделать запрос POST в фоновом потоке либо с помощью AsyncTask (Android HttpURLConnection with AsyncTask Tutorial), или, если вы хотите сделать это правильно, вы можете использовать библиотеку Retrofit для выполнения вызовов POST/GET (Использование Retrofit 2.x в качестве клиента REST — Учебное пособие).
  • При использовании WebServer, как упоминалось в ссылке ранее, когда файл .m выполняется при вызове POST, вы можете отправить оттуда ответ на запрос POST. На Android, где вы инициировали вызов, вы можете получить обратный вызов.

Надеюсь, что это помогает немного.

person Shobhit Puri    schedule 29.12.2017

Пробовали ли вы пакет поддержки Android для MATLAB?

Хотя он не позволяет получить доступ к камере, при использовании с MATLAB Mobile он предоставляет доступ к:

  • Ускорение по 3 осям
  • Магнитное поле по 3 осям
  • Угловая скорость по 3 осям
  • Азимут, крен, тангаж
  • Широта, долгота, высота, горизонтальная точность, скорость и курс

Вот ссылка с более подробной информацией о том, как начать.

person Brendan Cashman    schedule 29.12.2017