func main() { gbot := gobot.NewGobot() bleAdaptor := ble.NewBLEAdaptor("ble", os.Args[1]) drone := ble.NewBLEMinidroneDriver(bleAdaptor, "drone") work := func() { fmt.Println("takeoff...") drone.TakeOff() gobot.After(10*time.Second, func() { fmt.Println("landing...") drone.Land() }) } robot := gobot.NewRobot("minidrone", []gobot.Connection{bleAdaptor}, []gobot.Device{drone}, work, ) gbot.AddRobot(robot) gbot.Start() }
func main() { gbot := gobot.NewGobot() bleAdaptor := ble.NewBLEAdaptor("ble", os.Args[1]) drone := ble.NewBLEMinidroneDriver(bleAdaptor, "drone") work := func() { gobot.On(drone.Event("battery"), func(data interface{}) { fmt.Printf("battery: %d\n", data) }) gobot.On(drone.Event("status"), func(data interface{}) { fmt.Printf("status: %d\n", data) }) gobot.On(drone.Event("flying"), func(data interface{}) { fmt.Println("flying!") gobot.After(5*time.Second, func() { fmt.Println("forwards...") drone.Forward(10) }) gobot.After(10*time.Second, func() { fmt.Println("backwards...") drone.Backward(10) }) gobot.After(15*time.Second, func() { fmt.Println("right...") drone.Right(10) }) gobot.After(20*time.Second, func() { fmt.Println("left...") drone.Left(10) }) gobot.After(25*time.Second, func() { fmt.Println("landing...") drone.Land() }) }) gobot.On(drone.Event("landed"), func(data interface{}) { fmt.Println("landed.") }) drone.TakeOff() } robot := gobot.NewRobot("minidrone", []gobot.Connection{bleAdaptor}, []gobot.Device{drone}, work, ) gbot.AddRobot(robot) gbot.Start() }
func main() { gbot := gobot.NewGobot() joystickAdaptor := joystick.NewJoystickAdaptor("ps3") joystick := joystick.NewJoystickDriver(joystickAdaptor, "ps3", "./platforms/joystick/configs/dualshock3.json", ) droneAdaptor := ble.NewBLEAdaptor("ble", os.Args[1]) drone := ble.NewBLEMinidroneDriver(droneAdaptor, "drone") work := func() { offset := 32767.0 rightStick := pair{x: 0, y: 0} leftStick := pair{x: 0, y: 0} recording := false gobot.On(joystick.Event("circle_press"), func(data interface{}) { if recording { drone.StopRecording() } else { drone.StartRecording() } recording = !recording }) gobot.On(joystick.Event("square_press"), func(data interface{}) { drone.HullProtection(true) drone.TakeOff() }) gobot.On(joystick.Event("triangle_press"), func(data interface{}) { drone.Stop() }) gobot.On(joystick.Event("x_press"), func(data interface{}) { drone.Land() }) gobot.On(joystick.Event("left_x"), func(data interface{}) { val := float64(data.(int16)) if leftStick.x != val { leftStick.x = val } }) gobot.On(joystick.Event("left_y"), func(data interface{}) { val := float64(data.(int16)) if leftStick.y != val { leftStick.y = val } }) gobot.On(joystick.Event("right_x"), func(data interface{}) { val := float64(data.(int16)) if rightStick.x != val { rightStick.x = val } }) gobot.On(joystick.Event("right_y"), func(data interface{}) { val := float64(data.(int16)) if rightStick.y != val { rightStick.y = val } }) gobot.Every(10*time.Millisecond, func() { pair := leftStick if pair.y < -10 { drone.Forward(validatePitch(pair.y, offset)) } else if pair.y > 10 { drone.Backward(validatePitch(pair.y, offset)) } else { drone.Forward(0) } if pair.x > 10 { drone.Right(validatePitch(pair.x, offset)) } else if pair.x < -10 { drone.Left(validatePitch(pair.x, offset)) } else { drone.Right(0) } }) gobot.Every(10*time.Millisecond, func() { pair := rightStick if pair.y < -10 { drone.Up(validatePitch(pair.y, offset)) } else if pair.y > 10 { drone.Down(validatePitch(pair.y, offset)) } else { drone.Up(0) } if pair.x > 20 { drone.Clockwise(validatePitch(pair.x, offset)) } else if pair.x < -20 { drone.CounterClockwise(validatePitch(pair.x, offset)) } else { drone.Clockwise(0) } }) } robot := gobot.NewRobot("minidrone", []gobot.Connection{joystickAdaptor, droneAdaptor}, []gobot.Device{joystick, drone}, work, ) gbot.AddRobot(robot) gbot.Start() }