ืžื™ืจ ืคึผืจืึธื’ืจืึทื ืงื•ืœ ืงืึธื ื˜ืจืึธืœ ืคื•ืŸ ื“ื™ ืงืึธืคึผื˜ืขืจ ื ื™ืฆืŸ Node.js ืื•ืŸ ARDrone

ืžื™ืจ ืคึผืจืึธื’ืจืึทื ืงื•ืœ ืงืึธื ื˜ืจืึธืœ ืคื•ืŸ ื“ื™ ืงืึธืคึผื˜ืขืจ ื ื™ืฆืŸ Node.js ืื•ืŸ ARDrone

ืื™ืŸ ื“ืขื ื˜ื•ื˜ืึธืจื™ืึทืœ, ืžื™ืจ ื•ื•ืขืœืŸ ืงื•ืงืŸ ืื™ืŸ ืงืจื™ื™ื™ื˜ื™ื ื’ ืึท ืคึผืจืึธื’ืจืึทื ืคึฟืึทืจ ืึท ื“ืจืึธื•ืŸ ืžื™ื˜ ืงื•ืœ ืงืึธื ื˜ืจืึธืœ ื ื™ืฆืŸ Node.js ืื•ืŸ ื•ื•ืขื‘ ืกืคึผื™ื˜ืฉ ืึทืคึผื™. ืงืึธืคึผื˜ืขืจ - ืคึผืึทืคึผื•ื’ื™ื™ึท ARDrone 2.0.

ืžื™ืจ ื“ืขืจืžืึธื ืขืŸ ืื™ืจ: ืคึฟืึทืจ ืึทืœืข ืœื™ื™ืขื ืขืจ ืคื•ืŸ "ื”ื‘ืจ" - ืึท ืึทืจืึธืคึผืจืขื›ืขื ืขืŸ ืคื•ืŸ 10 ืจื•ื‘ืœ ื•ื•ืขืŸ ืื™ืจ ืคืึทืจืฉืจื™ื™ึทื‘ืŸ ืื™ืŸ ืงื™ื™ืŸ ืกืงื™ืœื‘ืึธืงืก ืงื•ืจืก ื ื™ืฆืŸ ื“ื™ ืคึผืขืจืžืึธื•ืฉืึทื ืึทืœ ืงืึธื“ "ื”ื‘ืจ".

Skillbox ืจืขืงืึทืžืขื ื“ื–: ืคึผืจืึทืงื˜ื™ืฉ ืงื•ืจืก "ืžืึธื‘ื™ืœ ื“ืขื•ื•ืขืœืึธืคึผืขืจ ืคึผืจืึธ".

ื”ืงื“ืžื”

ื“ืจืึธื ืขืก ื–ืขื ืขืŸ ืึทืžื™ื™ื–ื™ื ื’. ืื™ืš ื˜ืึทืงืข ื”ื ืื” ืคึผืœื™ื™ื™ื ื’ ืžื™ื˜ ืžื™ื™ืŸ ืงื•ื•ืึทื“, ื ืขืžืขืŸ ืคืึธื˜ืึธืก ืื•ืŸ ื•ื•ื™ื“ื™ืืก, ืึธื“ืขืจ ื ืึธืจ ื”ืึธื‘ืŸ ืฉืคึผืึทืก. ืึธื‘ืขืจ ืึทื ืžืึทื ื“ ืœื•ืคื˜ ื•ื•ืขื”ื™ืงืœืขืก (UAVs) ื–ืขื ืขืŸ ื’ืขื ื™ืฆื˜ ืคึฟืึทืจ ืžืขืจ ื•ื•ื™ ื‘ืœื•ื™ื– ืคืึทืจื•ื•ื™ื™ึทืœื•ื ื’. ื–ื™ื™ ืึทืจื‘ืขื˜ืŸ ืื™ืŸ ืงื™ื ืึธ, ืœืขืจื ืขืŸ ื’ืœื™ื™ืฉืขืจื–, ืื•ืŸ ื–ืขื ืขืŸ ื’ืขื ื™ืฆื˜ ื“ื•ืจืš ื“ื™ ืžื™ืœื™ื˜ืขืจ ืื•ืŸ ืคืืจืฉื˜ื™ื™ืขืจืก ืคื•ืŸ ื“ื™ ืœืึทื ื“ื•ื•ื™ืจื˜ืฉืึทืคื˜ืœืขืš ืกืขืงื˜ืึธืจ.

ืื™ืŸ ื“ืขื ื˜ื•ื˜ืึธืจื™ืึทืœ ืžื™ืจ ื•ื•ืขืœืŸ ืงื•ืงืŸ ืื™ืŸ ืงืจื™ื™ื™ื˜ื™ื ื’ ืึท ืคึผืจืึธื’ืจืึทื ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืึท ื“ืจืึธื•ืŸ. ื ื™ืฆืŸ ืงื•ืœ ืงืึทืžืึทื ื“ื–. ื™ืึธ, ื“ืขืจ ืงืึธืคึผื˜ืขืจ ื•ื•ืขื˜ ื˜ืึธืŸ ื•ื•ืึธืก ืื™ืจ ื–ืึธื’ืŸ ืื™ื ืฆื• ื˜ืึธืŸ. ืื™ืŸ ื“ื™ ืกื•ืฃ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ืขืก ืื™ื– ืึท ืคืึทืจื˜ื™ืง ืคึผืจืึธื’ืจืึทื ืื•ืŸ ื•ื•ื™ื“ืขื ืคื•ืŸ UAV ืงืึธื ื˜ืจืึธืœ.

ืื™ื™ึทื–ืŸ

ืžื™ืจ ื“ืึทืจืคึฟืŸ ื“ื™ ืคืืœื’ืขื ื“ืข:

  • ืคึผืึทืคึผื•ื’ื™ื™ึท ARDrone 2.0;
  • ืขื˜ื”ืขืจื ืขื˜ ืงืึทื‘ืœืข;
  • ื’ื•ื˜ ืžื™ืงืจืึธืคืึธืŸ.

ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืื•ืŸ ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืื•ื™ืฃ ื•ื•ืขืจืงืกื˜ื™ื™ืฉืึทื ื– ืžื™ื˜ Windows/Mac/Ubuntu. ืคึผืขืจืกื ืึทืœื™, ืื™ืš ื’ืขืืจื‘ืขื˜ ืžื™ื˜ ืžืขืง ืื•ืŸ Ubuntu 18.04.

ะŸั€ะพะณั€ะฐะผะผะฝะพะต ะพะฑะตัะฟะตั‡ะตะฝะธะต

ืืจืืคืงืืคื™ืข ื“ื™ ืœืขืฆื˜ืข ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹Node.js ืคึฟื•ืŸ ื‘ืึทืึทืžื˜ืขืจ ืคึผืœืึทืฅ.

ืื•ื™ืš ื“ืืจืฃ ื“ื™ ืœืขืฆื˜ืข ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹Google ืงืจืึธื•ื.

ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื“ืขื ืงืึธืคึผื˜ืขืจ

ืœืึธืžื™ืจ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื•ื•ื™ Parrot ARDrone ืึทืจื‘ืขื˜. ื“ืขื ืงืึธืคึผื˜ืขืจ ื”ืื˜ ืคื™ืจ ืžืึธื˜ืึธืจืก.

ืžื™ืจ ืคึผืจืึธื’ืจืึทื ืงื•ืœ ืงืึธื ื˜ืจืึธืœ ืคื•ืŸ ื“ื™ ืงืึธืคึผื˜ืขืจ ื ื™ืฆืŸ Node.js ืื•ืŸ ARDrone

ืึทืคึผืึธื•ื–ื™ื ื’ ืžืึธื˜ืึธืจืก ืึทืจื‘ืขื˜ ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืจื™ื›ื˜ื•ื ื’. ืื™ื™ืŸ ืคึผืึธืจ ืจืึธื•ื˜ื™ื™ืฅ ืงืœืึทืงื•ื•ื™ื™ื–, ื“ื™ ืื ื“ืขืจืข ืงืึทื•ื ื˜ืขืจืงืœืึธืงื•ื•ื™ื™ื–. ื“ืขืจ ื“ืจืึธื•ืŸ ื‘ืื•ื•ืขื’ื˜ ื“ื•ืจืš ื˜ืฉืึทื ื’ื™ื ื’ ื“ื™ ื™ืฆืจ ื•ื•ื™ื ืงืœ ืงืึธืจืขื•ื• ืฆื• ื“ื™ ื™ื™ื‘ืขืจืคืœืึทืš ืคื•ืŸ ื“ืขืจ ืขืจื“, ื˜ืฉืึทื ื’ื™ื ื’ ื“ื™ ื’ื™ื›ืงื™ื™ึทื˜ ืคื•ืŸ ืจืึธื•ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ ืžืึธื˜ืึธืจืก ืื•ืŸ ืขื˜ืœืขื›ืข ืื ื“ืขืจืข ืžืึทื ื•ื•ื•ืขืจืึทื‘ืึทืœ ืžื•ื•ื•ืžืึทื ืฅ.

ืžื™ืจ ืคึผืจืึธื’ืจืึทื ืงื•ืœ ืงืึธื ื˜ืจืึธืœ ืคื•ืŸ ื“ื™ ืงืึธืคึผื˜ืขืจ ื ื™ืฆืŸ Node.js ืื•ืŸ ARDrone

ื•ื•ื™ ืžื™ืจ ืงืขื ืขืŸ ื–ืขืŸ ืื™ืŸ ื“ื™ ื“ื™ืึทื’ืจืึทืžืข ืื•ื™ื‘ืŸ, ื˜ืฉืึทื ื’ื™ื ื’ ืคืึทืจืฉื™ื“ืŸ ืคึผืึทืจืึทืžืขื˜ืขืจืก ืคื™ืจื˜ ืฆื• ืึท ืขื ื“ืขืจื•ื ื’ ืื™ืŸ ื“ืขืจ ืจื™ื›ื˜ื•ื ื’ ืคื•ืŸ ื‘ืึทื•ื•ืขื’ื•ื ื’ ืคื•ืŸ ื“ื™ ืงืึธืคึผื˜ืขืจ. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ื“ื™ืงืจื™ืกื™ื ื’ ืึธื“ืขืจ ื™ื ืงืจื™ืกื™ื ื’ ื“ื™ ืจืึธื•ื˜ื™ื™ืฉืึทืŸ ื’ื™ื›ืงื™ื™ึทื˜ ืคื•ืŸ ื“ื™ ืœื™ื ืงืก ืื•ืŸ ืจืขื›ื˜ ืจืึธื•ื˜ืขืจื– ืงืจื™ื™ื™ืฅ ืึท ื–ืขืžืœ. ื“ืึธืก ืึทืœืึทื•ื– ื“ื™ ื“ืจืึธื•ืŸ ืฆื• ืคืœื™ืขืŸ ืคืึธืจื•ื™ืก ืึธื“ืขืจ ืฆื•ืจื™ืง.

ื“ื•ืจืš ื˜ืฉืึทื ื’ื™ื ื’ ื“ื™ ื’ื™ื›ืงื™ื™ึทื˜ ืื•ืŸ ืจื™ื›ื˜ื•ื ื’ ืคื•ืŸ ื“ื™ ืžืึธื˜ืึธืจืก, ืžื™ืจ ืฉื˜ืขืœืŸ ื˜ื™ืœื˜ ืึทื ื’ืœืขืก ื•ื•ืึธืก ืœืึธื–ืŸ ื“ื™ ืงืึธืคึผื˜ืขืจ ืฆื• ืžืึทืš ืื™ืŸ ืื ื“ืขืจืข ืื™ื ืกื˜ืจื•ืงืฆื™ืขืก. ืึทืงื˜ื•ืึทืœืœื™, ืคึฟืึทืจ ื“ืขื ืงืจืึทื ื˜ ืคึผืจื•ื™ืขืงื˜ ืขืก ืื™ื– ื ื™ื˜ ื“ืึทืจืคึฟืŸ ืฆื• ืœืขืจื ืขืŸ ืึทืขืจืึธื“ื™ื ืึทืžื™ืงืก, ืื™ืจ ื ืึธืจ ื“ืึทืจืคึฟืŸ ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื“ื™ ื’ืจื•ื ื˜ ืคึผืจื™ื ืกืึทืคึผืึทืœื–.

ื•ื•ื™ Parrot ARDrone ืึทืจื‘ืขื˜

ื“ืขืจ ื“ืจืึธื•ืŸ ืื™ื– ืึท Wi-Fi ื”ืึธืฆืคึผืึธื˜. ืื™ืŸ ืกื“ืจ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืื•ืŸ ืฉื™ืงืŸ ืงืึทืžืึทื ื“ื– ืฆื• ื“ื™ ืงืึธืคึผื˜ืขืจ, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ื“ืขื ืคื•ื ื˜. ืขืก ื–ืขื ืขืŸ ืคื™ืœืข ืคืึทืจืฉื™ื“ืขื ืข ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ื•ื•ืึธืก ืœืึธื–ืŸ ืื™ืจ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืงื•ื•ืึทื“ืงืึธืคึผื˜ืขืจืก. ืึทืœืฅ ืงื•ืงื˜ ื•ื•ื™ ื“ืึธืก:

ืžื™ืจ ืคึผืจืึธื’ืจืึทื ืงื•ืœ ืงืึธื ื˜ืจืึธืœ ืคื•ืŸ ื“ื™ ืงืึธืคึผื˜ืขืจ ื ื™ืฆืŸ Node.js ืื•ืŸ ARDrone

ื•ื•ื™ ื‘ืึทืœื“ ื•ื•ื™ ื“ืขืจ ื“ืจืึธื•ืŸ ืื™ื– ืงืึธื ื ืขืงื˜ืขื“, ืขืคึฟืขื ืขืŸ ื“ื™ ื•ื•ืึธืงื–ืึทืœ ืื•ืŸ ื˜ืขืœื ืขื˜ 192.168.1.1 - ื“ืึธืก ืื™ื– ื“ื™ IP ืคื•ืŸ ื“ื™ ืงืึธืคึผื˜ืขืจ. ืคึฟืึทืจ ืœื™ื ื•ืงืก ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ Linux Busybox.

ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธืŸ ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจ

ืื•ื ื“ื–ืขืจ ืงืึธื“ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืฆืขื˜ื™ื™ืœื˜ ืื™ืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืžืึทื“ื–ืฉื•ืœื–:

  • ื‘ืึทื ื™ืฆืขืจ ืฆื•ื‘ื™ื ื“ ืžื™ื˜ ืจืขื“ืข ืึทืคึผื™ ืคึฟืึทืจ ืงื•ืœ ื“ื™ื˜ืขืงืฉืึทืŸ;
  • ืคื™ืœื˜ืขืจื™ื ื’ ืงืึทืžืึทื ื“ื– ืื•ืŸ ืงืึทืžืคึผืขืจื™ื ื’ ืžื™ื˜ ืึท ื ืึธืจืžืึทืœ;
  • ืฉื™ืงืŸ ืงืึทืžืึทื ื“ื– ืฆื• ื“ื™ ื“ืจืึธื•ืŸ;
  • ืœืขื‘ืŸ ื•ื•ื™ื“ืขื ื‘ืจืึธื“ืงืึทืกื˜.

ื“ื™ ืึทืคึผื™ ืึทืจื‘ืขื˜ ืึทื–ื•ื™ ืœืึทื ื’ ื•ื•ื™ ืขืก ืื™ื– ืึทืŸ ืื™ื ื˜ืขืจื ืขื˜ ืคึฟืึทืจื‘ื™ื ื“ื•ื ื’. ืฆื• ืขื ืฉื•ืจ ื“ืขื, ืžื™ืจ ืœื™ื™ื’ืŸ ืึทืŸ ืขื˜ื”ืขืจื ืขื˜ ืงืฉืจ.

ืขืก ืื™ื– ืฆื™ื™ื˜ ืฆื• ืฉืึทืคึฟืŸ ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ!

ืงืึธื“

ืขืจืฉื˜ืขืจ, ืœืึธื–ืŸ ืื•ื ื“ื– ืฉืึทืคึฟืŸ ืึท ื ื™ื™ึทืข ื˜ืขืงืข ืื•ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืฆื• ืขืก ืžื™ื˜ ื“ื™ ื•ื•ืึธืงื–ืึทืœ.

ื“ืขืจื ืึธืš ืžื™ืจ ืžืึทื›ืŸ ืึท ื ืึธื“ืข ืคึผืจื•ื™ืขืงื˜ ื ื™ืฆืŸ ื“ื™ ืงืึทืžืึทื ื“ื– ืื•ื ื˜ืŸ.

ืขืจืฉื˜ืขืจ, ืžื™ืจ ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื™ ืคืืจืœืื ื’ื˜ ื“ื™ืคึผืขื ื“ืึทื ืกื™ื–.

ื ืคึผื ื™ื ืกื˜ืึทืœื™ืจืŸโ€Š

ืžื™ืจ ื•ื•ืขืœืŸ ืฉื˜ื™ืฆืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืงืึทืžืึทื ื“ื–:

  • ืึทืจืึธืคึผื ืขืžืขืŸ;
  • ืœืึทื ื“ื™ื ื’;
  • ืึทืจื•ื™ืฃ - ื“ืขืจ ื“ืจืึธื•ืŸ ืจื™ื™ื–ืึทื– ืึท ื”ืึทืœื‘ ืžืขื˜ืขืจ ืื•ืŸ ื›ื™ื™ื•ื•ื–;
  • ืึทืจืึธืคึผ - ืคืืœืŸ ืึท ื”ืึทืœื‘ ืžืขื˜ืขืจ ืื•ืŸ ืคืจื™ื–ื™ื–;
  • ืฆื• ื“ื™ ืœื™ื ืงืก - ื’ื™ื™ื˜ ืึท ื”ืึทืœื‘ ืžืขื˜ืขืจ ืฆื• ืœื™ื ืงืก;
  • ืจืขื›ื˜ืก - ื’ื™ื™ื˜ ืึท ื”ืึทืœื‘ืŸ ืžืขื˜ืขืจ ืจืขื›ื˜ืก;
  • ืจืึธื•ื˜ื™ื™ืฉืึทืŸ - ืจืึธื•ื˜ื™ื™ืฅ ืงืœืึทืงื•ื•ื™ื™ื– 90 ื“ื™ื’ืจื™ื–;
  • ืคืึธืจื•ื™ืก - ื’ื™ื™ื˜ ืคืึธืจื•ื™ืก ืึท ื”ืึทืœื‘ ืžืขื˜ืขืจ;
  • ืฆื•ืจื™ืง - ื’ื™ื™ื˜ ืฆื•ืจื™ืง ืึท ื”ืึทืœื‘ ืžืขื˜ืขืจ;
  • ืึธืคึผืฉื˜ืขืœ.

ื“ืึธ ืื™ื– ื“ืขืจ ืงืึธื“ ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืึธื ื ืขืžืขืŸ ืงืึทืžืึทื ื“ื–, ืคื™ืœื˜ืขืจ ื–ื™ื™ ืื•ืŸ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ื“ืจืึธื•ืŸ.

const express = require('express');
const bodyparser = require('body-parser');
var arDrone = require('ar-drone');
const router = express.Router();
const app = express();
const commands = ['takeoff', 'land','up','down','goleft','goright','turn','goforward','gobackward','stop'];
 
var drone  = arDrone.createClient();
// disable emergency
drone.disableEmergency();
// express
app.use(bodyparser.json());
app.use(express.static(__dirname + '/public'));
 
router.get('/',(req,res) => {
    res.sendFile('index.html');
});
 
router.post('/command',(req,res) => {
    console.log('command recieved ', req.body);
    console.log('existing commands', commands);
    let command = req.body.command.replace(/ /g,'');
    if(commands.indexOf(command) !== -1) {
        switch(command.toUpperCase()) {
            case "TAKEOFF":
                console.log('taking off the drone');
                drone.takeoff();
            break;
            case "LAND":
                console.log('landing the drone');
                drone.land();
            break;
            case "UP":
                console.log('taking the drone up half meter');
                drone.up(0.2);
                setTimeout(() => {
                    drone.stop();
                    clearTimeout();
                },2000);
            break;
            case "DOWN":
                console.log('taking the drone down half meter');
                drone.down(0.2);
                setTimeout(() => {
                    drone.stop();
                    clearTimeout();
                },2000);
            break;
            case "GOLEFT":
                console.log('taking the drone left 1 meter');
                drone.left(0.1);
                setTimeout(() => {
                    drone.stop();
                    clearTimeout();
                },1000);
            break;
            case "GORIGHT":
                console.log('taking the drone right 1 meter');
                drone.right(0.1);
                setTimeout(() => {
                    drone.stop();
                    clearTimeout();
                },1000);
            break;
            case "TURN":
                console.log('turning the drone');
                drone.clockwise(0.4);
                setTimeout(() => {
                    drone.stop();
                    clearTimeout();
                },2000);
            break;
            case "GOFORWARD":
                console.log('moving the drone forward by 1 meter');
                drone.front(0.1);
                setTimeout(() => {
                    drone.stop();
                    clearTimeout();
                },2000);
            break;
            case "GOBACKWARD":
                console.log('moving the drone backward 1 meter');
                drone.back(0.1);
                setTimeout(() => {
                    drone.stop();
                    clearTimeout();
                },2000);
            break;
            case "STOP":
                drone.stop();
            break;
            default:
            break;    
        }
    }
    res.send('OK');
});
 
app.use('/',router);
 
app.listen(process.env.port || 3000);

ืื•ืŸ ื“ืึธ ืื™ื– ื“ื™ HTML ืื•ืŸ ื“ื–ืฉืึทื•ื•ืึทืกืงืจื™ืคึผื˜ ืงืึธื“ ื•ื•ืึธืก ืœื™ืกืึทื ื– ืฆื• ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ืื•ืŸ ืกืขื ื“ื– ืึท ื‘ืึทืคึฟืขืœ ืฆื• ื“ื™ ื ืึธื“ืข ืกืขืจื•ื•ืขืจ.

<!DOCTYPE html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>Voice Controlled Notes App</title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/shoelace-css/1.0.0-beta16/shoelace.css">
        <link rel="stylesheet" href="styles.css">
 
    </head>
    <body>
        <div class="container">
 
            <h1>Voice Controlled Drone</h1>
            <p class="page-description">A tiny app that allows you to control AR drone using voice</p>
 
            <h3 class="no-browser-support">Sorry, Your Browser Doesn't Support the Web Speech API. Try Opening This Demo In Google Chrome.</h3>
 
            <div class="app">
                <h3>Give the command</h3>
                <div class="input-single">
                    <textarea id="note-textarea" placeholder="Create a new note by typing or using voice recognition." rows="6"></textarea>
                </div>    
                <button id="start-record-btn" title="Start Recording">Start Recognition</button>
                <button id="pause-record-btn" title="Pause Recording">Pause Recognition</button>
                <p id="recording-instructions">Press the <strong>Start Recognition</strong> button and allow access.</p>
 
            </div>
 
        </div>
 
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
        <script src="script.js"></script>
 
    </body>
</html>

ืื•ืŸ ืื•ื™ืš ื“ื–ืฉืึทื•ื•ืึทืกืงืจื™ืคึผื˜ ืงืึธื“ ืฆื• ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ ืงื•ืœ ืงืึทืžืึทื ื“ื–, ืฉื™ืงืŸ ื–ื™ื™ ืฆื• ื“ื™ ื ืึธื“ืข ืกืขืจื•ื•ืขืจ.

try {
 var SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
 var recognition = new SpeechRecognition();
 }
 catch(e) {
 console.error(e);
 $('.no-browser-support').show();
 $('.app').hide();
 }
// other code, please refer GitHub source
recognition.onresult = function(event) {
// event is a SpeechRecognitionEvent object.
// It holds all the lines we have captured so far.
 // We only need the current one.
 var current = event.resultIndex;
// Get a transcript of what was said.
var transcript = event.results[current][0].transcript;
// send it to the backend
$.ajax({
 type: 'POST',
 url: '/command/',
 data: JSON.stringify({command: transcript}),
 success: function(data) { console.log(data) },
 contentType: "application/json",
 dataType: 'json'
 });
};

ืœืึธื ื˜ืฉื™ื ื’ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ

ื“ื™ ืคึผืจืึธื’ืจืึทื ืงืขื ืขืŸ ื–ื™ื™ืŸ ืœืึธื ื˜ืฉื˜ ื•ื•ื™ ื’ื™ื™ื˜ (ืขืก ืื™ื– ื•ื•ื™ื›ื˜ื™ืง ืฆื• ืžืึทื›ืŸ ื–ื™ื›ืขืจ ืึทื– ื“ื™ ืงืึธืคึผื˜ืขืจ ืื™ื– ืงืึธื ื ืขืงื˜ืขื“ ืฆื• Wi-Fi ืื•ืŸ ื“ื™ ืขื˜ื”ืขืจื ืขื˜ ืงืึทื‘ืœืข ืื™ื– ืงืึธื ื ืขืงื˜ืขื“ ืฆื• ื“ื™ ืงืึธืžืคึผื™ื•ื˜ืขืจ).

ืขืคึฟืŸ ืœืึธืงืึทืœื”ืึธืกื˜: 3000 ืื™ืŸ ื“ืขื ื‘ืœืขื˜ืขืจืขืจ ืื•ืŸ ื’ื™ื˜ ืึธื ื”ื™ื™ื‘ ื“ืขืจืงืขื ื•ื ื’.

ืžื™ืจ ืคึผืจืึธื’ืจืึทื ืงื•ืœ ืงืึธื ื˜ืจืึธืœ ืคื•ืŸ ื“ื™ ืงืึธืคึผื˜ืขืจ ื ื™ืฆืŸ Node.js ืื•ืŸ ARDrone

ืžื™ืจ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ื“ืจืึธื•ืŸ ืื•ืŸ ื–ืขื ืขืŸ ืฆื•ืคืจื™ื“ืŸ.

ื‘ืจืึธื“ืงืึทืกื˜ ื•ื•ื™ื“ืขื ืคึฟื•ืŸ ืึท ื“ืจืึธื•ืŸ

ืื™ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜, ืฉืึทืคึฟืŸ ืึท ื ื™ื™ึทืข ื˜ืขืงืข ืื•ืŸ ื ืึธื›ืžืึทื›ืŸ ื“ืขื ืงืึธื“ ื“ืึธืจื˜:

const http = require("http");
const drone = require("dronestream");
 
const server = http.createServer(function(req, res) {
 
require("fs").createReadStream(__dirname + "/public/video.html").pipe(res);
 });
 
drone.listen(server);
 
server.listen(4000);

ืื•ืŸ ื“ืึธ ืื™ื– ื“ื™ HTML ืงืึธื“, ืžื™ืจ ืฉื˜ืขืœืŸ ืขืก ืื™ืŸ ื“ืขืจ ืฆื™ื‘ื•ืจ ื˜ืขืงืข.

<!doctype html>
 <html>
 <head>
 <meta http-equiv="content-type" content="text/html; charset=utf-8">
 <title>Stream as module</title>
 <script src="/dronestream/nodecopter-client.js" type="text/javascript" charset="utf-8"></script>
 </head>
 <body>
 <h1 id="heading">Drone video stream</h1>
 <div id="droneStream" style="width: 640px; height: 360px"> </div>
 
<script type="text/javascript" charset="utf-8">
 
new NodecopterStream(document.getElementById("droneStream"));
 
</script>
 
</body>
</html>

ืงืึทื˜ืขืจ ืื•ืŸ ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• Localhost:8080 ืฆื• ื–ืขืŸ ื•ื•ื™ื“ืขื ืคึฟื•ืŸ ื“ื™ ืคืจืึธื ื˜ ืึทืคึผืึทืจืึทื˜.

ืžื™ืจ ืคึผืจืึธื’ืจืึทื ืงื•ืœ ืงืึธื ื˜ืจืึธืœ ืคื•ืŸ ื“ื™ ืงืึธืคึผื˜ืขืจ ื ื™ืฆืŸ Node.js ืื•ืŸ ARDrone

ื ื•ืฆื™ืง ื˜ืจื™ื ืงื’ืขืœื˜

  • ืคืœื™ืขืŸ ื“ืขื ื“ืจืึธื•ืŸ ื™ื ืขื•ื•ื™ื™ื ื™ืง.
  • ืฉื˜ืขื ื“ื™ืง ืฉื˜ืขืœืŸ ื“ื™ ืคึผืจืึทื˜ืขืงื˜ื™ื•ื• ื“ืขืงืŸ ืื•ื™ืฃ ื“ื™ื™ืŸ ื“ืจืึธื•ืŸ ืื™ื™ื“ืขืจ ืื™ืจ ื ืขืžืขืŸ ืึทื•ื•ืขืง.
  • ืงื•ืง ืื•ื™ื‘ ื“ื™ ื‘ืึทื˜ืึทืจื™ื™ืข ืื™ื– ื˜ืฉืึทืจื“ื–ืฉื™ื ื’.
  • ืื•ื™ื‘ ื“ื™ ื“ืจืึธื•ืŸ ื‘ื™ื›ื™ื™ื•ื•ื– ืžืึธื“ื ืข, ื”ืึทืœื˜ืŸ ืขืก ืึทืจืึธืคึผ ืื•ืŸ ืงืขืจ ืขืก ืื™ื‘ืขืจ. ื“ืขืจ ืงืึทืžืฃ ื•ื•ืขื˜ ืฉื˜ืขืœืŸ ื“ื™ ืงืึธืคึผื˜ืขืจ ืื™ืŸ ื ื•ื™ื˜ืคืึทืœ ืžืึธื“ืข ืื•ืŸ ื“ื™ ืจืึธื•ื˜ืขืจื– ื•ื•ืขื˜ ื”ืึทืœื˜ืŸ ืžื™ื“.

ื’ืจื™ื™ื˜ ืงืึธื“ ืื•ืŸ ื“ืขืžืึธ

ืœืขื‘ืŸ ื“ืขืžืึธ

ืึธืคึผืœืึธื“ื™ืจืŸ

ื’ืขื˜ืจืืคืŸ!

ืฉืจื™ื™ื‘ืŸ ืงืึธื“ ืื•ืŸ ื“ืึทืŸ ื•ื•ืึทื˜ืฉื™ื ื’ ื“ื™ ืžืึทืฉื™ืŸ ืึธื ื”ื™ื™ื‘ืŸ ืฆื• ืคืึธืœื’ืŸ ื•ื•ืขื˜ ื’ืขื‘ืŸ ืื™ืจ ืคืึทืจื’ืขื ื™ื’ืŸ! ืื™ืฆื˜ ืžื™ืจ ื”ืึธื‘ืŸ ืคื™ื’ื™ืขืจื“ ื•ื•ื™ ืฆื• ืœืขืจื ืขืŸ ืึท ื“ืจืึธื•ืŸ ืฆื• ื”ืขืจืŸ ืฆื• ืงื•ืœ ืงืึทืžืึทื ื“ื–. ืื™ืŸ ืคืึทืงื˜, ืขืก ื–ืขื ืขืŸ ืคื™ืœ ืžืขืจ ืคึผืึทืกืึทื‘ื™ืœืึทื˜ื™ื–: ื‘ืึทื ื™ืฆืขืจ ืคื™ื™ืฉืึทืœ ื“ืขืจืงืขื ื•ื ื’, ืึธื˜ืึทื ืึทืžืึทืก ืคืœื™ื™ืฅ, ื”ืึทื•ื•ื™ื™ึทืข ื“ืขืจืงืขื ื•ื ื’ ืื•ืŸ ืคื™ืœ ืžืขืจ.

ื•ื•ืึธืก ืงืขื ืขืŸ ืื™ืจ ืคึฟืึธืจืฉืœืึธื’ืŸ ืฆื• ืคึฟืึทืจื‘ืขืกืขืจืŸ ื“ื™ ืคึผืจืึธื’ืจืึทื?

Skillbox ืจืขืงืึทืžืขื ื“ื–:

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’