Π ΡΡΠΎΠΌ ΡΡΡΠΎΡΠΈΠ°Π»Π΅ ΠΌΡ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ Π΄ΡΠΎΠ½Π° Ρ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΡΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π½Π° Node.js ΠΈ Web speech API. ΠΠΎΠΏΡΠ΅Ρ β Parrot ARDrone 2.0.
ΠΠ°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ: Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ Β«Π₯Π°Π±ΡΠ°Β» β ΡΠΊΠΈΠ΄ΠΊΠ° 10 000 ΡΡΠ±Π»Π΅ΠΉ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ Π½Π° Π»ΡΠ±ΠΎΠΉ ΠΊΡΡΡ Skillbox ΠΏΠΎ ΠΏΡΠΎΠΌΠΎΠΊΠΎΠ΄Ρ Β«Π₯Π°Π±ΡΒ».
Skillbox ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅Ρ: ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΡΡΡ
Β«ΠΠΎΠ±ΠΈΠ»ΡΠ½ΡΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ PROΒ» .
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΡΠΎΠ½Ρ Π²ΠΎΡΡ ΠΈΡΠΈΡΠ΅Π»ΡΠ½Ρ. ΠΠ½Π΅ ΠΎΡΠ΅Π½Ρ Π½ΡΠ°Π²ΠΈΡΡΡ ΠΈΠ³ΡΠ°ΡΡ ΡΠΎ ΡΠ²ΠΎΠΈΠΌ ΠΊΠΎΠΏΡΠ΅ΡΠΎΠΌ, Π·Π°ΠΏΠΈΡΡΠ²Π°Ρ ΡΠΎΡΠΎ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΡΠ°Π·Π²Π»Π΅ΠΊΠ°ΡΡΡ. ΠΠΎ Π±Π΅ΡΠΏΠΈΠ»ΠΎΡΠ½ΡΠ΅ Π°ΠΏΠΏΠ°ΡΠ°ΡΡ (ΠΠΠΠ) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠ°Π·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ. ΠΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΠΊΠΈΠ½Π΅ΠΌΠ°ΡΠΎΠ³ΡΠ°ΡΠ΅, ΠΈΠ·ΡΡΠ°ΡΡ Π»Π΅Π΄Π½ΠΈΠΊΠΈ, ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π²ΠΎΠ΅Π½Π½ΡΠΌΠΈ ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΠ΅Π»ΡΠΌΠΈ ΡΠ΅Π»ΡΡΠΊΠΎΡ ΠΎΠ·ΡΠΉΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΡΠ΅ΡΡ.
Π ΡΡΠΎΠΌ ΡΡΡΠΎΡΠΈΠ°Π»Π΅ ΠΌΡ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π΄ΡΠΎΠ½ΠΎΠΌ. ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. ΠΠ°, ΠΊΠΎΠΏΡΠ΅Ρ Π±ΡΠ΄Π΅Ρ Π΄Π΅Π»Π°ΡΡ ΡΠΎ, ΡΡΠΎ Π²Ρ Π΅ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅. Π ΠΊΠΎΠ½ΡΠ΅ ΡΡΠ°ΡΡΠΈ β Π³ΠΎΡΠΎΠ²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈ Π²ΠΈΠ΄Π΅ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΠΠΠ.
ΠΠ΅Π»Π΅Π·ΠΎ
ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
- Parrot ARDrone 2.0;
- Ethernet-ΠΊΠ°Π±Π΅Π»Ρ;
- Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΌΠΈΠΊΡΠΎΡΠΎΠ½.
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π²Π΅ΡΡΠΈΡΡ Π½Π° ΡΠ°Π±ΠΎΡΠΈΡ ΡΡΠ°Π½ΡΠΈΡΡ Ρ Windows/Mac/Ubuntu. ΠΠΈΡΠ½ΠΎ Ρ ΡΠ°Π±ΠΎΡΠ°Π» Ρ Mac ΠΈ Ubuntu 18.04.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅
ΠΠ°Π³ΡΡΠ·ΠΈΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ Node.js Ρ
Π’Π°ΠΊΠΆΠ΅ Π½ΡΠΆΠ½Π°
Π Π°Π·Π±ΠΈΡΠ°Π΅ΠΌΡΡ Ρ ΠΊΠΎΠΏΡΠ΅ΡΠΎΠΌ
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Parrot ARDrone. Π£ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΏΡΠ΅ΡΠ° Π΅ΡΡΡ ΡΠ΅ΡΡΡΠ΅ ΠΌΠΎΡΠΎΡΠ°.
ΠΡΠΎΡΠΈΠ²ΠΎΡΡΠΎΡΡΠΈΠ΅ ΠΌΠΎΡΠΎΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ. ΠΠ΄Π½Π° ΠΏΠ°ΡΠ° Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΏΠΎ ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠ΅, Π΄ΡΡΠ³Π°Ρ β ΠΏΡΠΎΡΠΈΠ². ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π΄ΡΠΎΠ½ Π·Π° ΡΡΠ΅Ρ ΡΠΌΠ΅Π½Ρ ΡΠ³Π»Π° Π½Π°ΠΊΠ»ΠΎΠ½Π° ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΠΈ Π·Π΅ΠΌΠ»ΠΈ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΊΠΎΡΠΎΡΡΠΈ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΡΠΎΡΠΎΠ² ΠΈ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΌΠ°Π½Π΅Π²ΡΠ΅Π½Π½ΡΡ
Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ.
ΠΠ°ΠΊ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ Π½Π° Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ΅ Π²ΡΡΠ΅, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π·Π½ΡΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΌΠ΅Π½Π΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΠΏΡΠ΅ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠΎΡΠΎΡΡΠΈ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΈ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΡΠΎΡΠΎΡΠΎΠ² ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΡΠ΅Π½. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΡΠΎΠ½Ρ Π»Π΅ΡΠ΅ΡΡ Π²ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠ»ΠΈ Π½Π°Π·Π°Π΄.
ΠΠ·ΠΌΠ΅Π½ΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΠΈ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΡΠΎΡΠΎΠ², ΠΌΡ Π·Π°Π΄Π°Π΅ΠΌ ΡΠ³Π»Ρ Π½Π°ΠΊΠ»ΠΎΠ½Π°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΊΠΎΠΏΡΠ΅ΡΡ ΡΠΎΠ²Π΅ΡΡΠ°ΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π² Π΄ΡΡΠ³ΠΈΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ . Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, Π΄Π»Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π°ΡΡΠΎΠ΄ΠΈΠ½Π°ΠΌΠΈΠΊΡ ΠΈΠ·ΡΡΠ°ΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ, ΠΏΡΠΎΡΡΠΎ ΡΡΠΎΠΈΡ ΠΏΠΎΠ½ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Parrot ARDrone
ΠΡΠΎΠ½ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠΎΡΠΊΡ Π΄ΠΎΡΡΡΠΏΠ° Wi-Fi. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΊΠΎΠΏΡΠ΅ΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΊ ΡΡΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ. ΠΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΊΠΎΠΏΡΠ΅ΡΠ°ΠΌΠΈ. ΠΡΠ³Π»ΡΠ΄ΠΈΡ Π²ΡΠ΅ ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π΄ΡΠΎΠ½ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½, ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ ΡΠ΅ΡΠΌΠΈΠ½Π°Π» ΠΈ telnet 192.168.1.1 β ΡΡΠΎ IP ΠΊΠΎΠΏΡΠ΅ΡΠ°. ΠΠ»Ρ Linux ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΠ°Ρ ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ:
- ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Ρ ΡΠ΅ΡΠ΅Π²ΡΠΌ API Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ Π³ΠΎΠ»ΠΎΡΠ°;
- ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Ρ ΡΡΠ°Π»ΠΎΠ½ΠΎΠΌ;
- ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ Π΄ΡΠΎΠ½Ρ;
- ΠΏΡΡΠΌΠ°Ρ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΡ Π²ΠΈΠ΄Π΅ΠΎ.
API ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ Π½Π°Π»ΠΈΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ-ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. Π§ΡΠΎΠ±Ρ Π΅Π³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ, ΠΌΡ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Ethernet.
ΠΠΎΡΠ° ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅!
ΠΠΎΠ΄ΠΈΠΌ
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΡΡ ΠΏΠ°ΠΏΠΊΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΠΌΡΡ Π½Π° Π½Π΅Π΅ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°.
ΠΠ°ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Node-ΠΏΡΠΎΠ΅ΠΊΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
npm installβ
ΠΡΠ΄Π΅ΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
- Π²Π·Π»Π΅Ρ;
- ΠΏΠΎΡΠ°Π΄ΠΊΠ°;
- Π²Π²Π΅ΡΡ β Π΄ΡΠΎΠ½ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΡΡΡ Π½Π° ΠΏΠΎΠ»ΠΌΠ΅ΡΡΠ° ΠΈ Π·Π°Π²ΠΈΡΠ°Π΅Ρ;
- Π²Π½ΠΈΠ· β ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½Π° ΠΏΠΎΠ»ΠΌΠ΅ΡΡΠ° ΠΈ Π·Π°Π²ΠΈΡΠ°Π΅Ρ;
- Π²Π»Π΅Π²ΠΎ β ΠΈΠ΄Π΅Ρ Π²Π»Π΅Π²ΠΎ Π½Π° ΠΏΠΎΠ»ΠΌΠ΅ΡΡΠ°;
- Π²ΠΏΡΠ°Π²ΠΎ β ΠΈΠ΄Π΅Ρ Π²ΠΏΡΠ°Π²ΠΎ Π½Π° ΠΏΠΎΠ»ΠΌΠ΅ΡΡΠ°;
- ΠΏΠΎΠ²ΠΎΡΠΎΡ β ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎ ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠ΅ Π½Π° 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-ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ»ΡΡΠ°Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π° Node-ΡΠ΅ΡΠ²Π΅Ρ.
<!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>
Π Π΅ΡΠ΅ JavaScript-ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΡΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ, ΠΎΡΠΏΡΠ°Π²Π»ΡΡ ΠΈΡ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ Node.
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, Π° Ethernet-ΠΊΠ°Π±Π΅Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ ΠΊ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡ).
ΠΡΠΊΡΡΠ²Π°Π΅ΠΌ localhost:3000 Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΠΈ ΠΊΠ»ΠΈΠΊΠ°Π΅ΠΌ Start Recognition.
ΠΡΠΎΠ±ΡΠ΅ΠΌ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π΄ΡΠΎΠ½ΠΎΠΌ ΠΈ ΡΠ°Π΄ΡΠ΅ΠΌΡΡ.
Π’ΡΠ°Π½ΡΠ»ΡΡΠΈΡ Π²ΠΈΠ΄Π΅ΠΎ Ρ Π΄ΡΠΎΠ½Π°
Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» ΠΈ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΡΡΠ΄Π° ΡΡΠΎΡ ΠΊΠΎΠ΄:
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-ΠΊΠΎΠ΄, Π΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΠΌ Π²Π½ΡΡΡΠΈ ΠΏΠ°ΠΏΠΊΠΈ public.
<!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 Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π²ΠΈΠ΄Π΅ΠΎ Ρ ΡΡΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠ°ΠΌΠ΅ΡΡ.
ΠΠΎΠ»Π΅Π·Π½ΡΠ΅ ΡΠΎΠ²Π΅ΡΡ
- Π£ΠΏΡΠ°Π²Π»ΡΠΉΡΠ΅ ΡΡΠΈΠΌ Π΄ΡΠΎΠ½ΠΎΠΌ Π² ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ.
- ΠΡΠ΅Π³Π΄Π° Π½Π°Π΄Π΅Π²Π°ΠΉΡΠ΅ Π·Π°ΡΠΈΡΠ½ΡΡ ΠΊΡΡΡΠΊΡ Π½Π° Π΄ΡΠΎΠ½ ΠΏΠ΅ΡΠ΅Π΄ Π²Π·Π»Π΅ΡΠΎΠΌ.
- ΠΡΠΎΠ²Π΅ΡΡΡΠ΅, Π·Π°ΡΡΠΆΠ΅Π½ Π»ΠΈ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡ.
- ΠΡΠ»ΠΈ Π΄ΡΠΎΠ½ Π²Π΅Π΄Π΅Ρ ΡΠ΅Π±Ρ ΡΡΡΠ°Π½Π½ΠΎ, ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΠΉΡΠ΅ Π΅Π³ΠΎ ΡΠ½ΠΈΠ·Ρ ΠΈ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΠ½ΠΈΡΠ΅. ΠΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Ρ ΠΊΠΎΠΏΡΠ΅Ρ Π² Π°Π²Π°ΡΠΈΠΉΠ½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ, ΠΈ ΡΠΎΡΠΎΡΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ.
ΠΠΎΡΠΎΠ²ΡΠΉ ΠΊΠΎΠ΄ ΠΈ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ
ΠΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ!
ΠΠ°ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ ΠΈ Π·Π°ΡΠ΅ΠΌ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ, ΠΊΠ°ΠΊ ΠΌΠ°ΡΠΈΠ½Π° Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΠ»ΡΡΠ°ΡΡΡΡ, Π΄ΠΎΡΡΠ°Π²ΠΈΡ Π²Π°ΠΌ ΡΠ΄ΠΎΠ²ΠΎΠ»ΡΡΡΠ²ΠΈΠ΅! Π‘Π΅ΠΉΡΠ°Ρ ΠΌΡ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ Π² ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π½Π°ΡΡΠΈΡΡ Π΄ΡΠΎΠ½ ΡΠ»ΡΡΠ°ΡΡ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»ΡΡΠ΅: ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΠ΅ Π»ΠΈΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠ΅ ΠΏΠΎΠ»Π΅ΡΡ, ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΠ΅ ΠΆΠ΅ΡΡΠΎΠ² ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅.
Π§ΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ Π΄Π»Ρ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ?
Skillbox ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅Ρ:
- ΠΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΊΡΡΡ
Β«ΠΠ½Π°Π»ΠΈΡΠΈΠΊ Π΄Π°Π½Π½ΡΡ PythonΒ» .- ΠΠ½Π»Π°ΠΉΠ½-ΠΊΡΡΡ
Β«ΠΡΠΎΡΠ΅ΡΡΠΈΡ frontend-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΒ» .- ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π³ΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΠΊΡΡΡ
Β«PHP-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Ρ 0 Π΄ΠΎ PROΒ» .
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com