gobot.io/x/gobot/v2@v2.1.0/examples/tello_keyboard.go (about)

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