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 «услышал» сообщение.