рд╣рдо Node.js рдФрд░ ARDrone рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХреЙрдкреНрдЯрд░ рдХреА рдЖрд╡рд╛рдЬ рдирд┐рдпрдВрддреНрд░рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд░рддреЗ рд╣реИрдВ



рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рд╣рдо Node.js рдФрд░ рд╡реЗрдм рд╕реНрдкреАрдЪ рдПрдкреАрдЖрдИ рдкрд░ рд╡реЙрдпрд╕-рдПрдХреНрдЯрд┐рд╡реЗрдЯреЗрдб рдбреНрд░реЛрди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рджреЗрдЦреЗрдВрдЧреЗред рд╣реИрд▓реАрдХрд╛рдкреНрдЯрд░ - рддреЛрддрд╛ ARDrone 2.0ред
рд╣рдо рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ: "рд╣реИрдмрд░" рдХреЗ рд╕рднреА рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП - "рд╣реИрдмрд░" рдкреНрд░реЛрдореЛ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдХреЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп 10,000 рд░реВрдмрд▓ рдХреА рдЫреВрдЯред

рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ: рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд╛рдареНрдпрдХреНрд░рдо "рдореЛрдмрд╛рдЗрд▓ рдбреЗрд╡рд▓рдкрд░ рдкреНрд░реЛ" ред

рдкрд░рд┐рдЪрдп


рдбреНрд░реЛрди рдЕрджреНрднреБрдд рд╣реИрдВред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдиреЗ рд╕рд╣рдХрд░реНрдореА рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ, рдлрд╝реЛрдЯреЛ рдФрд░ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдпрд╛ рдмрд╕ рдордЬрд╝реЗ рдХрд░рдиреЗ рдореЗрдВ рдордЬрд╝рд╛ рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдорд╛рдирд╡ рд░рд╣рд┐рдд рд╣рд╡рд╛рдИ рд╡рд╛рд╣рди (рдпреВрдПрд╡реА) рди рдХреЗрд╡рд▓ рдордиреЛрд░рдВрдЬрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╡реЗ рд╕рд┐рдиреЗрдорд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЧреНрд▓реЗрд╢рд┐рдпрд░реЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реИрдВ, рд╕реИрдиреНрдп рдХреНрд╖реЗрддреНрд░ рдФрд░ рдХреГрд╖рд┐ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╣рдо рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЖрдкрдХреЛ рдбреНрд░реЛрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡реЙрдЗрд╕ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рд╣рд╛рдВ, рдХреЙрдкреНрдЯрд░ рд╡рд╣реА рдХрд░реЗрдЧрд╛ рдЬреЛ рдЖрдк рдЙрд╕реЗ рдмрддрд╛рддреЗ рд╣реИрдВред рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ - рд╕рдорд╛рдкреНрдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдФрд░ рд╡реАрдбрд┐рдпреЛ рдирд┐рдпрдВрддреНрд░рдг рдпреВрдПрд╡реАред

рд▓реЛрд╣рд╛


рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  • рддреЛрддрд╛ ARDrone 2.0;
  • рдИрдерд░рдиреЗрдЯ рдХреЗрдмрд▓
  • рдЕрдЪреНрдЫрд╛ рдорд╛рдЗрдХреНрд░реЛрдлреЛрдиред

рд╡рд┐рдВрдбреЛрдЬ / рдореИрдХ / рдЙрдмрдВрдЯреВ рдХреЗ рд╕рд╛рде рд╡рд░реНрдХрд╕реНрдЯреЗрд╢рди рдкрд░ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкреНрд░рдмрдВрдзрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдореИрдХ рдФрд░ рдЙрдмрдВрдЯреВ 18.04 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ред

рд╕реЙрдлреНрдЯрд╡реЗрдпрд░


рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ Node.js рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ Google Chrome рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╣рдо рдХреЙрдкреНрдЯрд░ рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВ


рдЖрдЗрдП рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рддреЛрддрд╛ ARDrone рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдХреЙрдкреНрдЯрд░ рдореЗрдВ рдЪрд╛рд░ рдореЛрдЯрд░ рд╣реИрдВред



рдореЛрдЯрд░реЛрдВ рдХрд╛ рд╡рд┐рд░реЛрдз рдПрдХ рджрд┐рд╢рд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЬреЛрдбрд╝рд╛ рджрдХреНрд╖рд┐рдгрд╛рд╡рд░реНрдд рдШреВрдорддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдкреНрд░рддрд┐рд░реВрдкред рдбреНрд░реЛрди рдкреГрдереНрд╡реА рдХреА рд╕рддрд╣ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЭреБрдХрд╛рд╡ рдХреЗ рдХреЛрдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдХрд╛рд░рдг рдЪрд▓рддрд╛ рд╣реИ, рдореЛрдЯрд░реЛрдВ рдХреЗ рд░реЛрдЯреЗрд╢рди рдХреА рдЧрддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдХрдИ рдФрд░ рдЕрдзрд┐рдХ рдкреИрдВрддрд░реЗрдмрд╛рдЬрд╝реА рдЖрдВрджреЛрд▓рдиреЛрдВред



рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдКрдкрд░ рджрд┐рдП рдЧрдП рдЖрд░реЗрдЦ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рд╡рд┐рднрд┐рдиреНрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдХреЙрдкреНрдЯрд░ рдХреА рдЧрддрд┐ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВ рд░реЛрдЯрд╛рд░ рдХреА рд░реЛрдЯреЗрд╢рди рдЧрддрд┐ рдореЗрдВ рдХрдореА рдпрд╛ рд╡реГрджреНрдзрд┐ рдПрдХ рд░реЛрд▓ рдмрдирд╛рддреА рд╣реИред рдпрд╣ рдбреНрд░реЛрди рдХреЛ рдЖрдЧреЗ рдпрд╛ рдкреАрдЫреЗ рдЙрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдореЛрдЯрд░реНрд╕ рдХреА рдЧрддрд┐ рдХреА рдЧрддрд┐ рдФрд░ рджрд┐рд╢рд╛ рдХреЛ рдмрджрд▓рддреЗ рд╣реБрдП, рд╣рдо рдЭреБрдХрд╛рд╡ рдХреЗ рдХреЛрдг рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЕрдиреНрдп рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рд╕рд╣рдХрд░реНрдореА рдХреЛ рдЖрдВрджреЛрд▓рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред рджрд░рдЕрд╕рд▓, рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд╛рдпреБрдЧрддрд┐рдХреА рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред

рдХреИрд╕реЗ рддреЛрддрд╛ ARDrone рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


рдбреНрд░реЛрди рд╡рд╛рдИ-рдлрд╛рдИ рдПрдХреНрд╕реЗрд╕ рдкреНрд╡рд╛рдЗрдВрдЯ рд╣реИред рдХреЛрдкреНрдЯрд░ рдХреЛ рдХрдорд╛рдВрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕ рдмрд┐рдВрджреБ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрдИ рд╡рд┐рд╡рд┐рдз рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдХреЙрдкрд░реНрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рд╕рдм рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



рдПрдХ рдмрд╛рд░ рдбреНрд░реЛрди рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдЯреЗрд▓рдиреЗрдЯ 192.168.1.1 рдХреЛрдкреНрдЯрд░ рдХрд╛ рдЖрдИрдкреА рд╣реИред рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП, рдЖрдк рд▓рд┐рдирдХреНрд╕ рдмрд┐рдЬреАрдмреЙрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛


рд╣рдорд╛рд░рд╛ рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

  • рдЖрд╡рд╛рдЬ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рдг рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕;
  • рдорд╛рдирдХ рдХреЗ рд╕рд╛рде рдХрдорд╛рдВрдб рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдФрд░ рддреБрд▓рдирд╛;
  • рдбреНрд░реЛрди рдХреЛ рдХрдорд╛рдВрдб рднреЗрдЬрдирд╛;
  • рд▓рд╛рдЗрд╡ рд╡реАрдбрд┐рдпреЛ рдкреНрд░рд╕рд╛рд░рдгред

рдПрдкреАрдЖрдИ рдПрдХ рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдЕрдзреАрди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдИрдерд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рдпрд╣ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ!

рдХреЛрдб


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдирдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ рдФрд░ рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВред

рдлрд┐рд░ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдиреЛрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВред

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 рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реБрдирддрд╛ рд╣реИ рдФрд░ рдиреЛрдб рд╕рд░реНрд╡рд░ рдХреЛ рдХрдорд╛рдВрдб рднреЗрдЬрддрд╛ рд╣реИред

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

рдФрд░ 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' }); }; 

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ


рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХреЙрдкреНрдЯрд░ рд╡рд╛рдИ-рдлрд╛рдИ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ рдФрд░ рдИрдерд░рдиреЗрдЯ рдХреЗрдмрд▓ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ)ред

рдУрдкрди рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: рдмреНрд░рд╛рдЙрдЬрд░ рдореЗрдВ 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); 

рдФрд░ рдпрд╣рд╛рдВ 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 рд╕реЗ рдЬреБрдбрд╝рддреЗ рд╣реИрдВред



рдЙрдкрдпреЛрдЧреА рд╕реБрдЭрд╛рд╡


  • рдЗрд╕ рдбреНрд░реЛрди рдХреЛ рдШрд░ рдХреЗ рдЕрдВрджрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдВред
  • рд╣рдореЗрд╢рд╛ рдЯреЗрдХрдСрдлрд╝ рд╕реЗ рдкрд╣рд▓реЗ рдбреНрд░реЛрди рдкрд░ рд╕реБрд░рдХреНрд╖рд╛рддреНрдордХ рдЯреЛрдкреА рд▓рдЧрд╛рдПрдВред
  • рдмреИрдЯрд░реА рдЪрд╛рд░реНрдЬ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред
  • рдпрджрд┐ рдбреНрд░реЛрди рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рджрдмрд╛рдП рд░рдЦреЗрдВ рдФрд░ рдЗрд╕реЗ рдкрд▓рдЯреЗрдВред рдпрд╣ рдХреНрд░рд┐рдпрд╛ рдХреЙрдкреНрдЯрд░ рдХреЛ рдЖрдкрд╛рддрдХрд╛рд▓реАрди рдореЛрдб рдореЗрдВ рдбрд╛рд▓ рджреЗрдЧреА рдФрд░ рд░реЛрдЯрд░ рддреБрд░рдВрдд рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рддреИрдпрд╛рд░ рдХреЛрдб рдФрд░ рдбреЗрдореЛ


рд▓рд╛рдЗрд╡ рдбреЗрдореЛ

рдбрд╛рдЙрдирд▓реЛрдб

рдпрд╣ рдирд┐рдХрд▓рд╛!


рдПрдХ рдХреЛрдб рд▓рд┐рдЦреЗрдВ рдФрд░ рдлрд┐рд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХрд╛рд░ рдХрд╛ рдкрд╛рд▓рди рдХреИрд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЖрдк рдЖрдирдВрдж рд▓реЗрдВрдЧреЗ! рдЕрдм рд╣рдордиреЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдХрд┐ рд╡реЙрдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдбреНрд░реЛрди рдХреЛ рдХреИрд╕реЗ рд╕рд┐рдЦрд╛рдирд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЪреЗрд╣рд░рд╛ рдкрд╣рдЪрд╛рди, рд╕реНрд╡рд╛рдпрддреНрдд рдЙрдбрд╝рд╛рдиреЗрдВ, рд╣рд╛рд╡рднрд╛рд╡ рдкрд╣рдЪрд╛рди рдФрд░ рдмрд╣реБрдд рдХреБрдЫред

рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХреНрдпрд╛ рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ:

Source: https://habr.com/ru/post/hi445980/


All Articles