Raspberry Pi에 미니 와이어를 연결하여 Leap Motion으로 띄우기

탱고 애플리케이션 개발의 배후에서 비밀리에 추진된 드론 제어 프로젝트(물리적 의미에서)가 마침내 운영되기 시작했기 때문에 투고했다.

의 목적


프로그램 제어를 통해 자유롭게 드론을 띄우는 게 목표다.
최종 목표는 자율비행과 사이코뮤의 조작을 할 수 있다는 것이다.

시스템 구성


하드웨어

  • Parrot MAMBO
  • Raspberry Pi3 Model B
  • BUFFALO WLI-UC-GNME
  • MacBook Pro (13-inch, Mid 2010)
  • Leap Motion
  • 소프트웨어

  • Raspbian Jessie with PIXEL
  • Node.js v6.9.4
  • noble 1.7.0
  • rolling-spider 1.5.2
  • leapjs 0.6.4
  • 개발 기록


    드론 획득


    어쨌든 뿔에는 무인기가 필요하다.
    다각적인 조사 결과 수도권에는 드론을 날릴 수 있는 곳이 거의 없으며, 200g 미만의 소형 드론제한된 객체 이외부터 시작하는 게 좋다.
    더 조사해 보면 파로트의 무인기는 SDK 조작으로 모델, 노드를 지원할 수 있다.js에서 Bluetooth를 연결하는 실제 성과도 보고했다.
    http://qiita.com/tkyko13/items/02f74180daac05254367
    https://liginc.co.jp/187633
    이에 따라 드론 1호기는 다음 제품을 구매하기로 했다.
    Parrot MAMBO

    개조가 가능한 가능포와 로봇 팔은 로맨틱하다.

    MacBook에서 시작해야 합니다.


    드론 구매가 가능하기 때문에 먼저 정식 iOS 앱에서 동작을 확인한다.
    https://itunes.apple.com/jp/app/freeflight-mini/id1137022728
    프로그램이라서 그런지 의외로 조작이 어려워요.
    프로펠러가 울려 윈윈하고 있다.
    만져봐, 기본 동작을 이해했어도 이제 노드야.js에서 온 동작입니다.
    한꺼번에 움직이고 싶었지만 노블은 다음과 같은 실수를 했다.
    $ sudo node find.js 
    /Users/shigemitsu/drone/node_modules/noble/lib/noble.js:76
          throw error;
          ^
    
    Error: Could not start scanning, state is unsupported (not poweredOn)
        at Noble.startScanning (/Users/shigemitsu/drone/node_modules/noble/lib/noble.js:71:17)
        at Noble.start (/Users/shigemitsu/drone/find.js:14:9)
        at emitOne (events.js:96:13)
        at Noble.emit (events.js:188:7)
        at Noble.onStateChange (/Users/shigemitsu/drone/node_modules/noble/lib/noble.js:60:8)
        at emitOne (events.js:96:13)
        at NobleBindings.emit (events.js:188:7)
        at NobleBindings.<anonymous> (/Users/shigemitsu/drone/node_modules/noble/lib/mac/yosemite.js:78:8)
        at emitOne (events.js:96:13)
        at NobleBindings.emit (events.js:188:7)
    
    조사 결과:
    MacBook은 너무 오래되어 Bluetooth 4.0이 지원되지 않습니다.
    웬일이야...ω・‘)
    프로젝트는 어쩔 수 없이 중단해야 한다.

    어쩔 수 없이 랩베리 피를 살 수밖에 없어요.


    뭐, 전에 갖고 싶었는데.여기서 블루투스 동글로 도망가면 질 것 같아.

    와이파이 동글 설치는 래칫휠의 동작 실적BUFFALO WLI-UC-GNME을 보고했다.또한 USB 마우스, 키보드, 전원 및 모니터를 연결하여 사용합니다.

    OS 설치 사용NOOBS이 순조롭게 완료되었습니다.
    일본어화와 와이파이의 연결도 간단하다.

    다시 한번무승부


    라떼 노드.js의 환경을 만들다.
    앱-get으로 설치한 후 버전이 낡았기 때문에 아래 글을 참고하여 최신 버전으로 업데이트했습니다.
    http://qiita.com/da1fujimoto/items/8f66accafb6b86bf8d56
    $ sudo apt-get update
    $ sudo apt-get install -y nodejs npm
    $ node -v
    v0.10.29
    $ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
    $ sudo apt-get install -y nodejs
    $ node -v
    v6.9.4
    
    작업 디렉터리를 만들고 npm install에 필요한 프로그램 라이브러리를 설치합니다.
    $ mkdir -p work/drone
    $ cd work/drone
    $ npm install noble rolling-spider keypress
    
    몇 개의 WARN이 나타났지만, 사소한 일도 개의치 않는 강인한 정신은 동작을 확인해 보았다.
    $ sudo node find.js
    ------1台目:
     xxxxxxxxxxxx Mambo_XXXXXX
    1: Mambo_XXXXXX (xxxxxxxxxxxx), RSSI -62
    
    나는 순조롭게 설비를 찾았다.
    위의 UUID를 연결하여 keypress 이벤트에서 작업합니다.
    $ sudo node app.js
    Configured for Rolling Spider! Mambo_XXXXXX
    Mambo_XXXXXX => SESSION START
    got "keypress" => { name: 't',
      ctrl: false,
      meta: false,
      shift: false,
      sequence: 't' }
    takeoff
    
    날아갔어!ヽ(=´▽`=)ノ

    Leap Motion으로 하는 게 더 트렌디할 것 같아요.


    Node.js로 연결하면 좋지만 키보드 조작만 하면 예술이 없어진다...이렇게 생각할 때 눈에 띄는 것은 책상 가장자리에 놓는 것이다Leap Motion.
    손에 넣은 동작이 검출되면 비행 컨트롤러에 불가능한 동작이 나타날 수 있다.
    랩모션 공식 홈페이지에도 라쥬파·파로트사의 드론과 협업한 사례가 소개돼 있어 사용에 문제가 없겠죠.
    https://gallery.leapmotion.com/leap-motion-raspberry-pi-2/
    https://gallery.leapmotion.com/cylon-js-parrot-ar-drone/

    MacBook을 WebSocket Server로 사용


    Leap Motion을 래칫 휠에 직접 연결할 수 없으므로 MacBook이 필요합니다.
    다음 사이트를 참조하여 설정 중입니다.
    http://www.pentacreation.com/blog/2016/10/161008.html
    네트워크로서 MacBook을 케이블로 라우터에 연결하고 WiFi 온라인 모드를 설정하여 Leap Motion을 USB에 연결합니다.
    무유선 연결, 맥북을 연결하는 와이파이, 와이파이의 웹소켓을 통해 Leap Motion에 원격으로 연결되며 블루투스로 무인기와 짝을 이룬다.
    【2017/2/20 보충】
    WiFi를 사용하지 않더라도 동일한 WiFi 라우터에 연결하여 MacBook의 개인 IP 주소를 지정할 수 있습니다.

    Raspberry Pi에서 Leap Motion 데이터 활용


    라떼 파이에 리프스npm install를 첨가하다.
    $ npm install leapjs
    
    leapjs의 API 참고를 보면, 구조기로 웹소켓 서버의 IP 주소와 포트 번호를 지정할 수 있으며, 연결 목적지만 바꾸면localhost 연결 때와 같이 사용할 수 있습니다.
    https://developer.leapmotion.com/documentation/javascript/api/Leap.Controller.html
    gesture 이벤트와 무인기 제어를 연결하는 설치를 시도합니다.
    test.js
    var RollingSpider = require("rolling-spider");
    var Leap = require("leapjs");
    
    var ACTIVE = true;
    var d = new RollingSpider({uuid:"xxxxxxxxxxxx"});
    
    d.connect(function () {
        d.setup(function () {
            console.log('Configured for Rolling Spider! ', d.name);
            d.flatTrim();
            d.startPing();
            d.flatTrim();
            setTimeout(function () {
                console.log(d.name + ' => SESSION START');
                ACTIVE = true;
            }, 1000);
        });
    });
    
    var controller = new Leap.Controller({
        host: '[WebSocket ServerのIPアドレス]',
        port: 6437,
        //ラズパイではframeEventNameを無指定にした方がよい
        //frameEventName: 'deviceFrame',
        enableGestures: true
    });
    
    controller.connect();
    
    controller.on('gesture', function (gesture) {
        switch (gesture.type) {
            case 'circle':
                onCircle(gesture);
                break;
            case 'swipe':
                onSwipe(gesture);
                break;
        }
    });
    
    function onCircle(gesture){
        if (gesture.state === 'stop') {
            console.log('circle => takeoff');
            d.takeOff();
        }
    } 
    
    function onSwipe(gesture){
        if (gesture.state === 'stop') {
            console.log('swipe => landing');
            d.land();
        }
    } 
    

    Leap Motion으로 넘어가보도록 하겠습니다.


    동영상을 찍었어요.
    Leap Motion에서 무인기를 띄우는 테스트pic.twitter.com/tGTeRbLsS8-joyuko(@juko49)2017년 1월 31일.
    라떼 노드.js 프로그램을 실행하여 MacBook에 연결된 Leap Motion 데이터를 얻어 블루투스로 무인기에 명령을 보냅니다.
    손가락으로 공중에 원을 그리는 자세가 여러 번 실패해 패션 감각이 떨어질 수 있다.
    그나저나 갑자기 날아올라 깜짝 놀랐다д゜‘)
    【2017/2/20 보충】
    갑자기 날아오른 것처럼 보이는 건 제스처가 아니라 라거가 일어난 거야.
    frame EventName의 설정을 "animation Frame(60fps)"로 설정하면 lazu파의 CPU에서 처리가 따라가지 않습니다. "deviceFrame(처리 능력에 대응하는 fps)"로 설정되었지만 이 설정이라면 큰 오류가 발생할 수 있습니다.
    결과적으로 어떤 연결도 지정하지 않으면 반응 속도가 개선된다.

    총결산


    만약 PC가 블루투스 4.0을 지원한다면, 노드를 사용하십시오.js로 끝났기 때문에 랩 모션으로 드론을 조작할 때 실러캔스 파이가 필요하지 않습니다.
    이렇게 말하지만 블루투스와 웹소켓을 애플파이로 처리하는 방법을 이미 알고 있기 때문에 낭비하지 않을 거라고 믿습니다.
    이번에는 소통 확인을 목적으로 지스터스 행사에서 간단히 실시됐으며, 각 프레임의 손 동작을 조정해 드론을 따라 더욱 자유롭게 비행할 수 있도록 하고자 한다.

    좋은 웹페이지 즐겨찾기