2017년 1월 1일 일요일

Javascript 기반 로봇 제어 플랫폼

Javascript는 인터넷 기반으로 동작되므로, 네트워크 상에서 센서와 액추에이터 제어와 관련된 메시지 교환이 많은 로봇 제어에 유리할 수 있다. Javascript는 사용이 쉽고 Node.js와 같은 훌륭한 라이브러리를 많이 지원하고 있다. 이런 이유로 Javascript기반 로봇제어 방식이 NodeBots와 같은 커뮤니티를 통해 점차 확산되고 있다. 이 글에서는 손쉽게 로봇을 컨트롤할 수 있는 Javascript 기반 오픈소스 플랫폼을 소개한다.

1. Johnny-Five 
Johnny-Five는 Javascipt 기반 로봇 및 IoT 플랫폼으로 Bocoup 그룹에서 2012년에 릴리즈된 오픈소스이다. 75명이상의 개발자가 이 프로젝트에 참여하고 있으며, 계속적인 기능 개선 및 확장이 이루어지고 있다.


참고로 Johnny-Five란 이름은 로봇 영화로 유명한 조니 5에서 따온것이다.

80년대 어린이의 우상 Johnny-Five 한장면ㅎ

로봇의 센서와 액추에이터를 추상화한 사용하기 쉬운 API를 제공한다. 다음은 Johnny-Five를 어떻게 사용하는 지 간단히 보여준다.


API는 대부분의 센서와 액추에이터를 지원하며, 예제와 사용법 설명이 매우 쉽게 잘 되어 있다. 아두이노, 라즈베리파이 등 수많은 오픈소스 보드를 지원한다.

다음은 Johnny-Five를 이용해 만든 워킹로봇이다.


2. Cylon.js
오픈 소스 드론, 로봇 등 다양한 플랫폼을 지원하는 Javascript기반 로봇 프레임웍이다.


Johnny-Five와 마찬가지로, 수많은 센서와 액추에이터를 추상화해, 사용법이 매우 간단하다. 다음은 간단한 blink 예제이다.

var Cylon = require("cylon");

// Initialize the robot
Cylon.robot({
  // Change the port to the correct port for your Arduino.
  connections: {
    arduino: { adaptor: 'firmata', port: '/dev/ttyACM0' }
  },

  devices: {
    led: { driver: 'led', pin: 13 }
  },

  work: function(my) {
    every((1).second(), function() {
      my.led.toggle();
    });
  }
}).start();

다음은 지원하는 플랫폼 일부이다.


API는 REST, socket.io, mqtt 프로토콜을 지원하고 있다. Cylon.js를 설치하고, 실행하면, 다음과 같이 로봇 플랫폼을 연결하고, 제어할 수 있는 데쉬보드를 지원한다.


다음은 Cylon.js 를 사용해 BB-8와 드론을 제어한 사례이다.


3. ROSnodejs
이름과 같이 ROSnodejs는 로봇 제어 오픈소스 미들웨어로 유명한 ROS(robot operating system)의 Javascript버전으로 ROS와 연결되어 사용되는 로봇 제어 클라이언트 라이브러리이다.

사실 ROS를 직접 사용해도 되지만, 설정 등 작업해야 할 것들이 많다. 이를 Javascript로 추상화하였다.

다음은 echo rostopic 메시지를 다른 로봇 ROS 노드에 전달하는 예제이다.

ros.types([ 'std_msgs/String' ], function(String) { var node = ros.node('talker'); node.topics([ { topic: 'publish_example', messageType: String } ], function(publishExample) { // Uses the ROS command line tool rostopic to echo messages published // over the 'publish_example' topic. var subscribeCommand = 'rostopic' + ' echo' + ' /publish_example'; var child = exec(subscribeCommand, function(error, stdout, stderr) { should.not.exist(error); }); var message = new String({ data: 'howdy' }); publishExample.publish(message); setTimeout(done, 1500); }); });

다음은 자바스크립트로 로봇 플랫폼인 PR2를 제어하는 예이다.



댓글 없음:

댓글 쓰기