เช…เชฎเซ‡ Node.js เช…เชจเซ‡ ARDrone เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เซ‹เชชเซเชŸเชฐเชจเซเช‚ เชตเซ‰เช‡เชธ เช•เช‚เชŸเซเชฐเซ‹เชฒ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช•เชฐเซ€เช เช›เซ€เช

เช…เชฎเซ‡ Node.js เช…เชจเซ‡ ARDrone เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เซ‹เชชเซเชŸเชฐเชจเซเช‚ เชตเซ‰เช‡เชธ เช•เช‚เชŸเซเชฐเซ‹เชฒ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช•เชฐเซ€เช เช›เซ€เช

เช† เชŸเซเชฏเซเชŸเซ‹เชฐเซ€เชฏเชฒเชฎเชพเช‚ เช†เชชเชฃเซ‡ Node.js เช…เชจเซ‡ เชตเซ‡เชฌ เชธเซเชชเซ€เชš API เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชตเซ‹เชˆเชธ เช•เช‚เชŸเซเชฐเซ‹เชฒ เชธเชพเชฅเซ‡ เชกเซเชฐเซ‹เชจ เชฎเชพเชŸเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เชœเซ‹เชˆเชถเซเช‚. เช•เซ‹เชชเซเชŸเชฐ - เชชเซ‹เชชเชŸ เชเช†เชฐเชกเซเชฐเซ‹เชจ 2.0.

เช…เชฎเซ‡ เชฏเชพเชฆ เช•เชฐเชพเชตเซ€เช เช›เซ€เช: Habrเชจเชพ เชคเชฎเชพเชฎ เชตเชพเชšเช•เซ‹ เชฎเชพเชŸเซ‡ - Habr เชชเซเชฐเซ‹เชฎเซ‹ เช•เซ‹เชกเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เซ‹เชˆเชชเชฃ เชธเซเช•เชฟเชฒเชฌเซ‹เช•เซเชธ เช•เซ‹เชฐเซเชธเชฎเชพเช‚ เชจเซ‹เช‚เชงเชฃเซ€ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ 10 เชฐเซ‚เชฌเชฒ เชกเชฟเชธเซเช•เชพเช‰เชจเซเชŸ.

เชธเซเช•เชฟเชฒเชฌเซ‹เช•เซเชธ เชญเชฒเชพเชฎเชฃ เช•เชฐเซ‡ เช›เซ‡: เชชเซเชฐเซ‡เช•เซเชŸเชฟเช•เชฒ เช•เซ‹เชฐเซเชธ "เชฎเซ‹เชฌเชพเช‡เชฒ เชกเซ‡เชตเชฒเชชเชฐ เชชเซเชฐเซ‹".

เชชเชฐเชฟเชšเชฏ

เชกเซเชฐเซ‹เชจ เช…เชฆเซเชญเซเชค เช›เซ‡. เชฎเชจเซ‡ เช–เชฐเซ‡เช–เชฐ เชฎเชพเชฐเชพ เช•เซเชตเซ‹เชก เชธเชพเชฅเซ‡ เชฐเชฎเชตเชพเชฎเชพเช‚, เชซเซ‹เชŸเชพ เช…เชจเซ‡ เชตเชฟเชกเชฟเชฏเซ‹ เชฒเซ‡เชตเชพเชจเซ‹ เช…เชฅเชตเชพ เชซเช•เซเชค เช†เชจเช‚เชฆ เชฎเชพเชฃเชตเชพเชจเซ‹ เช†เชจเช‚เชฆ เช†เชตเซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เชฎเชพเชจเชตเชฐเชนเชฟเชค เชนเชตเชพเชˆ เชตเชพเชนเชจเซ‹ (เชฏเซเชเชตเซ€) เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฎเชพเชคเซเชฐ เชฎเชจเซ‹เชฐเช‚เชœเชจ เช•เชฐเชคเชพเช‚ เชตเชงเซ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡. เชคเซ‡เช“ เชธเชฟเชจเซ‡เชฎเชพเชฎเชพเช‚ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡, เช—เซเชฒเซ‡เชถเชฟเชฏเชฐเซเชธเชจเซ‹ เช…เชญเซเชฏเชพเชธ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชธเซˆเชจเซเชฏ เช…เชจเซ‡ เช•เซƒเชทเชฟ เช•เซเชทเซ‡เชคเซเชฐเชจเชพ เชชเซเชฐเชคเชฟเชจเชฟเชงเชฟเช“ เชฆเซเชตเชพเชฐเชพ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชฏ เช›เซ‡.

เช† เชŸเซเชฏเซเชŸเซ‹เชฐเซ€เชฏเชฒเชฎเชพเช‚ เช†เชชเชฃเซ‡ เชเช• เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เชœเซ‹เชˆเชถเซเช‚ เชœเซ‡ เชคเชฎเชจเซ‡ เชกเซเชฐเซ‹เชจเชจเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเชถเซ‡. เชตเซ‰เช‡เชธ เช†เชฆเซ‡เชถเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡. เชนเชพ, เชคเชฎเซ‡ เชคเซ‡เชจเซ‡ เชœเซ‡ เช•เชฐเชตเชพเชจเซเช‚ เช•เชนเซ‹ เช›เซ‹ เชคเซ‡ เช•เซ‹เชชเซเชŸเชฐ เช•เชฐเชถเซ‡. เชฒเซ‡เช–เชจเชพ เช…เช‚เชคเซ‡ เชฏเซเชเชตเซ€ เชจเชฟเชฏเช‚เชคเซเชฐเชฃเชจเซ‹ เชคเซˆเชฏเชพเชฐ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช…เชจเซ‡ เชตเชฟเชกเชฟเช“ เช›เซ‡.

เช†เชฏเชฐเซเชจ

เช…เชฎเชจเซ‡ เชจเซ€เชšเซ‡เชจเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡:

  • เชชเซ‹เชชเชŸ เชเช†เชฐเชกเซเชฐเซ‹เชจ 2.0;
  • เช‡เชฅเชฐเชจเซ‡เชŸ เช•เซ‡เชฌเชฒ;
  • เชธเชพเชฐเซ‹ เชฎเชพเช‡เช•เซเชฐเซ‹เชซเซ‹เชจ.

เชตเชฟเชจเซเชกเซ‹เช/เชฎเซ‡เช•/เช‰เชฌเซเชจเซเชŸเซ เชธเชพเชฅเซ‡ เชตเชฐเซเช•เชธเซเชŸเซ‡เชถเชจเซ‹ เชชเชฐ เชตเชฟเช•เชพเชธ เช…เชจเซ‡ เชธเช‚เชšเชพเชฒเชจ เชนเชพเชฅ เชงเชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เช…เช‚เช—เชค เชฐเซ€เชคเซ‡, เชฎเซ‡เช‚ Mac เช…เชจเซ‡ Ubuntu 18.04 เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเซเชฏเซเช‚.

เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ

Node.js เชจเซเช‚ เชจเชตเซ€เชจเชคเชฎ เชธเช‚เชธเซเช•เชฐเชฃ เช…เชนเซ€เช‚เชฅเซ€ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ‹ เชธเชคเซเชคเชพเชตเชพเชฐ เชธเชพเช‡เชŸ.

เชชเชฃ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡ Google Chrome เชจเซเช‚ เชจเชตเซ€เชจเชคเชฎ เชธเช‚เชธเซเช•เชฐเชฃ.

เช•เซ‹เชชเซเชŸเชฐ เชธเชฎเชœเชตเซเช‚

เชšเชพเชฒเซ‹ เชธเชฎเชœเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชคเซเชจ เช•เชฐเซ€เช เช•เซ‡ เชชเซ‹เชชเชŸ เชเช†เชฐเชกเซเชฐเซ‹เชจ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เช† เช•เซ‹เชชเซเชŸเชฐเชฎเชพเช‚ เชšเชพเชฐ เชฎเซ‹เชŸเชฐ เช›เซ‡.

เช…เชฎเซ‡ Node.js เช…เชจเซ‡ ARDrone เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เซ‹เชชเซเชŸเชฐเชจเซเช‚ เชตเซ‰เช‡เชธ เช•เช‚เชŸเซเชฐเซ‹เชฒ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช•เชฐเซ€เช เช›เซ€เช

เชตเชฟเชฐเซ‹เชงเซ€ เชฎเซ‹เชŸเชฐเซ‹ เช เชœ เชฆเชฟเชถเชพเชฎเชพเช‚ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เชเช• เชœเซ‹เชกเซ€ เช˜เชกเชฟเชฏเชพเชณเชจเซ€ เชฆเชฟเชถเชพเชฎเชพเช‚ เชซเชฐเซ‡ เช›เซ‡, เชฌเซ€เชœเซ€ เช˜เชกเชฟเชฏเชพเชณเชจเซ€ เชฆเชฟเชถเชพเชฎเชพเช‚. เชกเซเชฐเซ‹เชจ เชชเซƒเชฅเซเชตเซ€เชจเซ€ เชธเชชเชพเชŸเซ€เชจเซ€ เชธเชพเชชเซ‡เช•เซเชท เชเซ‹เช•เชจเชพ เช•เซ‹เชฃเชจเซ‡ เชฌเชฆเชฒเซ€เชจเซ‡, เชฎเซ‹เชŸเชฐเซเชธเชจเชพ เชชเชฐเชฟเชญเซเชฐเชฎเชฃเชจเซ€ เช—เชคเชฟเชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐ เช•เชฐเซ€เชจเซ‡ เช…เชจเซ‡ เช…เชจเซเชฏ เช˜เชฃเซ€ เชšเชพเชฒเชพเช•เซ€ เช•เชฐเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเซ€ เชนเชฟเชฒเชšเชพเชฒ เช•เชฐเซ€เชจเซ‡ เช†เช—เชณ เชตเชงเซ‡ เช›เซ‡.

เช…เชฎเซ‡ Node.js เช…เชจเซ‡ ARDrone เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เซ‹เชชเซเชŸเชฐเชจเซเช‚ เชตเซ‰เช‡เชธ เช•เช‚เชŸเซเชฐเซ‹เชฒ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช•เชฐเซ€เช เช›เซ€เช

เชœเซ‡เชฎ เช†เชชเชฃเซ‡ เช‰เชชเชฐเชจเชพ เชšเชฟเชคเซเชฐเชฎเชพเช‚ เชœเซ‹เชˆ เชถเช•เซ€เช เช›เซ€เช, เชตเชฟเชตเชฟเชง เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชฌเชฆเชฒเชตเชพเชฅเซ€ เช•เซ‹เชชเซเชŸเชฐเชจเซ€ เชนเชฟเชฒเชšเชพเชฒเชจเซ€ เชฆเชฟเชถเชพเชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐ เชฅเชพเชฏ เช›เซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชกเชพเชฌเชพ เช…เชจเซ‡ เชœเชฎเชฃเชพ เชฐเซ‹เชŸเชฐเซเชธเชจเซ€ เชชเชฐเชฟเชญเซเชฐเชฎเชฃ เช—เชคเชฟเชฎเชพเช‚ เช˜เชŸเชพเชกเซ‹ เช…เชฅเชตเชพ เชตเชงเชพเชฐเซ‹ เช เชฐเซ‹เชฒ เชฌเชจเชพเชตเซ‡ เช›เซ‡. เช†เชจเชพเชฅเซ€ เชกเซเชฐเซ‹เชจ เช†เช—เชณ เช•เซ‡ เชชเชพเช›เชณ เช‰เชกเซ€ เชถเช•เซ‡ เช›เซ‡.

เชฎเซ‹เชŸเชฐเซเชธเชจเซ€ เช—เชคเชฟ เช…เชจเซ‡ เชฆเชฟเชถเชพ เชฌเชฆเชฒเซ€เชจเซ‡, เช…เชฎเซ‡ เชŸเชฟเชฒเซเชŸ เชเช‚เช—เชฒ เชธเซ‡เชŸ เช•เชฐเซ€เช เช›เซ€เช เชœเซ‡ เช•เซ‹เชชเซเชŸเชฐเชจเซ‡ เช…เชจเซเชฏ เชฆเชฟเชถเชพเชฎเชพเช‚ เช–เชธเซ‡เชกเชตเชพ เชฆเซ‡ เช›เซ‡. เชตเชพเชธเซเชคเชตเชฎเชพเช‚, เชตเชฐเซเชคเชฎเชพเชจ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เชเชฐเซ‹เชกเชพเชฏเชจเซ‡เชฎเชฟเช•เซเชธเชจเซ‹ เช…เชญเซเชฏเชพเชธ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€, เชคเชฎเชพเชฐเซ‡ เชซเช•เซเชค เชฎเซ‚เชณเชญเซ‚เชค เชธเชฟเชฆเซเชงเชพเช‚เชคเซ‹เชจเซ‡ เชธเชฎเชœเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เชชเซ‹เชชเชŸ เชเช†เชฐเชกเซเชฐเซ‹เชจ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡

เชกเซเชฐเซ‹เชจ เชเช• Wi-Fi เชนเซ‹เชŸเชธเซเชชเซ‹เชŸ เช›เซ‡. เช•เซ‹เชชเซเชŸเชฐเชจเซ‡ เช†เชฆเซ‡เชถเซ‹ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพ เช…เชจเซ‡ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เช† เชฌเชฟเช‚เชฆเซเชฅเซ€ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชคเซเชฏเชพเช‚ เช˜เชฃเซ€ เชตเชฟเชตเชฟเชง เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹ เช›เซ‡ เชœเซ‡ เชคเชฎเชจเซ‡ เช•เซเชตเชพเชกเช•เซ‹เชชเซเชŸเชฐเซเชธเชจเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เชคเซ‡ เชฌเชงเซเช‚ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡:

เช…เชฎเซ‡ Node.js เช…เชจเซ‡ ARDrone เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เซ‹เชชเซเชŸเชฐเชจเซเช‚ เชตเซ‰เช‡เชธ เช•เช‚เชŸเซเชฐเซ‹เชฒ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช•เชฐเซ€เช เช›เซ€เช

เชกเซเชฐเซ‹เชจ เช•เชจเซ‡เช•เซเชŸ เชฅเชคเชพเช‚ เชœ เชŸเชฐเซเชฎเชฟเชจเชฒ เช…เชจเซ‡ เชŸเซ‡เชฒเชจเซ‡เชŸ 192.168.1.1 เช–เซ‹เชฒเซ‹ - เช† เช•เซ‹เชชเซเชŸเชฐเชจเซ‹ IP เช›เซ‡. Linux เชฎเชพเชŸเซ‡ เชคเชฎเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ Linux Busybox.

เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐ

เช…เชฎเชพเชฐเชพ เช•เซ‹เชกเชจเซ‡ เชจเซ€เชšเซ‡เชจเชพ เชฎเซ‹เชกเซเชฏเซเชฒเชฎเชพเช‚ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡:

  • เชตเซ‰เช‡เชธ เชกเชฟเชŸเซ‡เช•เซเชถเชจ เชฎเชพเชŸเซ‡ เชธเซเชชเซ€เชš API เชธเชพเชฅเซ‡ เชฏเซเชเชฐ เช‡เชจเซเชŸเชฐเชซเซ‡เชธ;
  • เชซเชฟเชฒเซเชŸเชฐเชฟเช‚เช— เช†เชฆเซ‡เชถเซ‹ เช…เชจเซ‡ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เชธเชพเชฅเซ‡ เชธเชฐเช–เชพเชฎเชฃเซ€;
  • เชกเซเชฐเซ‹เชจเชจเซ‡ เช†เชฆเซ‡เชถเซ‹ เชฎเซ‹เช•เชฒเชตเชพ;
  • เชœเซ€เชตเช‚เชค เชตเชฟเชกเชฟเชฏเซ‹ เชชเซเชฐเชธเชพเชฐเชฃ.

เชœเซเชฏเชพเช‚ เชธเซเชงเซ€ เช‡เชจเซเชŸเชฐเชจเซ‡เชŸ เช•เชจเซ‡เช•เซเชถเชจ เชนเซ‹เชฏ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€ API เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เช†เชจเซ€ เช–เชพเชคเชฐเซ€ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เช‡เชฅเชฐเชจเซ‡เชŸ เช•เชจเซ‡เช•เซเชถเชจ เช‰เชฎเซ‡เชฐเซ€เช เช›เซ€เช.

เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพเชจเซ‹ เชธเชฎเชฏ เช›เซ‡!

เช•เซ‹เชก

เชชเซเชฐเชฅเชฎ, เชšเชพเชฒเซ‹ เชเช• เชจเชตเซเช‚ เชซเซ‹เชฒเซเชกเชฐ เชฌเชจเชพเชตเซ€เช เช…เชจเซ‡ เชŸเชฐเซเชฎเชฟเชจเชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชคเซ‡เชจเชพ เชชเชฐ เชธเซเชตเชฟเชš เช•เชฐเซ€เช.

เชชเช›เซ€ เช†เชชเชฃเซ‡ เชจเซ€เชšเซ‡เชจเชพ เช†เชฆเซ‡เชถเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชจเซ‹เชก เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเซ€เช เช›เซ€เช.

เชชเซเชฐเชฅเชฎ, เช…เชฎเซ‡ เชœเชฐเซ‚เชฐเซ€ เชจเชฟเชฐเซเชญเชฐเชคเชพ เชธเซเชฅเชพเชชเชฟเชค เช•เชฐเซ€เช เช›เซ€เช.

npm เชธเซเชฅเชพเชชเชฟเชค เช•เชฐเซ‹โ€Š

เช…เชฎเซ‡ เชจเซ€เชšเซ‡เชจเชพ เช†เชฆเซ‡เชถเซ‹เชจเซ‡ เชธเชฎเชฐเซเชฅเชจ เช†เชชเซ€เชถเซเช‚:

  • เชŸเซ‡เช•เช“เชซ
  • เช‰เชคเชฐเชพเชฃ
  • เช‰เชชเชฐ - เชกเซเชฐเซ‹เชจ เช…เชกเชงเซ‹ เชฎเซ€เชŸเชฐ เชตเชงเซ‡ เช›เซ‡ เช…เชจเซ‡ เชซเชฐเซ‡ เช›เซ‡;
  • เชจเซ€เชšเซ‡ - เช…เชกเชงเชพ เชฎเซ€เชŸเชฐ เชจเซ€เชšเซ‡ เชชเชกเซ‡ เช›เซ‡ เช…เชจเซ‡ เชฅเซ€เชœเซ€ เชœเชพเชฏ เช›เซ‡;
  • เชกเชพเชฌเซ€ เชคเชฐเชซ - เช…เชกเชงเซ‹ เชฎเซ€เชŸเชฐ เชกเชพเชฌเซ€ เชคเชฐเชซ เชœเชพเชฏ เช›เซ‡;
  • เชœเชฎเชฃเซ€ เชคเชฐเชซ - เชœเชฎเชฃเซ€ เชคเชฐเชซ เช…เชกเชงเซ‹ เชฎเซ€เชŸเชฐ เชœเชพเชฏ เช›เซ‡;
  • เชชเชฐเชฟเชญเซเชฐเชฎเชฃ - เช˜เชกเชฟเชฏเชพเชณเชจเซ€ เชฆเชฟเชถเชพเชฎเชพเช‚ 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 เช…เชจเซ‡ JavaScript เช•เซ‹เชก เช›เซ‡ เชœเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเซ‡ เชธเชพเช‚เชญเชณเซ‡ เช›เซ‡ เช…เชจเซ‡ เชจเซ‹เชก เชธเชฐเซเชตเชฐเชจเซ‡ เช†เชฆเซ‡เชถ เชฎเซ‹เช•เชฒเซ‡ เช›เซ‡.

<!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>

เช†เช—เชณเชจเชพ เช•เซ‡เชฎเซ‡เชฐเชพเชฎเชพเช‚เชฅเซ€ เชตเชฟเชกเชฟเชฏเซ‹ เชœเซ‹เชตเชพ เชฎเชพเชŸเซ‡ เชฒเซ‹เช•เชฒเชนเซ‹เชธเซเชŸ:8080 เชฒเซ‹เช‚เชš เช•เชฐเซ‹ เช…เชจเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซ‹.

เช…เชฎเซ‡ Node.js เช…เชจเซ‡ ARDrone เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เซ‹เชชเซเชŸเชฐเชจเซเช‚ เชตเซ‰เช‡เชธ เช•เช‚เชŸเซเชฐเซ‹เชฒ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช•เชฐเซ€เช เช›เซ€เช

เช‰เชชเชฏเซ‹เช—เซ€ เชŸเชฟเชชเซเชธ

  • เช† เชกเซเชฐเซ‹เชจเชจเซ‡ เช˜เชฐเชจเซ€ เช…เช‚เชฆเชฐ เช‰เชกเชพเชกเซ‹.
  • เชŸเซ‡เช• เช“เชซ เช•เชฐเชคเชพ เชชเชนเซ‡เชฒเชพ เชนเช‚เชฎเซ‡เชถเชพ เชคเชฎเชพเชฐเชพ เชกเซเชฐเซ‹เชจ เชชเชฐ เชฐเช•เซเชทเชฃเชพเชคเซเชฎเช• เช•เชตเชฐ เชฒเช—เชพเชตเซ‹.
  • เชฌเซ‡เชŸเชฐเซ€ เชšเชพเชฐเซเชœ เชฅเชฏเซ‡เชฒ เช›เซ‡ เช•เซ‡ เช•เซ‡เชฎ เชคเซ‡ เชคเชชเชพเชธเซ‹.
  • เชœเซ‹ เชกเซเชฐเซ‹เชจ เชตเชฟเชšเชฟเชคเซเชฐ เชฐเซ€เชคเซ‡ เชตเชฐเซเชคเซ‡ เช›เซ‡, เชคเซ‹ เชคเซ‡เชจเซ‡ เชชเช•เชกเซ€ เชฐเชพเช–เซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชซเซเชฒเชฟเชช เช•เชฐเซ‹. เช† เช•เซเชฐเชฟเชฏเชพ เช•เซ‹เชชเซเชŸเชฐเชจเซ‡ เช‡เชฎเชฐเชœเชจเซเชธเซ€ เชฎเซ‹เชกเชฎเชพเช‚ เชฎเซ‚เช•เชถเซ‡ เช…เชจเซ‡ เชฐเซ‹เชŸเชฐ เชคเชฐเชค เชœ เชฌเช‚เชง เชฅเชˆ เชœเชถเซ‡.

เชคเซˆเชฏเชพเชฐ เช•เซ‹เชก เช…เชจเซ‡ เชกเซ‡เชฎเซ‹

เชฒเชพเชˆเชต เชกเซ‡เชฎเซ‹

เชกเชพเช‰เชจเชฒเซ‹เชก

เชฅเชฏเซเช‚!

เช•เซ‹เชก เชฒเช–เชตเชพ เช…เชจเซ‡ เชชเช›เซ€ เชฎเชถเซ€เชจเชจเซ‡ เชชเชพเชณเชตเชพ เชฒเชพเช—เซ‡ เช›เซ‡ เชคเซ‡ เชœเซ‹เชตเซเช‚ เชคเชฎเชจเซ‡ เช†เชจเช‚เชฆ เช†เชชเชถเซ‡! เชนเชตเซ‡ เช…เชฎเซ‡ เชถเซ‹เชงเซ€ เช•เชพเชขเซเชฏเซเช‚ เช›เซ‡ เช•เซ‡ เชกเซเชฐเซ‹เชจเชจเซ‡ เชตเซ‰เช‡เชธ เช•เชฎเชพเชจเซเชก เชธเชพเช‚เชญเชณเชตเชพเชจเซเช‚ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชถเซ€เช–เชตเชตเซเช‚. เชนเช•เซ€เช•เชคเชฎเชพเช‚, เชคเซเชฏเชพเช‚ เช˜เชฃเซ€ เชตเชงเซ เชถเช•เซเชฏเชคเชพเช“ เช›เซ‡: เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชšเชนเซ‡เชฐเชพเชจเซ€ เช“เชณเช–, เชธเซเชตเชพเชฏเชคเซเชค เชซเซเชฒเชพเช‡เชŸเซเชธ, เชนเชพเชตเชญเชพเชต เช“เชณเช– เช…เชจเซ‡ เช˜เชฃเซเช‚ เชฌเชงเซเช‚.

เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเซ‡ เชธเซเชงเชพเชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเชฎเซ‡ เชถเซเช‚ เชธเซ‚เชšเชจ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹?

เชธเซเช•เชฟเชฒเชฌเซ‹เช•เซเชธ เชญเชฒเชพเชฎเชฃ เช•เชฐเซ‡ เช›เซ‡:

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹