Gomavlib
Mavlink library (2.0 and 1.0) for the Go programming language
Install / Use
/learn @bluenviron/GomavlibREADME
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.
- Supported transports: serial, UDP (server, client or broadcast mode), TCP (server or client mode), custom reader/writer.
- Support both domain names and IPs.
- Emit heartbeats automatically.
- Send automatic stream requests to Ardupilot devices (disabled by default).
- Decode and encode Mavlink v2.0 and v1.0.
- Compute and validate checksums.
- Support all v2 features: empty-byte truncation, signatures, message extensions.
- Use dialects in multiple ways.
- Ready-to-use standard dialects are available in directory
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.
- Ready-to-use standard dialects are available in directory
- Read and write telemetry logs (tlog)
Table of contents
Installation
-
Install Go ≥ 1.25.
-
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/v3/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
Related Skills
node-connect
343.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
xurl
343.1kA CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.
frontend-design
90.0kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
343.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
