WebSocket не найден с Node.js in AWS Lambda - PullRequest
0 голосов
/ 28 февраля 2020

BLUF: Попытка запустить скрипт node.js в AWS Lambda, получение сообщения «Ошибка веб-сокета не определена», даже если у меня должны быть все необходимые библиотеки / ссылки и код, работающий при локальном тестировании.

Хорошо утро. Я новичок с node.js, но пытаюсь реализовать функцию для взаимодействия с ROS через AWS Lambda. Я знаю, что у AWS есть пакет ros, но это не будет соответствовать тому, что я ищу. Основная идея c состоит в том, чтобы использовать rosbridge и roslib js с ngrok для передачи команд ros из AWS Lambda.

Я хочу запустить следующий скрипт (мой индекс. js файл) на основе https://github.com/RobotWebTools/roslibjs/blob/develop/examples/node_simple.js с настройками для работы в AWS Lambda. Я включил установленную библиотеку roslib. js (https://github.com/RobotWebTools/roslibjs) в AWS Lambda с помощью загрузки файла zip.

exports.handler = async (event, context) => {
    // Connecting to ROS 
    var ROSLIB = require('roslib');

    var ros = new ROSLIB.Ros({
        url : 'ws://d14b1335.ngrok.io'
    });

    ros.on('connection', function() {
    console.log('Connected to websocket server.');
    });


    // Publishing a Topic
    // ------------------

    var cmdVel = new ROSLIB.Topic({
      ros : ros,
      name : '/turtle1/cmd_vel',
      messageType : 'geometry_msgs/Twist'
    });

    var twist = new ROSLIB.Message({
    linear : {
      x : 1.0,
      y : 0.0,
      z : 0.0
    },
    angular : {
      x : -0.0,
      y : -0.0,
      z : -2.0
    }
    });

    cmdVel.publish(twist);
        return event.key1;  // Echo back the first key value
        // throw new Error('Something went wrong');
    };

Я проверил на своей локальной машине и это работает отлично. Однако в Lambda я получаю следующую ошибку:

    {
  "errorType": "ReferenceError",
  "errorMessage": "WebSocket is not defined",
  "trace": [
    "ReferenceError: WebSocket is not defined",
    "    at Object.43 (/var/task/roslib.js:4646:69)",
    "    at o (/var/task/roslib.js:1:265)",
    "    at /var/task/roslib.js:1:316",
    "    at Object.15.../util/workerSocket (/var/task/roslib.js:2238:17)",
    "    at o (/var/task/roslib.js:1:265)",
    "    at /var/task/roslib.js:1:316",
    "    at Object.21.../mixin (/var/task/roslib.js:3425:10)",
    "    at o (/var/task/roslib.js:1:265)",
    "    at /var/task/roslib.js:1:316",
    "    at Object.6../actionlib (/var/task/roslib.js:1567:16)"
  ]
}

Я попытался включить библиотеку Node.js websocket ws (https://github.com/websockets/ws) с функцией Lambda вместе с roslib. js библиотека без успеха. Однако я не верю, что это проблема, поскольку я никогда не устанавливал библиотеку ws для Node.js, чтобы использовать скрипт на моей локальной машине, и я не думаю, что это установка по умолчанию или что-то в этом роде.

Я пытался переместить файлы, связанные с weboscket, из библиотеки в дереве файлов функций AWS Lambda. Я должен был сделать это, чтобы Lambda нашла файл roslib. js, но он не сработал для этой ошибки.

У меня есть url: ws: // (ngrok url), а не https: // (ngrok url), чтобы ROS «услышал» сообщение.

...