mirror of
https://github.com/hybridgroup/gobot.git
synced 2025-04-24 13:48:49 +08:00
Update ardrone adaptor, driver and examples
This commit is contained in:
parent
efbc75ebc8
commit
d32a5270f2
@ -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()
|
||||
}
|
||||
|
@ -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()
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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),
|
||||
},
|
||||
|
@ -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()
|
||||
})
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user