Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cross Platform Copter with Titanium

Cross Platform Copter with Titanium

How to control a drone with javascript and titanium

Avatar for Marcus Ross

Marcus Ross

February 23, 2013
Tweet

More Decks by Marcus Ross

Other Decks in Programming

Transcript

  1. Cross  Pla)orm  Copter   How  to  control  a  drone  with

     5tanium?     Marcus  Ross  /  @zahlenhelfer  
  2. Boys  and  their  toys...   •  When  I  was  a

     liCle  boy,  I  always  wanted  this:   hCp://www.flickr.com/photos/raijsi/4442087532/  
  3. ...when  they  grow  up   •  Now,  I´m  a  man

     –  but  a  boy,  too.   •  so  I  want  this  today:  
  4. ...but  as  a  Titan  do  more   •  perfect  solu5on:

      Titanium  +  AR.Drone  =  BIG  FUN   •  Kickstarter  was:   Blackberry  JAM  Asia  2012  Contest   •  I  tried  the  Alpha  Version   of  the  BB  SDK   •  ask  Ketan  for  more     serious  apps  with  this  
  5. details  of  the  drone   •  AR.Drone  2.0  is  from

     Parrot   •  4  x  35,000  rpm  motors   •  ARM  Cortex  A8  1Ghz   •  1  GB  RAM   •  Wifi  with  b/g/n   •  BusyBox  Linux  2.6.32   •  Magnometer  /  Gyro   •  2x  camera  (720p  HD  &  QVGA)   hCp://www.flickr.com/photos/crea5ve_stock/  
  6. This  is  BB10  Copter   •  Titanium  based  app  

    •  basic  flight   •  can  do  a  stunt   •  has  LED  control   artwork  by  Liz  Meyers  -­‐>  
  7. Challanges   •  understand  the  SDK   •  understand  UDP

      •  do  real5me  stuff   •  make  it  easy  via  JS   hCp://www.flickr.com/photos/irrezolut/  
  8. •  use the SDK docs •  understand the protocol • 

    understand the cmds •  use easy javascript with Titanium power tools  for  the  job   8   hCp://www.flickr.com/photos/skistz/398429879/  
  9. dev  requirements   •  get  SDK  Docs   (hCps://projects.ardrone.org/)  

    •  get  Appcelerator  Titanium   (hCp://www.appcelerator.com/)   •  get  the  UDP  plugin   (hCps://github.com/appcelerator/ 5tanium_modules.git)   •  clone  the  starter  project   (hCps://github.com/zahlenhelfer/ CrossPla)ormCopter.git)   •  have  FUN!  
  10. How  to  talk  to  a  drone   •  think  in

     real5me!   •  be  polite   •  repeat  yourself  osen   •  don´t  forget  the  kill  switch  (demo)  
  11. Let´s  start  building  it   •  Read  the  docs  

    •  and  understand  it,  too  J  
  12. Drone  101  –  Part  1   •  use  AT  Commands

     (like  to  old  5mes)   •  calc  bit-­‐arrays  to  integers  (arrrghhh!)   •  use  a  counter  (to  be  repe55ve)   Example:   AT*REF=<seq>,<command><CR> in  more  detail-­‐>  next  page  
  13. basic  drone  commands     •  start  the  drone  

    AT*REF=1,290718208<CR> •  land  the  drone   AT*REF=2,290717696<CR>
  14. How  to  calc  commands   •  a  string  value  

    (ex:  the  arguments  of  AT*CONFIG,  or  AT*REF)   •  a  signed  integer  -­‐  the  sequence  number   •  a  single-­‐precision  IEEE-­‐754  floa5ng-­‐point  value   (aka.  float).  Instead,  the  32-­‐bit  word  containing   the  float  will  be  considered  as  a  32-­‐bit  signed   integer  and  printed  in  the  AT  command  (an   example  is  given  below)   AT*REF=1,290718208<CR>  
  15. basic  drone  commands   •  move  les   AT*PCMD=3,1,-1090519040,0,0,0<CR>  

    •  move  right   AT*PCMD=4,1,1056964608,0,0,0<CR>
  16. control  the  flight   •  use  AT  Commands   • 

    calc  float  to  32Bit  WORD  to  integers   •  Example:  -­‐0.8  degree  pitch   -­‐0.8f  equal  BF4CCCCD  equal  −1085485875   •  Result:   AT*PCMD=2,0,−1085485875,0,0,0,0    
  17. bytebuffer.js   •  hCps://github.com/5mkurvers/byte-­‐buffer     Example: <script src="bytebuffer.js"></script> <script>

    b = new ByteBuffer(2, ByteBuffer.BIG_ENDIAN, true) alert(b.length); var floatValue = -0.8; b.writeFloat(floatValue); b.seek(-4); alert('int:'+b.readInt()); </script>
  18. UDP  &  AR.Drone   19   1)  est.  wifi  with

     the  drone   (192.168.1.1)   ⌘   AR.Drone   2)  send  CMD  through  UDP          (Port  5556)  
  19. UDP  in  a  nutshell   •  UDP  =  User  Datagram

     Protocol   •  RFC  768   •  based  on  the  transport  layer  of  ISO/OSI   •  it´s  very  fast  but,   •  it´s  very  unreliable   •  some  kind  of  a  sister  protocol  to  TCP   more  info:   hCp://en.wikipedia.org/wiki/User_Datagram_Protocol  
  20. Add  UDP  Module  Support   •  Add  the  following  to

     5app.xml   <modules> <module platform="iphone" version="1.1">ti.udp</module> <module platform="android" version="2.1">ti.udp</module> </modules>
  21. Create  UDP  Socket   var UDP = require('ti.udp'); var socket

    = UDP.createSocket(); socket.sendString({ host: 192.168.178.1, port: 4242, data: “some cool command” });
  22. Building  block  with  javascript   •  update  the  sequence  number

      seq=seq+1; •  send  a  command  more  then  once   setIntervall(doCurrentCmd,30)  
  23. demo time 24 Welcome  Captain…   the  drone  is  ready

     to  start   fasten  your  seatbelts   take  off!  
  24. and  now?   •  Have  fun  an  experiment  with  that!

      •  start  your  5tanium  envoirment   •  try  the  CPCopter  Code   •  look  insight  flightbook.js  
  25. future  plans   •  get  into  the  WP8  beta  –

     Jeff,  please!   •  Save  the  flight-­‐data  in  ACS   (Ketan  looking  forward  to  your  session!)   •  make  the  camera-­‐stream  work   (Extend  Titanium.Media.VideoPlayer  for  PVE)   •  built  a  TitanCopter  community   •  Keep  it  free  –  so  all  can  have  fun!  
  26. Thank  you!   •  Thank  you  Boydlee  for  making  5Conf!

      •  Thank  you  audience!   •  Thank  you  Appclereator  for  this  cool  tool!   •  for  further  ques5ons:   – eMail:  [email protected]   – twiCer:  @zahlenhelfer   – ReaLife:  meet  me  outside  for  a  drink