diff --git a/examples/ardrone.go b/examples/ardrone.go index d204d836..8a7db88b 100644 --- a/examples/ardrone.go +++ b/examples/ardrone.go @@ -2,36 +2,32 @@ package main import ( "github.com/hybridgroup/gobot" - "github.com/hybridgroup/gobot/ardrone" + "github.com/hybridgroup/gobot/platforms/ardrone" + "time" ) func main() { - ardroneAdaptor := ardrone.NewArdroneAdaptor() - ardroneAdaptor.Name = "Drone" - - drone := ardrone.NewArdroneDriver(ardroneAdaptor) - drone.Name = "Drone" + gbot := gobot.NewGobot() + ardroneAdaptor := ardrone.NewArdroneAdaptor("Drone") + drone := ardrone.NewArdroneDriver(ardroneAdaptor, "Drone") work := func() { drone.TakeOff() gobot.On(drone.Events["Flying"], func(data interface{}) { - gobot.After("1s", func() { + gobot.After(1*time.Second, func() { drone.Right(0.1) }) - gobot.After("2s", func() { + gobot.After(2*time.Second, func() { drone.Left(0.1) }) - gobot.After("3s", func() { + gobot.After(3*time.Second, func() { drone.Land() }) }) } - robot := gobot.Robot{ - Connections: []gobot.Connection{ardroneAdaptor}, - Devices: []gobot.Device{drone}, - Work: work, - } + gbot.Robots = append(gbot.Robots, + gobot.NewRobot("drone", []gobot.Connection{ardroneAdaptor}, []gobot.Device{drone}, work)) - robot.Start() + gbot.Start() } diff --git a/examples/ardrone_face_tracking.go b/examples/ardrone_face_tracking.go index af352233..a9ccc7f4 100644 --- a/examples/ardrone_face_tracking.go +++ b/examples/ardrone_face_tracking.go @@ -4,29 +4,23 @@ import ( "fmt" cv "github.com/hybridgroup/go-opencv/opencv" "github.com/hybridgroup/gobot" - "github.com/hybridgroup/gobot/ardrone" - "github.com/hybridgroup/gobot/opencv" + "github.com/hybridgroup/gobot/platforms/ardrone" + "github.com/hybridgroup/gobot/platforms/opencv" "math" "path" "runtime" + "time" ) func main() { + gbot := gobot.NewGobot() + _, currentfile, _, _ := runtime.Caller(0) cascade := path.Join(path.Dir(currentfile), "haarcascade_frontalface_alt.xml") - - window := opencv.NewWindowDriver() - window.Name = "window" - - camera := opencv.NewCamera() - camera.Name = "camera" - camera.Source = "tcp://192.168.1.1:5555" - - ardroneAdaptor := ardrone.NewArdroneAdaptor() - ardroneAdaptor.Name = "Drone" - - drone := ardrone.NewArdroneDriver(ardroneAdaptor) - drone.Name = "Drone" + window := opencv.NewWindowDriver("window") + camera := opencv.NewCamera("camera", "tcp://192.168.1.1:5555") + ardroneAdaptor := ardrone.NewArdroneAdaptor("Drone") + drone := ardrone.NewArdroneDriver(ardroneAdaptor, "drone") work := func() { detect := false @@ -39,11 +33,11 @@ func main() { } }) gobot.On(drone.Events["Flying"], func(data interface{}) { - gobot.After("1s", func() { drone.Up(0.2) }) - gobot.After("2s", func() { drone.Hover() }) - gobot.After("5s", func() { + gobot.After(1*time.Second, func() { drone.Up(0.2) }) + gobot.After(2*time.Second, func() { drone.Hover() }) + gobot.After(5*time.Second, func() { detect = true - gobot.Every("0.3s", func() { + gobot.Every(0.3*time.Second, func() { drone.Hover() i := image faces := opencv.DetectFaces(cascade, i) @@ -68,16 +62,13 @@ func main() { } window.ShowImage(i) }) - gobot.After("20s", func() { drone.Land() }) + gobot.After(20*time.Second, func() { drone.Land() }) }) }) } - robot := gobot.Robot{ - Connections: []gobot.Connection{ardroneAdaptor}, - Devices: []gobot.Device{window, camera, drone}, - Work: work, - } + gbot.Robots = append(gbot.Robots, + gobot.NewRobot("face", []gobot.Connection{ardroneAdaptor}, []gobot.Device{window, camera, drone}, work)) robot.Start() } diff --git a/examples/ardrone_ps3.go b/examples/ardrone_ps3.go index 69328c0e..5a4c897e 100644 --- a/examples/ardrone_ps3.go +++ b/examples/ardrone_ps3.go @@ -2,9 +2,10 @@ package main import ( "github.com/hybridgroup/gobot" - "github.com/hybridgroup/gobot/ardrone" - "github.com/hybridgroup/gobot/joystick" + "github.com/hybridgroup/gobot/platforms/ardrone" + "github.com/hybridgroup/gobot/platforms/joystick" "math" + "time" ) type pair struct { @@ -13,23 +14,15 @@ type pair struct { } func main() { - joystickAdaptor := joystick.NewJoystickAdaptor() - joystickAdaptor.Name = "ps3" - joystickAdaptor.Params = map[string]interface{}{ - "config": "../joytsitkc/configs/dualshock3.json", - } + gbot := gobot.NewGobot() - joystick := joystick.NewJoystickDriver(joystickAdaptor) - joystick.Name = "ps3" + joystickAdaptor := joystick.NewJoystickAdaptor("ps3", "../joystick/configs/dualshock3.json") + joystick := joystick.NewJoystickDriver(joystickAdaptor, "ps3") - ardroneAdaptor := ardrone.NewArdroneAdaptor() - ardroneAdaptor.Name = "Drone" - - drone := ardrone.NewArdroneDriver(ardroneAdaptor) - drone.Name = "Drone" + ardroneAdaptor := ardrone.NewArdroneAdaptor("Drone") + drone := ardrone.NewArdroneDriver(ardroneAdaptor, "Drone") work := func() { - offset := 32767.0 right_stick := pair{x: 0, y: 0} left_stick := pair{x: 0, y: 0} @@ -68,7 +61,7 @@ func main() { } }) - gobot.Every("0.01s", func() { + gobot.Every(0.01*time.Second, func() { pair := left_stick if pair.y < -10 { drone.Forward(validatePitch(pair.y, offset)) @@ -87,7 +80,7 @@ func main() { } }) - gobot.Every("0.01s", func() { + gobot.Every(0.01*time.Second, func() { pair := right_stick if pair.y < -10 { drone.Up(validatePitch(pair.y, offset)) @@ -107,13 +100,10 @@ func main() { }) } - robot := gobot.Robot{ - Connections: []gobot.Connection{joystickAdaptor, ardroneAdaptor}, - Devices: []gobot.Device{joystick, drone}, - Work: work, - } + gbot.Robot = append(gbot.Robots, + gobot.NewRobot("ardrone", []gobot.Connection{joystickAdaptor, ardroneAdaptor}, []gobot.Device{joystick, drone}, work)) - robot.Start() + gbot.Start() } func validatePitch(data float64, offset float64) float64 { diff --git a/platforms/ardrone/ardrone_adaptor.go b/platforms/ardrone/ardrone_adaptor.go index f5891116..d9189c4c 100644 --- a/platforms/ardrone/ardrone_adaptor.go +++ b/platforms/ardrone/ardrone_adaptor.go @@ -13,8 +13,11 @@ type ArdroneAdaptor struct { connect func(*ArdroneAdaptor) } -func NewArdroneAdaptor() *ArdroneAdaptor { +func NewArdroneAdaptor(name string) *ArdroneAdaptor { return &ArdroneAdaptor{ + Adaptor: gobot.Adaptor{ + Name: name, + }, connect: func(a *ArdroneAdaptor) { d, err := client.Connect(client.DefaultConfig()) if err != nil { diff --git a/platforms/ardrone/ardrone_adaptor_test.go b/platforms/ardrone/ardrone_adaptor_test.go index 0b6997ce..cc1e043c 100644 --- a/platforms/ardrone/ardrone_adaptor_test.go +++ b/platforms/ardrone/ardrone_adaptor_test.go @@ -13,7 +13,7 @@ var _ = Describe("ArdroneAdaptor", func() { BeforeEach(func() { drone = &testDrone{} - adaptor = NewArdroneAdaptor() + adaptor = NewArdroneAdaptor("drone") adaptor.connect = func(a *ArdroneAdaptor) { a.drone = drone } diff --git a/platforms/ardrone/ardrone_driver.go b/platforms/ardrone/ardrone_driver.go index 53330577..6a120032 100644 --- a/platforms/ardrone/ardrone_driver.go +++ b/platforms/ardrone/ardrone_driver.go @@ -13,9 +13,10 @@ type DroneInterface interface { Drone() drone } -func NewArdroneDriver(adaptor DroneInterface) *ArdroneDriver { +func NewArdroneDriver(adaptor DroneInterface, name string) *ArdroneDriver { return &ArdroneDriver{ Driver: gobot.Driver{ + Name: name, Events: map[string]chan interface{}{ "Flying": make(chan interface{}, 1), }, diff --git a/platforms/ardrone/ardrone_driver_test.go b/platforms/ardrone/ardrone_driver_test.go index 811a7114..0130642c 100644 --- a/platforms/ardrone/ardrone_driver_test.go +++ b/platforms/ardrone/ardrone_driver_test.go @@ -11,11 +11,11 @@ var _ = Describe("ArdroneDriver", func() { ) BeforeEach(func() { - adaptor := NewArdroneAdaptor() + adaptor := NewArdroneAdaptor("drone") adaptor.connect = func(a *ArdroneAdaptor) { a.drone = &testDrone{} } - driver = NewArdroneDriver(adaptor) + driver = NewArdroneDriver(adaptor, "drone") adaptor.Connect() })