2014-11-29 07:34:42 +08:00
|
|
|
# Mavlink
|
2014-08-01 14:39:52 +08:00
|
|
|
|
2014-11-29 07:34:42 +08:00
|
|
|
For information on the MAVlink communication protocol click [here](http://qgroundcontrol.org/mavlink/start).
|
2014-08-01 14:39:52 +08:00
|
|
|
|
2017-04-17 15:38:55 +08:00
|
|
|
This package supports Mavlink over serial (such as a
|
|
|
|
[SiK modem](http://ardupilot.org/copter/docs/common-sik-telemetry-radio.html))
|
|
|
|
and Mavlink over UDP (such as via
|
|
|
|
[mavproxy](https://github.com/ArduPilot/MAVProxy)). Serial is useful
|
|
|
|
for point to point links, and UDP is useful for where you have
|
|
|
|
multiple simultaneous clients such as the robot and
|
|
|
|
[QGroundControl](http://qgroundcontrol.com/).
|
|
|
|
|
|
|
|
As at 2017-04, this package supports Mavlink 1.0 only. If the robot
|
|
|
|
doesn't receiving data then check that the other devices are
|
|
|
|
configured to send version 1.0 frames.
|
|
|
|
|
2014-11-29 07:34:42 +08:00
|
|
|
## How to Install
|
2014-08-01 14:39:52 +08:00
|
|
|
|
2014-11-29 07:34:42 +08:00
|
|
|
```
|
2016-12-08 20:24:03 +08:00
|
|
|
go get -d -u gobot.io/x/gobot/... && go install gobot.io/x/gobot/platforms/mavlink
|
2014-08-01 14:39:52 +08:00
|
|
|
|
2014-11-29 07:34:42 +08:00
|
|
|
```
|
|
|
|
|
|
|
|
## How to Use
|
2014-08-01 14:39:52 +08:00
|
|
|
|
|
|
|
```go
|
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
|
2016-12-08 20:24:03 +08:00
|
|
|
"gobot.io/x/gobot"
|
|
|
|
"gobot.io/x/gobot/platforms/mavlink"
|
|
|
|
common "gobot.io/x/gobot/platforms/mavlink/common"
|
2014-08-01 14:39:52 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
2016-09-26 03:44:40 +08:00
|
|
|
adaptor := mavlink.NewAdaptor("/dev/ttyACM0")
|
|
|
|
iris := mavlink.NewDriver(adaptor)
|
2014-08-01 14:39:52 +08:00
|
|
|
|
|
|
|
work := func() {
|
|
|
|
gobot.Once(iris.Event("packet"), func(data interface{}) {
|
|
|
|
packet := data.(*common.MAVLinkPacket)
|
|
|
|
|
|
|
|
dataStream := common.NewRequestDataStream(100,
|
|
|
|
packet.SystemID,
|
|
|
|
packet.ComponentID,
|
|
|
|
4,
|
|
|
|
1,
|
|
|
|
)
|
|
|
|
iris.SendPacket(common.CraftMAVLinkPacket(packet.SystemID,
|
|
|
|
packet.ComponentID,
|
|
|
|
dataStream,
|
|
|
|
))
|
|
|
|
})
|
|
|
|
|
|
|
|
gobot.On(iris.Event("message"), func(data interface{}) {
|
|
|
|
if data.(common.MAVLinkMessage).Id() == 30 {
|
|
|
|
message := data.(*common.Attitude)
|
|
|
|
fmt.Println("Attitude")
|
|
|
|
fmt.Println("TIME_BOOT_MS", message.TIME_BOOT_MS)
|
|
|
|
fmt.Println("ROLL", message.ROLL)
|
|
|
|
fmt.Println("PITCH", message.PITCH)
|
|
|
|
fmt.Println("YAW", message.YAW)
|
|
|
|
fmt.Println("ROLLSPEED", message.ROLLSPEED)
|
|
|
|
fmt.Println("PITCHSPEED", message.PITCHSPEED)
|
|
|
|
fmt.Println("YAWSPEED", message.YAWSPEED)
|
|
|
|
fmt.Println("")
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
robot := gobot.NewRobot("mavBot",
|
|
|
|
[]gobot.Connection{adaptor},
|
|
|
|
[]gobot.Device{iris},
|
|
|
|
work,
|
|
|
|
)
|
|
|
|
|
2016-10-19 03:37:10 +08:00
|
|
|
robot.Start()
|
2014-08-01 14:39:52 +08:00
|
|
|
}
|
|
|
|
```
|
2017-04-17 15:38:55 +08:00
|
|
|
|
|
|
|
## How to use: UDP
|
|
|
|
|
|
|
|
``` go
|
|
|
|
adaptor := mavlink.NewUDPAdaptor(":14550")
|
|
|
|
```
|
|
|
|
|
|
|
|
To test, install Mavproxy and set it up to listen on serial and repeat
|
|
|
|
over UDP:
|
|
|
|
|
|
|
|
`$ mavproxy.py --out=udpbcast:192.168.0.255:14550`
|
|
|
|
|
|
|
|
Change the address to the broadcast address of your subnet.
|