gobot.io/x/gobot@v1.16.0/examples/tello_keyboard.go (about)

     1  // +build example
     2  //
     3  // Do not build by default.
     4  
     5  /*
     6  How to run:
     7  Connect to the drone's Wi-Fi network from your computer. It will be named something like "TELLO-XXXXXX".
     8  
     9  Once you are connected you can run the Gobot code on your computer to control the drone.
    10  
    11  	go run examples/tello_keyboard.go
    12  */
    13  
    14  package main
    15  
    16  import (
    17  	"fmt"
    18  
    19  	"gobot.io/x/gobot"
    20  	"gobot.io/x/gobot/platforms/dji/tello"
    21  	"gobot.io/x/gobot/platforms/keyboard"
    22  )
    23  
    24  func resetDronePostion(drone *tello.Driver) {
    25  	drone.Forward(0)
    26  	drone.Backward(0)
    27  	drone.Up(0)
    28  	drone.Down(0)
    29  	drone.Left(0)
    30  	drone.Right(0)
    31  	drone.Clockwise(0)
    32  }
    33  
    34  func main() {
    35  	drone := tello.NewDriver("8888")
    36  	keys := keyboard.NewDriver()
    37  
    38  	keys.On(keyboard.Key, func(data interface{}) {
    39  		key := data.(keyboard.KeyEvent)
    40  		switch key.Key {
    41  		case keyboard.A:
    42  			fmt.Println(key.Char)
    43  			drone.Clockwise(-25)
    44  		case keyboard.D:
    45  			fmt.Println(key.Char)
    46  			drone.Clockwise(25)
    47  		case keyboard.W:
    48  			fmt.Println(key.Char)
    49  			drone.Forward(20)
    50  		case keyboard.S:
    51  			fmt.Println(key.Char)
    52  			drone.Backward(20)
    53  		case keyboard.K:
    54  			fmt.Println(key.Char)
    55  			drone.Down(20)
    56  		case keyboard.J:
    57  			fmt.Println(key.Char)
    58  			drone.Up(20)
    59  		case keyboard.Q:
    60  			fmt.Println(key.Char)
    61  			drone.Land()
    62  		case keyboard.P:
    63  			fmt.Println(key.Char)
    64  			drone.TakeOff()
    65  		case keyboard.ArrowUp:
    66  			fmt.Println(key.Char)
    67  			drone.FrontFlip()
    68  		case keyboard.ArrowDown:
    69  			fmt.Println(key.Char)
    70  			drone.BackFlip()
    71  		case keyboard.ArrowLeft:
    72  			fmt.Println(key.Char)
    73  			drone.LeftFlip()
    74  		case keyboard.ArrowRight:
    75  			fmt.Println(key.Char)
    76  			drone.RightFlip()
    77  		case keyboard.Escape:
    78  			resetDronePostion(drone)
    79  		}
    80  	})
    81  
    82  	var flightData *tello.FlightData
    83  	work := func() {
    84  		drone.On(tello.FlightDataEvent, func(data interface{}) {
    85  			flightData = data.(*tello.FlightData)
    86  			fmt.Println("Height:", flightData.Height)
    87  		})
    88  	}
    89  
    90  	robot := gobot.NewRobot("tello",
    91  		[]gobot.Connection{},
    92  		[]gobot.Device{keys, drone},
    93  		work,
    94  	)
    95  
    96  	robot.Start()
    97  }