
āĻāĻ āĻāĻŋāĻāĻā§āϰāĻŋāϝāĻŧāĻžāϞ⧠āĻāĻŽāϰāĻž Node.js āĻāĻŦāĻ āĻāϝāĻŧā§āĻŦ āϏā§āĻĒāĻŋāĻ API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāϝāĻŧā§āϏ āĻāύā§āĻā§āϰā§āϞ āϏāĻš āĻāĻāĻāĻŋ āĻĄā§āϰā§āύā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āϤā§āϰāĻŋāϰ āĻŦāĻŋāώāϝāĻŧā§ āĻĻā§āĻāĻŦāĨ¤ āĻāĻĒā§āĻāĻžāϰ - āĻĒā§āϝāĻžāϰāĻ āĻāĻāϰāĻĄā§āϰā§āύ 2.0āĨ¤
āĻāĻŽāϰāĻž āĻŽāύ⧠āĻāϰāĻŋāϝāĻŧā§ āĻĻāĻŋāĻā§āĻāĻŋ: "Habr"-āĻāϰ āϏāĻāϞ āĻĒāĻžāĻ āĻāĻĻā§āϰ āĻāύā§āϝ - "Habr" āĻĒā§āϰāĻāĻžāϰāĻŽā§āϞāĻ āĻā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϝā§āĻā§āύ⧠Skillbox āĻā§āϰā§āϏ⧠āύāĻĨāĻŋāĻā§āĻā§āϤ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ 10 āϰā§āĻŦā§āϞ āĻāĻžāĻĄāĻŧāĨ¤
Skillbox āϏā§āĻĒāĻžāϰāĻŋāĻļ āĻāϰā§: āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ āĻā§āϰā§āϏ .
āĻā§āĻŽāĻŋāĻāĻž
āĻĄā§āϰā§āύ āĻāĻļā§āĻāϰā§āϝāĻāύāĻāĨ¤ āĻāĻŽāĻŋ āϏāϤā§āϝāĻŋāĻ āĻāĻŽāĻžāϰ āĻā§āϝāĻŧāĻžāĻĄā§āϰ āϏāĻžāĻĨā§ āĻā§āϞāϤā§, āĻĢāĻā§ āĻāĻŦāĻ āĻāĻŋāĻĄāĻŋāĻ āϤā§āϞāϤ⧠āĻŦāĻž āĻŽāĻāĻž āĻāϰāϤ⧠āĻāĻĒāĻā§āĻ āĻāϰāĻŋāĨ¤ āĻāĻŋāύā§āϤ⧠āĻŽāύā§āώā§āϝāĻŦāĻŋāĻšā§āύ āĻŦāĻžāϝāĻŧāĻŦā§āϝāĻŧ āϝāĻžāύ (āĻāĻāĻāĻāĻŋ) āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻŦāĻŋāύā§āĻĻāύā§āϰ āĻāύā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āϤāĻžāϰāĻž āϏāĻŋāύā§āĻŽāĻžāϝāĻŧ āĻāĻžāĻ āĻāϰā§, āĻšāĻŋāĻŽāĻŦāĻžāĻš āĻ āϧā§āϝāϝāĻŧāύ āĻāϰ⧠āĻāĻŦāĻ āϏā§āύāĻžāĻŦāĻžāĻšāĻŋāύ⧠āĻāĻŦāĻ āĻā§āώāĻŋ āĻāĻžāϤā§āϰ āĻĒā§āϰāϤāĻŋāύāĻŋāϧāĻŋāĻĻā§āϰ āĻĻā§āĻŦāĻžāϰāĻž āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧāĨ¤
āĻāĻ āĻāĻŋāĻāĻā§āϰāĻŋāϝāĻŧāĻžāϞ⧠āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĻā§āĻāĻŦ āϝāĻž āĻāĻĒāύāĻžāĻā§ āĻāĻāĻāĻŋ āĻĄā§āϰā§āύ āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖ āĻāϰāϤ⧠āĻĻā§āĻŦā§āĨ¤ āĻāϝāĻŧā§āϏ āĻāĻŽāĻžāύā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤ āĻšā§āϝāĻžāĻ, āĻāĻĒā§āĻāĻžāϰ āĻāĻĒāύāĻŋ āϝāĻž āĻāϰāϤ⧠āĻŦāϞāĻŦā§āύ āϤāĻž āĻāϰāĻŦā§āĨ¤ āύāĻŋāĻŦāύā§āϧā§āϰ āĻļā§āώ⧠āĻāĻāĻāĻŋ āϰā§āĻĄāĻŋāĻŽā§āĻĄ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āĻāĻŦāĻ āĻāĻāĻāĻāĻŋ āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖā§āϰ āĻāĻŋāĻĄāĻŋāĻ āϰāϝāĻŧā§āĻā§āĨ¤
āϞā§āĻšāĻž
āĻāĻŽāĻžāĻĻā§āϰ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻĒā§āϰāϝāĻŧā§āĻāύ:
- āϤā§āϤāĻž ARDrone 2.0;
- āĻāĻĨāĻžāϰāύā§āĻ āϤāĻžāϰā§āϰ;
- āĻāĻžāϞ āĻŽāĻžāĻāĻā§āϰā§āĻĢā§āύāĨ¤
āĻāϝāĻŧāĻžāϰā§āĻāϏā§āĻā§āĻļāύāĻā§āϞāĻŋāϤ⧠āĻāύā§āύāϝāĻŧāύ āĻ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž āĻĒāϰāĻŋāĻāĻžāϞāĻŋāϤ āĻšāĻŦā§ Windows/āĻŽā§āϝāĻžāĻ/UbuntuāĻŦā§āϝāĻā§āϤāĻŋāĻāϤāĻāĻžāĻŦā§, āĻāĻŽāĻŋ āĻŽā§āϝāĻžāĻ āύāĻŋāϝāĻŧā§ āĻāĻžāĻ āĻāϰā§āĻāĻŋ āĻāĻŦāĻ Ubuntu 18.04.
āϏāĻĢā§āĻāĻāϝāĻŧā§āϝāĻžāϰ
āĻĨā§āĻā§ Node.js āĻāϰ āϏāϰā§āĻŦāĻļā§āώ āϏāĻāϏā§āĻāϰāĻŖ āĻĄāĻžāĻāύāϞā§āĻĄ āĻāϰā§āύ .
āĻāĻāĻžāĻĄāĻŧāĻžāĻ āĻĒā§āϰāϝāĻŧā§āĻāύ .
āĻāĻĒā§āĻāĻžāϰ āĻŦā§āĻāĻž
āĻĒā§āϝāĻžāϰāĻ āĻāĻāϰāĻĄā§āϰā§āύ āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰ⧠āϤāĻž āĻŦā§āĻāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰā§āύāĨ¤ āĻāĻ āĻāĻĒā§āĻāĻžāϰ⧠āĻāĻžāϰāĻāĻŋ āĻŽā§āĻāϰ āĻāĻā§āĨ¤

āĻŦāĻŋāϰā§āϧ⧠āĻŽā§āĻāϰ āĻāĻāĻ āĻĻāĻŋāĻā§ āĻāĻžāĻ āĻāϰā§āĨ¤ āĻāĻāĻāĻŋ āĻā§āĻĄāĻŧāĻž āĻāĻĄāĻŧāĻŋāϰ āĻāĻžāĻāĻāĻžāϰ āĻĻāĻŋāĻā§ āĻā§āϰā§, āĻ
āύā§āϝāĻāĻŋ āĻāĻĄāĻŧāĻŋāϰ āĻāĻžāĻāĻāĻžāϰ āĻŦāĻŋāĻĒāϰā§āϤ āĻĻāĻŋāĻā§āĨ¤ āĻĄā§āϰā§āύāĻāĻŋ āĻĒā§āĻĨāĻŋāĻŦā§āϰ āĻĒā§āώā§āĻ ā§āϰ āϏāĻžāĻĒā§āĻā§āώ⧠āĻĒā§āϰāĻŦāĻŖāϤāĻžāϰ āĻā§āĻŖ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰā§, āĻŽā§āĻāϰāĻā§āϞāĻŋāϰ āĻā§āϰā§āĻŖāύā§āϰ āĻāϤāĻŋ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰ⧠āĻāĻŦāĻ āĻ
āύā§āϝāĻžāύā§āϝ āĻŦā§āĻļ āĻāĻŋāĻā§ āĻāĻžāϞāĻāϞāύāϝā§āĻā§āϝ āĻāύā§āĻĻā§āϞāύ āĻāϰā§āĨ¤

āĻāĻŽāϰāĻž āĻāĻĒāϰā§āϰ āĻĄāĻžāϝāĻŧāĻžāĻā§āϰāĻžāĻŽā§ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻā§āĻāĻŋ, āĻŦāĻŋāĻāĻŋāύā§āύ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāϞ⧠āĻāĻĒā§āĻāĻžāϰā§āϰ āĻāϞāĻžāĻāϞā§āϰ āĻĻāĻŋāĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻšāϝāĻŧāĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻŦāĻžāĻŽ āĻāĻŦāĻ āĻĄāĻžāύ āϰāĻāĻžāϰāĻā§āϞāĻŋāϰ āĻā§āϰā§āĻŖāύ āĻāϤāĻŋ āĻšā§āϰāĻžāϏ āĻŦāĻž āĻŦā§āĻĻā§āϧāĻŋ āĻāĻāĻāĻŋ āϰā§āϞ āϤā§āϰāĻŋ āĻāϰā§āĨ¤ āĻāĻāĻŋ āĻĄā§āϰā§āύāĻāĻŋāĻā§ āϏāĻžāĻŽāύ⧠āĻŦāĻž āĻĒāĻŋāĻāύ⧠āĻāĻĄāĻŧāϤ⧠āĻĻā§āϝāĻŧāĨ¤
āĻŽā§āĻāϰāĻā§āϞāĻŋāϰ āĻāϤāĻŋ āĻāĻŦāĻ āĻĻāĻŋāĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰā§, āĻāĻŽāϰāĻž āĻāĻžāϤ āĻā§āĻŖāĻā§āϞāĻŋ āϏā§āĻ āĻāϰāĻŋ āϝāĻž āĻāĻĒā§āĻāĻžāϰāĻāĻŋāĻā§ āĻ āύā§āϝ āĻĻāĻŋāĻā§ āϝā§āϤ⧠āĻĻā§āϝāĻŧāĨ¤ āĻĒā§āϰāĻā§āϤāĻĒāĻā§āώā§, āĻŦāϰā§āϤāĻŽāĻžāύ āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āĻāύā§āϝ āĻ ā§āϝāĻžāϰā§āĻĄāĻžāĻāύāĻžāĻŽāĻŋāĻā§āϏ āĻ āϧā§āϝāϝāĻŧāύ āĻāϰāĻžāϰ āĻĻāϰāĻāĻžāϰ āύā§āĻ, āĻāĻĒāύāĻžāĻā§ āĻā§āĻŦāϞ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ āύā§āϤāĻŋāĻā§āϞāĻŋ āĻŦā§āĻāϤ⧠āĻšāĻŦā§āĨ¤
āĻĒā§āϝāĻžāϰāĻ āĻāĻāϰāĻĄā§āϰā§āύ āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§
āĻĄā§āϰā§āύ āĻāĻāĻāĻŋ Wi-Fi āĻšāĻāϏā§āĻĒāĻāĨ¤ āĻāĻĒā§āĻāĻžāϰ⧠āĻāĻŽāĻžāύā§āĻĄ āĻā§āϰāĻšāĻŖ āĻāĻŦāĻ āĻĒāĻžāĻ āĻžāϤā§, āĻāĻĒāύāĻžāĻā§ āĻāĻ āĻĒāϝāĻŧā§āύā§āĻā§ āϏāĻāϝā§āĻ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ āĻ āύā§āĻāĻā§āϞāĻŋ āĻŦāĻŋāĻāĻŋāύā§āύ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϰāϝāĻŧā§āĻā§ āϝāĻž āĻāĻĒāύāĻžāĻā§ āĻā§āϝāĻŧāĻžāĻĄāĻāĻĒā§āĻāĻžāϰ āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖ āĻāϰāϤ⧠āĻĻā§āϝāĻŧāĨ¤ āĻāĻāĻŋ āϏāĻŦ āĻāĻ āĻŽāϤ āĻāĻŋāĻā§ āĻĻā§āĻāĻžāϝāĻŧ:

āĻĄā§āϰā§āύāĻāĻŋ āϏāĻāϝā§āĻā§āϤ āĻšāϝāĻŧā§ āĻā§āϞā§, āĻāĻžāϰā§āĻŽāĻŋāύāĻžāϞ āĻā§āϞā§āύ āĻāĻŦāĻ 192.168.1.1-āĻ āĻā§āϞāύā§āĻ āĻāϰā§āύ - āĻāĻāĻŋ āĻāĻĒā§āĻāĻžāϰāĻāĻŋāϰ āĻāĻāĻĒāĻŋāĨ¤ Linux āĻāĻĒāύāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ .
āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻāϰā§āĻāĻŋāĻā§āĻāĻāĻžāϰ
āĻāĻŽāĻžāĻĻā§āϰ āĻā§āĻĄ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻŽāĻĄāĻŋāĻāϞ āĻŦāĻŋāĻāĻā§āϤ āĻāϰāĻž āĻšāĻŦā§:
- āĻāϝāĻŧā§āϏ āϏāύāĻžāĻā§āϤāĻāϰāĻŖā§āϰ āĻāύā§āϝ āϏā§āĻĒāĻŋāĻ 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);āĻāĻŦāĻ āĻāĻāĻžāύ⧠āĻāĻāĻāĻāĻŋāĻāĻŽāĻāϞ āĻāĻŦāĻ āĻāĻžāĻāĻžāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻā§āĻĄ āϰāϝāĻŧā§āĻā§ āϝāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻāĻĨāĻž āĻļā§āύ⧠āĻāĻŦāĻ āύā§āĻĄ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻāĻāĻāĻŋ āĻāĻŽāĻžāύā§āĻĄ āĻĒāĻžāĻ āĻžāϝāĻŧāĨ¤
<!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" data-gt-translate-attributes='["title"]' title="Start Recording">Start Recognition</button>
<button id="pause-record-btn" data-gt-translate-attributes='["title"]' 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 āĻāϰ āϏāĻžāĻĨā§ āϏāĻāϝā§āĻā§āϤ āĻāĻŦāĻ āĻāĻĨāĻžāϰāύā§āĻ āĻā§āĻŦāϞāĻāĻŋ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāϰā§āϰ āϏāĻžāĻĨā§ āϏāĻāϝā§āĻā§āϤ āϰāϝāĻŧā§āĻā§)āĨ¤
āĻŦā§āϰāĻžāĻāĻāĻžāϰ⧠localhost:3000 āĻā§āϞā§āύ āĻāĻŦāĻ āϏā§āĻāĻžāϰā§āĻ āϰāĻŋāĻāĻāύāĻŋāĻļāύ āĻā§āϞāĻŋāĻ āĻāϰā§āύāĨ¤

āĻāĻŽāϰāĻž āĻĄā§āϰā§āύ āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖ āĻāϰāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰāĻŋ āĻāĻŦāĻ āĻā§āĻļāĻŋāĨ¤
āĻĄā§āϰā§āύ āĻĨā§āĻā§ āĻāĻŋāĻĄāĻŋāĻ āϏāĻŽā§āĻĒā§āϰāĻāĻžāϰ āĻāϰāĻž āĻšāĻā§āĻā§
āĻĒā§āϰāĻāϞā§āĻĒā§, āĻāĻāĻāĻŋ āύāϤā§āύ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻāϰā§āύ āĻāĻŦāĻ āϏā§āĻāĻžāύ⧠āĻāĻ āĻā§āĻĄāĻāĻŋ āĻ āύā§āϞāĻŋāĻĒāĻŋ āĻāϰā§āύ:
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);āĻāĻŦāĻ āĻāĻāĻžāύ⧠āĻāĻāĻāĻāĻŋāĻāĻŽāĻāϞ āĻā§āĻĄ, āĻāĻŽāϰāĻž āĻāĻāĻŋ āĻĒāĻžāĻŦāϞāĻŋāĻ āĻĢā§āϞā§āĻĄāĻžāϰā§āϰ āĻāĻŋāϤāϰ⧠āϰāĻžāĻāĻŋāĨ¤
<!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 āĻāĻžāϞ⧠āĻāϰā§āύ āĻāĻŦāĻ āϏāĻāϝā§āĻā§āϤ āĻāϰā§āύāĨ¤

āϏāĻšāĻžāϝāĻŧāĻ āĻāĻŋāĻĒāϏ
- āĻāĻ āĻĄā§āϰā§āύāĻāĻŋ āĻŦāĻžāĻĄāĻŧāĻŋāϰ āĻāĻŋāϤāϰ⧠āĻāĻĄāĻŧāĻžāύāĨ¤
- āĻāĻĄā§āĻĄāϝāĻŧāύā§āϰ āĻāĻā§ āϏāϰā§āĻŦāĻĻāĻž āĻāĻĒāύāĻžāϰ āĻĄā§āϰā§āύāĻāĻŋāϤ⧠āĻĒā§āϰāϤāĻŋāϰāĻā§āώāĻžāĻŽā§āϞāĻ āĻāĻāĻžāϰ āϰāĻžāĻā§āύāĨ¤
- āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āĻāĻžāϰā§āĻ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§ āĻāĻŋāύāĻž āϤāĻž āĻĒāϰā§āĻā§āώāĻž āĻāϰā§āύāĨ¤
- āϝāĻĻāĻŋ āĻĄā§āϰā§āύāĻāĻŋ āĻ āĻĻā§āĻā§āϤ āĻāĻāϰāĻŖ āĻāϰ⧠āϤāĻŦā§ āĻāĻāĻŋāĻā§ āϧāϰ⧠āϰāĻžāĻā§āύ āĻāĻŦāĻ āĻāĻāĻŋāĻā§ āĻāϞā§āĻāĻŋāϝāĻŧā§ āĻĻāĻŋāύāĨ¤ āĻāĻ āĻā§āϰāĻŋāϝāĻŧāĻžāĻāĻŋ āĻāĻĒā§āĻāĻžāϰāĻāĻŋāĻā§ āĻāϰā§āϰ⧠āĻŽā§āĻĄā§ āϰāĻžāĻāĻŦā§ āĻāĻŦāĻ āϰā§āĻāĻžāϰāĻā§āϞāĻŋ āĻ āĻŦāĻŋāϞāĻŽā§āĻŦā§ āĻŦāύā§āϧ āĻšāϝāĻŧā§ āϝāĻžāĻŦā§āĨ¤
āĻĒā§āϰāϏā§āϤā§āϤ āĻā§āĻĄ āĻāĻŦāĻ āĻĄā§āĻŽā§
āĻāĻā§āĻāĻŋāϞā§!
āĻā§āĻĄ āϞā§āĻāĻž āĻāĻŦāĻ āϤāĻžāϰāĻĒāϰ āĻŽā§āĻļāĻŋāύ āĻŽāĻžāύāϤ⧠āĻļā§āϰ⧠āĻāϰāĻž āĻāĻĒāύāĻžāĻā§ āĻāύāύā§āĻĻ āĻĻā§āĻŦā§! āĻāĻāύ āĻāĻŽāϰāĻž āĻāĻŋāύā§āϤāĻž āĻāϰā§āĻāĻŋ āĻāĻŋāĻāĻžāĻŦā§ āĻāϝāĻŧā§āϏ āĻāĻŽāĻžāύā§āĻĄ āĻļā§āύāϤ⧠āĻĄā§āϰā§āύ āĻļā§āĻāĻžāύ⧠āϝāĻžāϝāĻŧāĨ¤ āĻāϏāϞā§, āĻāϰāĻ āĻ āύā§āĻ āϏāĻŽā§āĻāĻžāĻŦāύāĻž āϰāϝāĻŧā§āĻā§: āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻŽā§āĻā§āϰ āϏā§āĻŦā§āĻā§āϤāĻŋ, āϏā§āĻŦāĻžāϝāĻŧāϤā§āϤāĻļāĻžāϏāĻŋāϤ āĻĢā§āϞāĻžāĻāĻ, āĻ āĻā§āĻāĻāĻā§āĻāĻŋ āϏā§āĻŦā§āĻā§āϤāĻŋ āĻāĻŦāĻ āĻāϰāĻ āĻ āύā§āĻ āĻāĻŋāĻā§āĨ¤
āĻāĻĒāύāĻŋ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āĻāύā§āύāϤ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻŋ āĻĒāϰāĻžāĻŽāϰā§āĻļ āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§āύ?
Skillbox āϏā§āĻĒāĻžāϰāĻŋāĻļ āĻāϰā§:
- āĻ āύāϞāĻžāĻāύ āĻā§āϰā§āϏā§āϰ āĻāĻŦā§āĻĻāύ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§ .
- āĻ āύāϞāĻžāĻāύ āĻā§āϰā§āϏ .
- āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ āĻŦāĻāϰā§āϰ āĻā§āϰā§āϏ .
āĻāϤā§āϏ: www.habr.com
