LoginSignup
4
6

More than 5 years have passed since last update.

Node.jsでParrotのミニドローンを飛ばす (async/await利用)

Posted at

RESASハッカソン 岩手で記事書いてます。 #RESAS

Node.jsでParrotのミニドローンのBLE情報を探すの続きです。

rolling-spiderのサンプルをasync/awaitで利用できるように書いてみました。

このサンプルだとキー入力で制御でしたが、何秒後にこれを実行みたいな処理を同期的に書きたかった感じです。

準備

npm i --save rolling-spider

コード

app.js
'use strict';

const RollingSpider = require('rolling-spider');
const DRONE_UUID = process.env.DRONE_UUID || ``; //各々書き換えましょう。
const drone = Promise.promisifyAll(new RollingSpider({uuid:DRONE_UUID}));
const STEPS = 5;

let activeFlag = true;

const cooldown = () => {
  activeFlag = false;
  setTimeout(() => activeFlag = true, STEPS);
}

// Promise化
const droneConnectAsync = () => new Promise(resolve => drone.connect(resolve('connect success!')));
const droneSetupAsync = () => new Promise(resolve => drone.setup(resolve('setup success!')));
const droneFlatTrimAsync = () => new Promise(resolve => drone.flatTrim(resolve('trim success!')));
const sleep = msec => new Promise(resolve => setTimeout(resolve, msec)); // async/awaitでのSleep処理

// メインの処理
const main = async () => {
  //ドローンとの接続/セットアップ
  console.log('connecting...');
  let res = await droneConnectAsync();
  console.log(res);
  res = await droneSetupAsync();
  console.log('Configured for Rolling Spider! ', drone.name);
  res = await droneFlatTrimAsync();
  console.log(res);
  drone.startPing();
  res = await droneFlatTrimAsync();
  console.log(res);
  console.log(drone.name + ' => SESSION START');
  activeFlag = true;

  // 離陸
  await sleep(5000);
  drone.takeOff();

  // 5秒待って前進
  await sleep(5000);
  drone.forward({steps:10});
  cooldown();

  // 5秒待って着陸
  await sleep(5000);
  drone.land();

  // 10秒後に接続解除
  await sleep(10000);
  console.log('disconnect');
  drone.disconnect();
  process.stdin.pause();
  process.exit();
};

main();

実行

$ DRONE_UUID=xxxxxxxxxxxx node app.js

これで離陸->5秒待つ->前進->5秒待つ->着陸ができました。

4
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6