gomavlib
gomavlib is a library that implements the Mavlink protocol (2.0 and 1.0) in the Go programming language. It can interact with Mavlink-capable devices through a serial port, UDP, TCP or a custom transport, and it can be used to power UGVs, UAVs, ground stations, monitoring systems or routers.
Mavlink is a lightweight and transport-independent protocol that is mostly used to communicate with unmanned ground vehicles (UGV) and unmanned aerial vehicles (UAV, drones, quadcopters, multirotors). It is supported by the most popular open-source flight controllers (Ardupilot and PX4).
This library powers the mavp2p router.
Features:
- Create Mavlink nodes able to communicate with other nodes.
- Decode and encode Mavlink v2.0 and v1.0.
- Use dialects in multiple ways.
dialects/.
- Custom dialects can be defined. Aa dialect generator is available in order to convert XML definitions into their Go representation.
- Use no dialect at all. Messages can be routed without having their content decoded.
- Read and write telemetry logs (tlog)
Table of contents
Installation
- Install Go ≥ 1.26.
- Create an empty folder, open a terminal in it and initialize the Go modules system:
go mod init main
- Download one of the example files and place it in the folder.
- Compile and run:
go run name-of-the-go-file.go
Examples
- node-endpoint-serial
- node-endpoint-udp-server
- node-endpoint-udp-client
- node-endpoint-udp-broadcast
- node-endpoint-tcp-server
- node-endpoint-tcp-client
- node-endpoint-custom-client
- node-endpoint-custom-server
- node-message-read
- node-message-write
- node-command-microservice
- node-signature
- node-dialect-absent
- node-dialect-custom
- node-events
- node-router
- node-router-edit
- node-serial-to-json
- node-stream-requests
- frame-read-writer
- telemetry-log
API Documentation
Click to open the API Documentation
Dialect generation
Standard dialects are provided in the pkg/dialects/ folder, but it's also possible to use custom dialects, that can be converted into Go files by running:
go install github.com/bluenviron/gomavlib/v4/cmd/dialect-import@latest
dialect-import my_dialect.xml
Specifications
| name | area | | ---------------------------------------------------------------------------------------------------- | -------------- | | main website | protocol | | packet format | protocol | | common dialect | dialects | | Golang project layout | project layout |
Links
Related projects
Other Go libraries Other non-Go libraries