|
libmavconn package from mavros repolibmavconn mavros mavros_examples mavros_extras mavros_msgs |
ROS Distro
|
Package Summary
| Version | 2.15.1 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/mavlink/mavros.git |
| VCS Type | git |
| VCS Version | ros2 |
| Last Updated | 2026-08-24 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Vladimir Ermakov
Authors
- Vladimir Ermakov
MAVCONN library
It is mavlink connection and communication library used in MAVROS. Since 2014-11-02 it adopted to use outside from ROS environment by splitting to individual package and removing dependencies to rosconsole.
See the MAVROS documentation and the libmavconn API reference for more details.
Connection URL
Connection defined by URL.
Just pass one of that URL to MAVConnInterface::open_url() and get connection object.
Supported schemas:
- Serial:
/path/to/serial/device[:baudrate] - Serial:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - Serial with hardware flow control:
serial-hwfc:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host][:port]@[remote_host][:port][/?ids=sysid,compid] - UDP broadcast until GCS discovery:
udp-b://[bind_host][:port]@[:port][/?ids=sysid,compid] - UDP broadcast (permanent):
udp-pb://[bind_host][:port]@[:port][/?ids=sysid,compid] - TCP client:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP server:
tcp-l://[bind_port][:port][/?ids=sysid,compid]
Note: ids from URL overrides ids given by system_id & component_id parameters.
Dependencies
Same as for mavros:
- Linux host
- Asio library ( https://think-async.com/Asio/ )
- console-bridge library
- compiler with C++20 support
Shared io_service (optional)
By default each connection owns and runs its own asio::io_service thread.
For multi-connection setups you can provide a shared asio::io_service and
run it from your own thread pool.
#include <asio.hpp>
#include <mavconn/interface.hpp>
asio::io_service shared_io;
auto work = std::make_unique<asio::io_service::work>(shared_io);
std::jthread io_thread([&]() { shared_io.run(); });
auto conn = mavconn::MAVConnInterface::open_url(
"udp://0.0.0.0:14555@127.0.0.1:14550",
1, mavconn::MAV_COMP_ID_UDP_BRIDGE,
[](const mavlink::mavlink_message_t *, mavconn::Framing) {},
{},
&shared_io);
conn->close();
work.reset();
shared_io.stop();
License
Changelog for package libmavconn
2.15.1 (2026-08-22)
- libmavconn: fix serial baudrate parsing above uint16 url_parse_host hardcoded a uint16 port limit and error label, which rejected serial baudrates above 65535 (e.g. 921600) with a misleading 'invalid port value' error. Make the value range and field name configurable and allow baudrate to use the full int range. Adds a regression test covering a high valid baudrate and invalid zero/non-numeric baudrates. Fix #2265
- Merge pull request #2260 from mavlink/fix-deprecations Fix deprecations
- libmavconn: fix deprecated literal operator whitespace
- libmavconn: avoid -Wformat-security in format() with no args
- Contributors: Vladimir Ermakov
2.15.0 (2026-08-08)
-
Merge pull request #2259 from mavlink/docs-refresh docs: refresh, refactor extractor
-
docs: refresh subpackage READMEs
- mavros: point the API docs link at readthedocs/plugin reference instead of the dead wiki.ros.org page; fix ROS1 roslaunch examples to ros2 launch; note that up-to-date install instructions live in the readthedocs guide.
- mavros_extras: link to the full plugin reference.
- libmavconn: link to the docs and API reference.
- mavros_msgs: add the missing README (message/service overview + API links).
- test_mavros: mark the ROS1-era SITL hand-tests as historical.
-
Merge pull request #2256 from mavlink/try-optimize-router Optimize MAVROS router and MAVConn send path
-
libmavconn: speed up utils::format with a stack-buffer fast path The old format() called snprintf twice (once to measure, once to fill) and wrote through &ret.front()/capacity(), which is UB for empty output. Format into a small stack buffer first (single snprintf), re-formatting into a heap string only when the output exceeds it. Handles encoding errors and the empty-output case.
-
libmavconn: skip send post when chain active, use composed async_write Only the producer that turns the tx queue from idle to active posts a send handler; an in-progress chain drains everything enqueued meanwhile. This removes the per-message asio::post handler allocation and shared_from_this churn on the send path in steady state. Use composed asio::async_write for TCP/serial so partial writes are handled internally, deleting the manual MsgBuffer::pos tracking and resend loop (and the fragile capture of a reference into the tx queue).
-
libmavconn: fix serial close deadlock, add serial pair benchmark MAVConnSerial::close() held mutex while joining the io thread, while the io thread (do_read error handler) blocked on that same mutex -> deadlock. Release the mutex before shutdown_owned(), matching UDP/TCP. Add a serial throughput benchmark case over a socat PTY,link=... pair (stable device paths for both ends), now that the close hang is fixed. UDP/TCP/serial pair throughput all benchmark cleanly.
-
libmavconn: add tcp pair benchmark, make benchmark standalone Add a TCP client/server pair throughput case next to the UDP one, and rename the UDP case MavconnUdpBenchmark for naming consistency. The benchmark is kept as a standalone executable (not a CI test) because the MAVConn async close/shutdown race intermittently hangs the TCP case under the test harness; run it manually to check mavconn hot-path regressions. A serial (tty) case was attempted over a socat pty pair but dropped: it works in isolation yet reproduces the same intermittent close() hang, and the pty master has no clean device path for a second MAVConnSerial.
-
libmavconn: add end-to-end transport pair benchmark A sender/receiver MAVConn UDP pair over loopback measuring sustained message throughput through the full send (enqueue + async send) and receive (async recv + parse_buffer + callback) paths, to catch mavconn hot-path regressions.
-
libmavconn: revert pool allocator experiment (benchmark showed it slower) benchmark (deque<MsgBuffer> push/pop, ros2-lyrical, 16-core): PushPopPlain ~71 ns/op PushPopPool ~175 ns/op (~2.5x slower) PushPopPlainInline ~73 ns/op PushPopPoolInline ~185 ns/op (still ~2.5x slower even when the queue fits entirely in the inline chunk) The overhead is intrinsic per-op (chunk_of, free_list_ vector ops, in_use counters, shrink_if_idle on every release); glibc's tcache malloc/free is faster than the hand-rolled pool even for same-size blocks. Restore plain std::deque<MsgBuffer>.
-
libmavconn: experiment: pool the tx queue MsgBuffer nodes Back std::deque<MsgBuffer> with a chunked pool allocator: the first 32 blocks come from one contiguous inline array (zero alloc), further blocks from heap chunks freed when the queue drains back to
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_cmake_pytest | |
| ament_lint_auto | |
| ament_lint_common | |
| mavlink |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mavros | |
| mavros_extras |
Launch files
Messages
Services
Plugins
Recent questions tagged libmavconn at Robotics Stack Exchange
|
libmavconn package from mavros repolibmavconn mavros mavros_examples mavros_extras mavros_msgs |
ROS Distro
|
Package Summary
| Version | 2.15.1 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/mavlink/mavros.git |
| VCS Type | git |
| VCS Version | ros2 |
| Last Updated | 2026-08-24 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Vladimir Ermakov
Authors
- Vladimir Ermakov
MAVCONN library
It is mavlink connection and communication library used in MAVROS. Since 2014-11-02 it adopted to use outside from ROS environment by splitting to individual package and removing dependencies to rosconsole.
See the MAVROS documentation and the libmavconn API reference for more details.
Connection URL
Connection defined by URL.
Just pass one of that URL to MAVConnInterface::open_url() and get connection object.
Supported schemas:
- Serial:
/path/to/serial/device[:baudrate] - Serial:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - Serial with hardware flow control:
serial-hwfc:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host][:port]@[remote_host][:port][/?ids=sysid,compid] - UDP broadcast until GCS discovery:
udp-b://[bind_host][:port]@[:port][/?ids=sysid,compid] - UDP broadcast (permanent):
udp-pb://[bind_host][:port]@[:port][/?ids=sysid,compid] - TCP client:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP server:
tcp-l://[bind_port][:port][/?ids=sysid,compid]
Note: ids from URL overrides ids given by system_id & component_id parameters.
Dependencies
Same as for mavros:
- Linux host
- Asio library ( https://think-async.com/Asio/ )
- console-bridge library
- compiler with C++20 support
Shared io_service (optional)
By default each connection owns and runs its own asio::io_service thread.
For multi-connection setups you can provide a shared asio::io_service and
run it from your own thread pool.
#include <asio.hpp>
#include <mavconn/interface.hpp>
asio::io_service shared_io;
auto work = std::make_unique<asio::io_service::work>(shared_io);
std::jthread io_thread([&]() { shared_io.run(); });
auto conn = mavconn::MAVConnInterface::open_url(
"udp://0.0.0.0:14555@127.0.0.1:14550",
1, mavconn::MAV_COMP_ID_UDP_BRIDGE,
[](const mavlink::mavlink_message_t *, mavconn::Framing) {},
{},
&shared_io);
conn->close();
work.reset();
shared_io.stop();
License
Changelog for package libmavconn
2.15.1 (2026-08-22)
- libmavconn: fix serial baudrate parsing above uint16 url_parse_host hardcoded a uint16 port limit and error label, which rejected serial baudrates above 65535 (e.g. 921600) with a misleading 'invalid port value' error. Make the value range and field name configurable and allow baudrate to use the full int range. Adds a regression test covering a high valid baudrate and invalid zero/non-numeric baudrates. Fix #2265
- Merge pull request #2260 from mavlink/fix-deprecations Fix deprecations
- libmavconn: fix deprecated literal operator whitespace
- libmavconn: avoid -Wformat-security in format() with no args
- Contributors: Vladimir Ermakov
2.15.0 (2026-08-08)
-
Merge pull request #2259 from mavlink/docs-refresh docs: refresh, refactor extractor
-
docs: refresh subpackage READMEs
- mavros: point the API docs link at readthedocs/plugin reference instead of the dead wiki.ros.org page; fix ROS1 roslaunch examples to ros2 launch; note that up-to-date install instructions live in the readthedocs guide.
- mavros_extras: link to the full plugin reference.
- libmavconn: link to the docs and API reference.
- mavros_msgs: add the missing README (message/service overview + API links).
- test_mavros: mark the ROS1-era SITL hand-tests as historical.
-
Merge pull request #2256 from mavlink/try-optimize-router Optimize MAVROS router and MAVConn send path
-
libmavconn: speed up utils::format with a stack-buffer fast path The old format() called snprintf twice (once to measure, once to fill) and wrote through &ret.front()/capacity(), which is UB for empty output. Format into a small stack buffer first (single snprintf), re-formatting into a heap string only when the output exceeds it. Handles encoding errors and the empty-output case.
-
libmavconn: skip send post when chain active, use composed async_write Only the producer that turns the tx queue from idle to active posts a send handler; an in-progress chain drains everything enqueued meanwhile. This removes the per-message asio::post handler allocation and shared_from_this churn on the send path in steady state. Use composed asio::async_write for TCP/serial so partial writes are handled internally, deleting the manual MsgBuffer::pos tracking and resend loop (and the fragile capture of a reference into the tx queue).
-
libmavconn: fix serial close deadlock, add serial pair benchmark MAVConnSerial::close() held mutex while joining the io thread, while the io thread (do_read error handler) blocked on that same mutex -> deadlock. Release the mutex before shutdown_owned(), matching UDP/TCP. Add a serial throughput benchmark case over a socat PTY,link=... pair (stable device paths for both ends), now that the close hang is fixed. UDP/TCP/serial pair throughput all benchmark cleanly.
-
libmavconn: add tcp pair benchmark, make benchmark standalone Add a TCP client/server pair throughput case next to the UDP one, and rename the UDP case MavconnUdpBenchmark for naming consistency. The benchmark is kept as a standalone executable (not a CI test) because the MAVConn async close/shutdown race intermittently hangs the TCP case under the test harness; run it manually to check mavconn hot-path regressions. A serial (tty) case was attempted over a socat pty pair but dropped: it works in isolation yet reproduces the same intermittent close() hang, and the pty master has no clean device path for a second MAVConnSerial.
-
libmavconn: add end-to-end transport pair benchmark A sender/receiver MAVConn UDP pair over loopback measuring sustained message throughput through the full send (enqueue + async send) and receive (async recv + parse_buffer + callback) paths, to catch mavconn hot-path regressions.
-
libmavconn: revert pool allocator experiment (benchmark showed it slower) benchmark (deque<MsgBuffer> push/pop, ros2-lyrical, 16-core): PushPopPlain ~71 ns/op PushPopPool ~175 ns/op (~2.5x slower) PushPopPlainInline ~73 ns/op PushPopPoolInline ~185 ns/op (still ~2.5x slower even when the queue fits entirely in the inline chunk) The overhead is intrinsic per-op (chunk_of, free_list_ vector ops, in_use counters, shrink_if_idle on every release); glibc's tcache malloc/free is faster than the hand-rolled pool even for same-size blocks. Restore plain std::deque<MsgBuffer>.
-
libmavconn: experiment: pool the tx queue MsgBuffer nodes Back std::deque<MsgBuffer> with a chunked pool allocator: the first 32 blocks come from one contiguous inline array (zero alloc), further blocks from heap chunks freed when the queue drains back to
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_cmake_pytest | |
| ament_lint_auto | |
| ament_lint_common | |
| mavlink |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mavros | |
| mavros_extras |
Launch files
Messages
Services
Plugins
Recent questions tagged libmavconn at Robotics Stack Exchange
|
libmavconn package from mavros repolibmavconn mavros mavros_examples mavros_extras mavros_msgs |
ROS Distro
|
Package Summary
| Version | 2.15.1 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/mavlink/mavros.git |
| VCS Type | git |
| VCS Version | ros2 |
| Last Updated | 2026-08-24 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Vladimir Ermakov
Authors
- Vladimir Ermakov
MAVCONN library
It is mavlink connection and communication library used in MAVROS. Since 2014-11-02 it adopted to use outside from ROS environment by splitting to individual package and removing dependencies to rosconsole.
See the MAVROS documentation and the libmavconn API reference for more details.
Connection URL
Connection defined by URL.
Just pass one of that URL to MAVConnInterface::open_url() and get connection object.
Supported schemas:
- Serial:
/path/to/serial/device[:baudrate] - Serial:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - Serial with hardware flow control:
serial-hwfc:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host][:port]@[remote_host][:port][/?ids=sysid,compid] - UDP broadcast until GCS discovery:
udp-b://[bind_host][:port]@[:port][/?ids=sysid,compid] - UDP broadcast (permanent):
udp-pb://[bind_host][:port]@[:port][/?ids=sysid,compid] - TCP client:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP server:
tcp-l://[bind_port][:port][/?ids=sysid,compid]
Note: ids from URL overrides ids given by system_id & component_id parameters.
Dependencies
Same as for mavros:
- Linux host
- Asio library ( https://think-async.com/Asio/ )
- console-bridge library
- compiler with C++20 support
Shared io_service (optional)
By default each connection owns and runs its own asio::io_service thread.
For multi-connection setups you can provide a shared asio::io_service and
run it from your own thread pool.
#include <asio.hpp>
#include <mavconn/interface.hpp>
asio::io_service shared_io;
auto work = std::make_unique<asio::io_service::work>(shared_io);
std::jthread io_thread([&]() { shared_io.run(); });
auto conn = mavconn::MAVConnInterface::open_url(
"udp://0.0.0.0:14555@127.0.0.1:14550",
1, mavconn::MAV_COMP_ID_UDP_BRIDGE,
[](const mavlink::mavlink_message_t *, mavconn::Framing) {},
{},
&shared_io);
conn->close();
work.reset();
shared_io.stop();
License
Changelog for package libmavconn
2.15.1 (2026-08-22)
- libmavconn: fix serial baudrate parsing above uint16 url_parse_host hardcoded a uint16 port limit and error label, which rejected serial baudrates above 65535 (e.g. 921600) with a misleading 'invalid port value' error. Make the value range and field name configurable and allow baudrate to use the full int range. Adds a regression test covering a high valid baudrate and invalid zero/non-numeric baudrates. Fix #2265
- Merge pull request #2260 from mavlink/fix-deprecations Fix deprecations
- libmavconn: fix deprecated literal operator whitespace
- libmavconn: avoid -Wformat-security in format() with no args
- Contributors: Vladimir Ermakov
2.15.0 (2026-08-08)
-
Merge pull request #2259 from mavlink/docs-refresh docs: refresh, refactor extractor
-
docs: refresh subpackage READMEs
- mavros: point the API docs link at readthedocs/plugin reference instead of the dead wiki.ros.org page; fix ROS1 roslaunch examples to ros2 launch; note that up-to-date install instructions live in the readthedocs guide.
- mavros_extras: link to the full plugin reference.
- libmavconn: link to the docs and API reference.
- mavros_msgs: add the missing README (message/service overview + API links).
- test_mavros: mark the ROS1-era SITL hand-tests as historical.
-
Merge pull request #2256 from mavlink/try-optimize-router Optimize MAVROS router and MAVConn send path
-
libmavconn: speed up utils::format with a stack-buffer fast path The old format() called snprintf twice (once to measure, once to fill) and wrote through &ret.front()/capacity(), which is UB for empty output. Format into a small stack buffer first (single snprintf), re-formatting into a heap string only when the output exceeds it. Handles encoding errors and the empty-output case.
-
libmavconn: skip send post when chain active, use composed async_write Only the producer that turns the tx queue from idle to active posts a send handler; an in-progress chain drains everything enqueued meanwhile. This removes the per-message asio::post handler allocation and shared_from_this churn on the send path in steady state. Use composed asio::async_write for TCP/serial so partial writes are handled internally, deleting the manual MsgBuffer::pos tracking and resend loop (and the fragile capture of a reference into the tx queue).
-
libmavconn: fix serial close deadlock, add serial pair benchmark MAVConnSerial::close() held mutex while joining the io thread, while the io thread (do_read error handler) blocked on that same mutex -> deadlock. Release the mutex before shutdown_owned(), matching UDP/TCP. Add a serial throughput benchmark case over a socat PTY,link=... pair (stable device paths for both ends), now that the close hang is fixed. UDP/TCP/serial pair throughput all benchmark cleanly.
-
libmavconn: add tcp pair benchmark, make benchmark standalone Add a TCP client/server pair throughput case next to the UDP one, and rename the UDP case MavconnUdpBenchmark for naming consistency. The benchmark is kept as a standalone executable (not a CI test) because the MAVConn async close/shutdown race intermittently hangs the TCP case under the test harness; run it manually to check mavconn hot-path regressions. A serial (tty) case was attempted over a socat pty pair but dropped: it works in isolation yet reproduces the same intermittent close() hang, and the pty master has no clean device path for a second MAVConnSerial.
-
libmavconn: add end-to-end transport pair benchmark A sender/receiver MAVConn UDP pair over loopback measuring sustained message throughput through the full send (enqueue + async send) and receive (async recv + parse_buffer + callback) paths, to catch mavconn hot-path regressions.
-
libmavconn: revert pool allocator experiment (benchmark showed it slower) benchmark (deque<MsgBuffer> push/pop, ros2-lyrical, 16-core): PushPopPlain ~71 ns/op PushPopPool ~175 ns/op (~2.5x slower) PushPopPlainInline ~73 ns/op PushPopPoolInline ~185 ns/op (still ~2.5x slower even when the queue fits entirely in the inline chunk) The overhead is intrinsic per-op (chunk_of, free_list_ vector ops, in_use counters, shrink_if_idle on every release); glibc's tcache malloc/free is faster than the hand-rolled pool even for same-size blocks. Restore plain std::deque<MsgBuffer>.
-
libmavconn: experiment: pool the tx queue MsgBuffer nodes Back std::deque<MsgBuffer> with a chunked pool allocator: the first 32 blocks come from one contiguous inline array (zero alloc), further blocks from heap chunks freed when the queue drains back to
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_cmake_pytest | |
| ament_lint_auto | |
| ament_lint_common | |
| mavlink |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mavros | |
| mavros_extras |
Launch files
Messages
Services
Plugins
Recent questions tagged libmavconn at Robotics Stack Exchange
|
libmavconn package from mavros repolibmavconn mavros mavros_examples mavros_extras mavros_msgs |
ROS Distro
|
Package Summary
| Version | 2.15.1 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/mavlink/mavros.git |
| VCS Type | git |
| VCS Version | ros2 |
| Last Updated | 2026-08-24 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Vladimir Ermakov
Authors
- Vladimir Ermakov
MAVCONN library
It is mavlink connection and communication library used in MAVROS. Since 2014-11-02 it adopted to use outside from ROS environment by splitting to individual package and removing dependencies to rosconsole.
See the MAVROS documentation and the libmavconn API reference for more details.
Connection URL
Connection defined by URL.
Just pass one of that URL to MAVConnInterface::open_url() and get connection object.
Supported schemas:
- Serial:
/path/to/serial/device[:baudrate] - Serial:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - Serial with hardware flow control:
serial-hwfc:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host][:port]@[remote_host][:port][/?ids=sysid,compid] - UDP broadcast until GCS discovery:
udp-b://[bind_host][:port]@[:port][/?ids=sysid,compid] - UDP broadcast (permanent):
udp-pb://[bind_host][:port]@[:port][/?ids=sysid,compid] - TCP client:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP server:
tcp-l://[bind_port][:port][/?ids=sysid,compid]
Note: ids from URL overrides ids given by system_id & component_id parameters.
Dependencies
Same as for mavros:
- Linux host
- Asio library ( https://think-async.com/Asio/ )
- console-bridge library
- compiler with C++20 support
Shared io_service (optional)
By default each connection owns and runs its own asio::io_service thread.
For multi-connection setups you can provide a shared asio::io_service and
run it from your own thread pool.
#include <asio.hpp>
#include <mavconn/interface.hpp>
asio::io_service shared_io;
auto work = std::make_unique<asio::io_service::work>(shared_io);
std::jthread io_thread([&]() { shared_io.run(); });
auto conn = mavconn::MAVConnInterface::open_url(
"udp://0.0.0.0:14555@127.0.0.1:14550",
1, mavconn::MAV_COMP_ID_UDP_BRIDGE,
[](const mavlink::mavlink_message_t *, mavconn::Framing) {},
{},
&shared_io);
conn->close();
work.reset();
shared_io.stop();
License
Changelog for package libmavconn
2.15.1 (2026-08-22)
- libmavconn: fix serial baudrate parsing above uint16 url_parse_host hardcoded a uint16 port limit and error label, which rejected serial baudrates above 65535 (e.g. 921600) with a misleading 'invalid port value' error. Make the value range and field name configurable and allow baudrate to use the full int range. Adds a regression test covering a high valid baudrate and invalid zero/non-numeric baudrates. Fix #2265
- Merge pull request #2260 from mavlink/fix-deprecations Fix deprecations
- libmavconn: fix deprecated literal operator whitespace
- libmavconn: avoid -Wformat-security in format() with no args
- Contributors: Vladimir Ermakov
2.15.0 (2026-08-08)
-
Merge pull request #2259 from mavlink/docs-refresh docs: refresh, refactor extractor
-
docs: refresh subpackage READMEs
- mavros: point the API docs link at readthedocs/plugin reference instead of the dead wiki.ros.org page; fix ROS1 roslaunch examples to ros2 launch; note that up-to-date install instructions live in the readthedocs guide.
- mavros_extras: link to the full plugin reference.
- libmavconn: link to the docs and API reference.
- mavros_msgs: add the missing README (message/service overview + API links).
- test_mavros: mark the ROS1-era SITL hand-tests as historical.
-
Merge pull request #2256 from mavlink/try-optimize-router Optimize MAVROS router and MAVConn send path
-
libmavconn: speed up utils::format with a stack-buffer fast path The old format() called snprintf twice (once to measure, once to fill) and wrote through &ret.front()/capacity(), which is UB for empty output. Format into a small stack buffer first (single snprintf), re-formatting into a heap string only when the output exceeds it. Handles encoding errors and the empty-output case.
-
libmavconn: skip send post when chain active, use composed async_write Only the producer that turns the tx queue from idle to active posts a send handler; an in-progress chain drains everything enqueued meanwhile. This removes the per-message asio::post handler allocation and shared_from_this churn on the send path in steady state. Use composed asio::async_write for TCP/serial so partial writes are handled internally, deleting the manual MsgBuffer::pos tracking and resend loop (and the fragile capture of a reference into the tx queue).
-
libmavconn: fix serial close deadlock, add serial pair benchmark MAVConnSerial::close() held mutex while joining the io thread, while the io thread (do_read error handler) blocked on that same mutex -> deadlock. Release the mutex before shutdown_owned(), matching UDP/TCP. Add a serial throughput benchmark case over a socat PTY,link=... pair (stable device paths for both ends), now that the close hang is fixed. UDP/TCP/serial pair throughput all benchmark cleanly.
-
libmavconn: add tcp pair benchmark, make benchmark standalone Add a TCP client/server pair throughput case next to the UDP one, and rename the UDP case MavconnUdpBenchmark for naming consistency. The benchmark is kept as a standalone executable (not a CI test) because the MAVConn async close/shutdown race intermittently hangs the TCP case under the test harness; run it manually to check mavconn hot-path regressions. A serial (tty) case was attempted over a socat pty pair but dropped: it works in isolation yet reproduces the same intermittent close() hang, and the pty master has no clean device path for a second MAVConnSerial.
-
libmavconn: add end-to-end transport pair benchmark A sender/receiver MAVConn UDP pair over loopback measuring sustained message throughput through the full send (enqueue + async send) and receive (async recv + parse_buffer + callback) paths, to catch mavconn hot-path regressions.
-
libmavconn: revert pool allocator experiment (benchmark showed it slower) benchmark (deque<MsgBuffer> push/pop, ros2-lyrical, 16-core): PushPopPlain ~71 ns/op PushPopPool ~175 ns/op (~2.5x slower) PushPopPlainInline ~73 ns/op PushPopPoolInline ~185 ns/op (still ~2.5x slower even when the queue fits entirely in the inline chunk) The overhead is intrinsic per-op (chunk_of, free_list_ vector ops, in_use counters, shrink_if_idle on every release); glibc's tcache malloc/free is faster than the hand-rolled pool even for same-size blocks. Restore plain std::deque<MsgBuffer>.
-
libmavconn: experiment: pool the tx queue MsgBuffer nodes Back std::deque<MsgBuffer> with a chunked pool allocator: the first 32 blocks come from one contiguous inline array (zero alloc), further blocks from heap chunks freed when the queue drains back to
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_cmake_pytest | |
| ament_lint_auto | |
| ament_lint_common | |
| mavlink |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mavros | |
| mavros_extras |
Launch files
Messages
Services
Plugins
Recent questions tagged libmavconn at Robotics Stack Exchange
|
libmavconn package from mavros repolibmavconn mavros mavros_examples mavros_extras mavros_msgs |
ROS Distro
|
Package Summary
| Version | 2.15.1 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/mavlink/mavros.git |
| VCS Type | git |
| VCS Version | ros2 |
| Last Updated | 2026-08-24 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Vladimir Ermakov
Authors
- Vladimir Ermakov
MAVCONN library
It is mavlink connection and communication library used in MAVROS. Since 2014-11-02 it adopted to use outside from ROS environment by splitting to individual package and removing dependencies to rosconsole.
See the MAVROS documentation and the libmavconn API reference for more details.
Connection URL
Connection defined by URL.
Just pass one of that URL to MAVConnInterface::open_url() and get connection object.
Supported schemas:
- Serial:
/path/to/serial/device[:baudrate] - Serial:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - Serial with hardware flow control:
serial-hwfc:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host][:port]@[remote_host][:port][/?ids=sysid,compid] - UDP broadcast until GCS discovery:
udp-b://[bind_host][:port]@[:port][/?ids=sysid,compid] - UDP broadcast (permanent):
udp-pb://[bind_host][:port]@[:port][/?ids=sysid,compid] - TCP client:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP server:
tcp-l://[bind_port][:port][/?ids=sysid,compid]
Note: ids from URL overrides ids given by system_id & component_id parameters.
Dependencies
Same as for mavros:
- Linux host
- Asio library ( https://think-async.com/Asio/ )
- console-bridge library
- compiler with C++20 support
Shared io_service (optional)
By default each connection owns and runs its own asio::io_service thread.
For multi-connection setups you can provide a shared asio::io_service and
run it from your own thread pool.
#include <asio.hpp>
#include <mavconn/interface.hpp>
asio::io_service shared_io;
auto work = std::make_unique<asio::io_service::work>(shared_io);
std::jthread io_thread([&]() { shared_io.run(); });
auto conn = mavconn::MAVConnInterface::open_url(
"udp://0.0.0.0:14555@127.0.0.1:14550",
1, mavconn::MAV_COMP_ID_UDP_BRIDGE,
[](const mavlink::mavlink_message_t *, mavconn::Framing) {},
{},
&shared_io);
conn->close();
work.reset();
shared_io.stop();
License
Changelog for package libmavconn
2.15.1 (2026-08-22)
- libmavconn: fix serial baudrate parsing above uint16 url_parse_host hardcoded a uint16 port limit and error label, which rejected serial baudrates above 65535 (e.g. 921600) with a misleading 'invalid port value' error. Make the value range and field name configurable and allow baudrate to use the full int range. Adds a regression test covering a high valid baudrate and invalid zero/non-numeric baudrates. Fix #2265
- Merge pull request #2260 from mavlink/fix-deprecations Fix deprecations
- libmavconn: fix deprecated literal operator whitespace
- libmavconn: avoid -Wformat-security in format() with no args
- Contributors: Vladimir Ermakov
2.15.0 (2026-08-08)
-
Merge pull request #2259 from mavlink/docs-refresh docs: refresh, refactor extractor
-
docs: refresh subpackage READMEs
- mavros: point the API docs link at readthedocs/plugin reference instead of the dead wiki.ros.org page; fix ROS1 roslaunch examples to ros2 launch; note that up-to-date install instructions live in the readthedocs guide.
- mavros_extras: link to the full plugin reference.
- libmavconn: link to the docs and API reference.
- mavros_msgs: add the missing README (message/service overview + API links).
- test_mavros: mark the ROS1-era SITL hand-tests as historical.
-
Merge pull request #2256 from mavlink/try-optimize-router Optimize MAVROS router and MAVConn send path
-
libmavconn: speed up utils::format with a stack-buffer fast path The old format() called snprintf twice (once to measure, once to fill) and wrote through &ret.front()/capacity(), which is UB for empty output. Format into a small stack buffer first (single snprintf), re-formatting into a heap string only when the output exceeds it. Handles encoding errors and the empty-output case.
-
libmavconn: skip send post when chain active, use composed async_write Only the producer that turns the tx queue from idle to active posts a send handler; an in-progress chain drains everything enqueued meanwhile. This removes the per-message asio::post handler allocation and shared_from_this churn on the send path in steady state. Use composed asio::async_write for TCP/serial so partial writes are handled internally, deleting the manual MsgBuffer::pos tracking and resend loop (and the fragile capture of a reference into the tx queue).
-
libmavconn: fix serial close deadlock, add serial pair benchmark MAVConnSerial::close() held mutex while joining the io thread, while the io thread (do_read error handler) blocked on that same mutex -> deadlock. Release the mutex before shutdown_owned(), matching UDP/TCP. Add a serial throughput benchmark case over a socat PTY,link=... pair (stable device paths for both ends), now that the close hang is fixed. UDP/TCP/serial pair throughput all benchmark cleanly.
-
libmavconn: add tcp pair benchmark, make benchmark standalone Add a TCP client/server pair throughput case next to the UDP one, and rename the UDP case MavconnUdpBenchmark for naming consistency. The benchmark is kept as a standalone executable (not a CI test) because the MAVConn async close/shutdown race intermittently hangs the TCP case under the test harness; run it manually to check mavconn hot-path regressions. A serial (tty) case was attempted over a socat pty pair but dropped: it works in isolation yet reproduces the same intermittent close() hang, and the pty master has no clean device path for a second MAVConnSerial.
-
libmavconn: add end-to-end transport pair benchmark A sender/receiver MAVConn UDP pair over loopback measuring sustained message throughput through the full send (enqueue + async send) and receive (async recv + parse_buffer + callback) paths, to catch mavconn hot-path regressions.
-
libmavconn: revert pool allocator experiment (benchmark showed it slower) benchmark (deque<MsgBuffer> push/pop, ros2-lyrical, 16-core): PushPopPlain ~71 ns/op PushPopPool ~175 ns/op (~2.5x slower) PushPopPlainInline ~73 ns/op PushPopPoolInline ~185 ns/op (still ~2.5x slower even when the queue fits entirely in the inline chunk) The overhead is intrinsic per-op (chunk_of, free_list_ vector ops, in_use counters, shrink_if_idle on every release); glibc's tcache malloc/free is faster than the hand-rolled pool even for same-size blocks. Restore plain std::deque<MsgBuffer>.
-
libmavconn: experiment: pool the tx queue MsgBuffer nodes Back std::deque<MsgBuffer> with a chunked pool allocator: the first 32 blocks come from one contiguous inline array (zero alloc), further blocks from heap chunks freed when the queue drains back to
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_cmake_pytest | |
| ament_lint_auto | |
| ament_lint_common | |
| mavlink |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mavros | |
| mavros_extras |
Launch files
Messages
Services
Plugins
Recent questions tagged libmavconn at Robotics Stack Exchange
|
libmavconn package from mavros repolibmavconn mavros mavros_examples mavros_extras mavros_msgs |
ROS Distro
|
Package Summary
| Version | 2.15.1 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/mavlink/mavros.git |
| VCS Type | git |
| VCS Version | ros2 |
| Last Updated | 2026-08-24 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Vladimir Ermakov
Authors
- Vladimir Ermakov
MAVCONN library
It is mavlink connection and communication library used in MAVROS. Since 2014-11-02 it adopted to use outside from ROS environment by splitting to individual package and removing dependencies to rosconsole.
See the MAVROS documentation and the libmavconn API reference for more details.
Connection URL
Connection defined by URL.
Just pass one of that URL to MAVConnInterface::open_url() and get connection object.
Supported schemas:
- Serial:
/path/to/serial/device[:baudrate] - Serial:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - Serial with hardware flow control:
serial-hwfc:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host][:port]@[remote_host][:port][/?ids=sysid,compid] - UDP broadcast until GCS discovery:
udp-b://[bind_host][:port]@[:port][/?ids=sysid,compid] - UDP broadcast (permanent):
udp-pb://[bind_host][:port]@[:port][/?ids=sysid,compid] - TCP client:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP server:
tcp-l://[bind_port][:port][/?ids=sysid,compid]
Note: ids from URL overrides ids given by system_id & component_id parameters.
Dependencies
Same as for mavros:
- Linux host
- Asio library ( https://think-async.com/Asio/ )
- console-bridge library
- compiler with C++20 support
Shared io_service (optional)
By default each connection owns and runs its own asio::io_service thread.
For multi-connection setups you can provide a shared asio::io_service and
run it from your own thread pool.
#include <asio.hpp>
#include <mavconn/interface.hpp>
asio::io_service shared_io;
auto work = std::make_unique<asio::io_service::work>(shared_io);
std::jthread io_thread([&]() { shared_io.run(); });
auto conn = mavconn::MAVConnInterface::open_url(
"udp://0.0.0.0:14555@127.0.0.1:14550",
1, mavconn::MAV_COMP_ID_UDP_BRIDGE,
[](const mavlink::mavlink_message_t *, mavconn::Framing) {},
{},
&shared_io);
conn->close();
work.reset();
shared_io.stop();
License
Changelog for package libmavconn
2.15.1 (2026-08-22)
- libmavconn: fix serial baudrate parsing above uint16 url_parse_host hardcoded a uint16 port limit and error label, which rejected serial baudrates above 65535 (e.g. 921600) with a misleading 'invalid port value' error. Make the value range and field name configurable and allow baudrate to use the full int range. Adds a regression test covering a high valid baudrate and invalid zero/non-numeric baudrates. Fix #2265
- Merge pull request #2260 from mavlink/fix-deprecations Fix deprecations
- libmavconn: fix deprecated literal operator whitespace
- libmavconn: avoid -Wformat-security in format() with no args
- Contributors: Vladimir Ermakov
2.15.0 (2026-08-08)
-
Merge pull request #2259 from mavlink/docs-refresh docs: refresh, refactor extractor
-
docs: refresh subpackage READMEs
- mavros: point the API docs link at readthedocs/plugin reference instead of the dead wiki.ros.org page; fix ROS1 roslaunch examples to ros2 launch; note that up-to-date install instructions live in the readthedocs guide.
- mavros_extras: link to the full plugin reference.
- libmavconn: link to the docs and API reference.
- mavros_msgs: add the missing README (message/service overview + API links).
- test_mavros: mark the ROS1-era SITL hand-tests as historical.
-
Merge pull request #2256 from mavlink/try-optimize-router Optimize MAVROS router and MAVConn send path
-
libmavconn: speed up utils::format with a stack-buffer fast path The old format() called snprintf twice (once to measure, once to fill) and wrote through &ret.front()/capacity(), which is UB for empty output. Format into a small stack buffer first (single snprintf), re-formatting into a heap string only when the output exceeds it. Handles encoding errors and the empty-output case.
-
libmavconn: skip send post when chain active, use composed async_write Only the producer that turns the tx queue from idle to active posts a send handler; an in-progress chain drains everything enqueued meanwhile. This removes the per-message asio::post handler allocation and shared_from_this churn on the send path in steady state. Use composed asio::async_write for TCP/serial so partial writes are handled internally, deleting the manual MsgBuffer::pos tracking and resend loop (and the fragile capture of a reference into the tx queue).
-
libmavconn: fix serial close deadlock, add serial pair benchmark MAVConnSerial::close() held mutex while joining the io thread, while the io thread (do_read error handler) blocked on that same mutex -> deadlock. Release the mutex before shutdown_owned(), matching UDP/TCP. Add a serial throughput benchmark case over a socat PTY,link=... pair (stable device paths for both ends), now that the close hang is fixed. UDP/TCP/serial pair throughput all benchmark cleanly.
-
libmavconn: add tcp pair benchmark, make benchmark standalone Add a TCP client/server pair throughput case next to the UDP one, and rename the UDP case MavconnUdpBenchmark for naming consistency. The benchmark is kept as a standalone executable (not a CI test) because the MAVConn async close/shutdown race intermittently hangs the TCP case under the test harness; run it manually to check mavconn hot-path regressions. A serial (tty) case was attempted over a socat pty pair but dropped: it works in isolation yet reproduces the same intermittent close() hang, and the pty master has no clean device path for a second MAVConnSerial.
-
libmavconn: add end-to-end transport pair benchmark A sender/receiver MAVConn UDP pair over loopback measuring sustained message throughput through the full send (enqueue + async send) and receive (async recv + parse_buffer + callback) paths, to catch mavconn hot-path regressions.
-
libmavconn: revert pool allocator experiment (benchmark showed it slower) benchmark (deque<MsgBuffer> push/pop, ros2-lyrical, 16-core): PushPopPlain ~71 ns/op PushPopPool ~175 ns/op (~2.5x slower) PushPopPlainInline ~73 ns/op PushPopPoolInline ~185 ns/op (still ~2.5x slower even when the queue fits entirely in the inline chunk) The overhead is intrinsic per-op (chunk_of, free_list_ vector ops, in_use counters, shrink_if_idle on every release); glibc's tcache malloc/free is faster than the hand-rolled pool even for same-size blocks. Restore plain std::deque<MsgBuffer>.
-
libmavconn: experiment: pool the tx queue MsgBuffer nodes Back std::deque<MsgBuffer> with a chunked pool allocator: the first 32 blocks come from one contiguous inline array (zero alloc), further blocks from heap chunks freed when the queue drains back to
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_cmake_pytest | |
| ament_lint_auto | |
| ament_lint_common | |
| mavlink |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mavros | |
| mavros_extras |
Launch files
Messages
Services
Plugins
Recent questions tagged libmavconn at Robotics Stack Exchange
|
libmavconn package from mavros repolibmavconn mavros mavros_examples mavros_extras mavros_msgs |
ROS Distro
|
Package Summary
| Version | 2.15.1 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/mavlink/mavros.git |
| VCS Type | git |
| VCS Version | ros2 |
| Last Updated | 2026-08-24 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Vladimir Ermakov
Authors
- Vladimir Ermakov
MAVCONN library
It is mavlink connection and communication library used in MAVROS. Since 2014-11-02 it adopted to use outside from ROS environment by splitting to individual package and removing dependencies to rosconsole.
See the MAVROS documentation and the libmavconn API reference for more details.
Connection URL
Connection defined by URL.
Just pass one of that URL to MAVConnInterface::open_url() and get connection object.
Supported schemas:
- Serial:
/path/to/serial/device[:baudrate] - Serial:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - Serial with hardware flow control:
serial-hwfc:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host][:port]@[remote_host][:port][/?ids=sysid,compid] - UDP broadcast until GCS discovery:
udp-b://[bind_host][:port]@[:port][/?ids=sysid,compid] - UDP broadcast (permanent):
udp-pb://[bind_host][:port]@[:port][/?ids=sysid,compid] - TCP client:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP server:
tcp-l://[bind_port][:port][/?ids=sysid,compid]
Note: ids from URL overrides ids given by system_id & component_id parameters.
Dependencies
Same as for mavros:
- Linux host
- Asio library ( https://think-async.com/Asio/ )
- console-bridge library
- compiler with C++20 support
Shared io_service (optional)
By default each connection owns and runs its own asio::io_service thread.
For multi-connection setups you can provide a shared asio::io_service and
run it from your own thread pool.
#include <asio.hpp>
#include <mavconn/interface.hpp>
asio::io_service shared_io;
auto work = std::make_unique<asio::io_service::work>(shared_io);
std::jthread io_thread([&]() { shared_io.run(); });
auto conn = mavconn::MAVConnInterface::open_url(
"udp://0.0.0.0:14555@127.0.0.1:14550",
1, mavconn::MAV_COMP_ID_UDP_BRIDGE,
[](const mavlink::mavlink_message_t *, mavconn::Framing) {},
{},
&shared_io);
conn->close();
work.reset();
shared_io.stop();
License
Changelog for package libmavconn
2.15.1 (2026-08-22)
- libmavconn: fix serial baudrate parsing above uint16 url_parse_host hardcoded a uint16 port limit and error label, which rejected serial baudrates above 65535 (e.g. 921600) with a misleading 'invalid port value' error. Make the value range and field name configurable and allow baudrate to use the full int range. Adds a regression test covering a high valid baudrate and invalid zero/non-numeric baudrates. Fix #2265
- Merge pull request #2260 from mavlink/fix-deprecations Fix deprecations
- libmavconn: fix deprecated literal operator whitespace
- libmavconn: avoid -Wformat-security in format() with no args
- Contributors: Vladimir Ermakov
2.15.0 (2026-08-08)
-
Merge pull request #2259 from mavlink/docs-refresh docs: refresh, refactor extractor
-
docs: refresh subpackage READMEs
- mavros: point the API docs link at readthedocs/plugin reference instead of the dead wiki.ros.org page; fix ROS1 roslaunch examples to ros2 launch; note that up-to-date install instructions live in the readthedocs guide.
- mavros_extras: link to the full plugin reference.
- libmavconn: link to the docs and API reference.
- mavros_msgs: add the missing README (message/service overview + API links).
- test_mavros: mark the ROS1-era SITL hand-tests as historical.
-
Merge pull request #2256 from mavlink/try-optimize-router Optimize MAVROS router and MAVConn send path
-
libmavconn: speed up utils::format with a stack-buffer fast path The old format() called snprintf twice (once to measure, once to fill) and wrote through &ret.front()/capacity(), which is UB for empty output. Format into a small stack buffer first (single snprintf), re-formatting into a heap string only when the output exceeds it. Handles encoding errors and the empty-output case.
-
libmavconn: skip send post when chain active, use composed async_write Only the producer that turns the tx queue from idle to active posts a send handler; an in-progress chain drains everything enqueued meanwhile. This removes the per-message asio::post handler allocation and shared_from_this churn on the send path in steady state. Use composed asio::async_write for TCP/serial so partial writes are handled internally, deleting the manual MsgBuffer::pos tracking and resend loop (and the fragile capture of a reference into the tx queue).
-
libmavconn: fix serial close deadlock, add serial pair benchmark MAVConnSerial::close() held mutex while joining the io thread, while the io thread (do_read error handler) blocked on that same mutex -> deadlock. Release the mutex before shutdown_owned(), matching UDP/TCP. Add a serial throughput benchmark case over a socat PTY,link=... pair (stable device paths for both ends), now that the close hang is fixed. UDP/TCP/serial pair throughput all benchmark cleanly.
-
libmavconn: add tcp pair benchmark, make benchmark standalone Add a TCP client/server pair throughput case next to the UDP one, and rename the UDP case MavconnUdpBenchmark for naming consistency. The benchmark is kept as a standalone executable (not a CI test) because the MAVConn async close/shutdown race intermittently hangs the TCP case under the test harness; run it manually to check mavconn hot-path regressions. A serial (tty) case was attempted over a socat pty pair but dropped: it works in isolation yet reproduces the same intermittent close() hang, and the pty master has no clean device path for a second MAVConnSerial.
-
libmavconn: add end-to-end transport pair benchmark A sender/receiver MAVConn UDP pair over loopback measuring sustained message throughput through the full send (enqueue + async send) and receive (async recv + parse_buffer + callback) paths, to catch mavconn hot-path regressions.
-
libmavconn: revert pool allocator experiment (benchmark showed it slower) benchmark (deque<MsgBuffer> push/pop, ros2-lyrical, 16-core): PushPopPlain ~71 ns/op PushPopPool ~175 ns/op (~2.5x slower) PushPopPlainInline ~73 ns/op PushPopPoolInline ~185 ns/op (still ~2.5x slower even when the queue fits entirely in the inline chunk) The overhead is intrinsic per-op (chunk_of, free_list_ vector ops, in_use counters, shrink_if_idle on every release); glibc's tcache malloc/free is faster than the hand-rolled pool even for same-size blocks. Restore plain std::deque<MsgBuffer>.
-
libmavconn: experiment: pool the tx queue MsgBuffer nodes Back std::deque<MsgBuffer> with a chunked pool allocator: the first 32 blocks come from one contiguous inline array (zero alloc), further blocks from heap chunks freed when the queue drains back to
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_cmake_pytest | |
| ament_lint_auto | |
| ament_lint_common | |
| mavlink |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mavros | |
| mavros_extras |
Launch files
Messages
Services
Plugins
Recent questions tagged libmavconn at Robotics Stack Exchange
|
libmavconn package from mavros repolibmavconn mavros mavros_examples mavros_extras mavros_msgs |
ROS Distro
|
Package Summary
| Version | 2.15.1 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/mavlink/mavros.git |
| VCS Type | git |
| VCS Version | ros2 |
| Last Updated | 2026-08-24 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Vladimir Ermakov
Authors
- Vladimir Ermakov
MAVCONN library
It is mavlink connection and communication library used in MAVROS. Since 2014-11-02 it adopted to use outside from ROS environment by splitting to individual package and removing dependencies to rosconsole.
See the MAVROS documentation and the libmavconn API reference for more details.
Connection URL
Connection defined by URL.
Just pass one of that URL to MAVConnInterface::open_url() and get connection object.
Supported schemas:
- Serial:
/path/to/serial/device[:baudrate] - Serial:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - Serial with hardware flow control:
serial-hwfc:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host][:port]@[remote_host][:port][/?ids=sysid,compid] - UDP broadcast until GCS discovery:
udp-b://[bind_host][:port]@[:port][/?ids=sysid,compid] - UDP broadcast (permanent):
udp-pb://[bind_host][:port]@[:port][/?ids=sysid,compid] - TCP client:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP server:
tcp-l://[bind_port][:port][/?ids=sysid,compid]
Note: ids from URL overrides ids given by system_id & component_id parameters.
Dependencies
Same as for mavros:
- Linux host
- Asio library ( https://think-async.com/Asio/ )
- console-bridge library
- compiler with C++20 support
Shared io_service (optional)
By default each connection owns and runs its own asio::io_service thread.
For multi-connection setups you can provide a shared asio::io_service and
run it from your own thread pool.
#include <asio.hpp>
#include <mavconn/interface.hpp>
asio::io_service shared_io;
auto work = std::make_unique<asio::io_service::work>(shared_io);
std::jthread io_thread([&]() { shared_io.run(); });
auto conn = mavconn::MAVConnInterface::open_url(
"udp://0.0.0.0:14555@127.0.0.1:14550",
1, mavconn::MAV_COMP_ID_UDP_BRIDGE,
[](const mavlink::mavlink_message_t *, mavconn::Framing) {},
{},
&shared_io);
conn->close();
work.reset();
shared_io.stop();
License
Changelog for package libmavconn
2.15.1 (2026-08-22)
- libmavconn: fix serial baudrate parsing above uint16 url_parse_host hardcoded a uint16 port limit and error label, which rejected serial baudrates above 65535 (e.g. 921600) with a misleading 'invalid port value' error. Make the value range and field name configurable and allow baudrate to use the full int range. Adds a regression test covering a high valid baudrate and invalid zero/non-numeric baudrates. Fix #2265
- Merge pull request #2260 from mavlink/fix-deprecations Fix deprecations
- libmavconn: fix deprecated literal operator whitespace
- libmavconn: avoid -Wformat-security in format() with no args
- Contributors: Vladimir Ermakov
2.15.0 (2026-08-08)
-
Merge pull request #2259 from mavlink/docs-refresh docs: refresh, refactor extractor
-
docs: refresh subpackage READMEs
- mavros: point the API docs link at readthedocs/plugin reference instead of the dead wiki.ros.org page; fix ROS1 roslaunch examples to ros2 launch; note that up-to-date install instructions live in the readthedocs guide.
- mavros_extras: link to the full plugin reference.
- libmavconn: link to the docs and API reference.
- mavros_msgs: add the missing README (message/service overview + API links).
- test_mavros: mark the ROS1-era SITL hand-tests as historical.
-
Merge pull request #2256 from mavlink/try-optimize-router Optimize MAVROS router and MAVConn send path
-
libmavconn: speed up utils::format with a stack-buffer fast path The old format() called snprintf twice (once to measure, once to fill) and wrote through &ret.front()/capacity(), which is UB for empty output. Format into a small stack buffer first (single snprintf), re-formatting into a heap string only when the output exceeds it. Handles encoding errors and the empty-output case.
-
libmavconn: skip send post when chain active, use composed async_write Only the producer that turns the tx queue from idle to active posts a send handler; an in-progress chain drains everything enqueued meanwhile. This removes the per-message asio::post handler allocation and shared_from_this churn on the send path in steady state. Use composed asio::async_write for TCP/serial so partial writes are handled internally, deleting the manual MsgBuffer::pos tracking and resend loop (and the fragile capture of a reference into the tx queue).
-
libmavconn: fix serial close deadlock, add serial pair benchmark MAVConnSerial::close() held mutex while joining the io thread, while the io thread (do_read error handler) blocked on that same mutex -> deadlock. Release the mutex before shutdown_owned(), matching UDP/TCP. Add a serial throughput benchmark case over a socat PTY,link=... pair (stable device paths for both ends), now that the close hang is fixed. UDP/TCP/serial pair throughput all benchmark cleanly.
-
libmavconn: add tcp pair benchmark, make benchmark standalone Add a TCP client/server pair throughput case next to the UDP one, and rename the UDP case MavconnUdpBenchmark for naming consistency. The benchmark is kept as a standalone executable (not a CI test) because the MAVConn async close/shutdown race intermittently hangs the TCP case under the test harness; run it manually to check mavconn hot-path regressions. A serial (tty) case was attempted over a socat pty pair but dropped: it works in isolation yet reproduces the same intermittent close() hang, and the pty master has no clean device path for a second MAVConnSerial.
-
libmavconn: add end-to-end transport pair benchmark A sender/receiver MAVConn UDP pair over loopback measuring sustained message throughput through the full send (enqueue + async send) and receive (async recv + parse_buffer + callback) paths, to catch mavconn hot-path regressions.
-
libmavconn: revert pool allocator experiment (benchmark showed it slower) benchmark (deque<MsgBuffer> push/pop, ros2-lyrical, 16-core): PushPopPlain ~71 ns/op PushPopPool ~175 ns/op (~2.5x slower) PushPopPlainInline ~73 ns/op PushPopPoolInline ~185 ns/op (still ~2.5x slower even when the queue fits entirely in the inline chunk) The overhead is intrinsic per-op (chunk_of, free_list_ vector ops, in_use counters, shrink_if_idle on every release); glibc's tcache malloc/free is faster than the hand-rolled pool even for same-size blocks. Restore plain std::deque<MsgBuffer>.
-
libmavconn: experiment: pool the tx queue MsgBuffer nodes Back std::deque<MsgBuffer> with a chunked pool allocator: the first 32 blocks come from one contiguous inline array (zero alloc), further blocks from heap chunks freed when the queue drains back to
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_cmake_pytest | |
| ament_lint_auto | |
| ament_lint_common | |
| mavlink |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mavros | |
| mavros_extras |
Launch files
Messages
Services
Plugins
Recent questions tagged libmavconn at Robotics Stack Exchange
|
libmavconn package from mavros repolibmavconn mavros mavros_examples mavros_extras mavros_msgs |
ROS Distro
|
Package Summary
| Version | 2.15.1 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/mavlink/mavros.git |
| VCS Type | git |
| VCS Version | ros2 |
| Last Updated | 2026-08-24 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Vladimir Ermakov
Authors
- Vladimir Ermakov
MAVCONN library
It is mavlink connection and communication library used in MAVROS. Since 2014-11-02 it adopted to use outside from ROS environment by splitting to individual package and removing dependencies to rosconsole.
See the MAVROS documentation and the libmavconn API reference for more details.
Connection URL
Connection defined by URL.
Just pass one of that URL to MAVConnInterface::open_url() and get connection object.
Supported schemas:
- Serial:
/path/to/serial/device[:baudrate] - Serial:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - Serial with hardware flow control:
serial-hwfc:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host][:port]@[remote_host][:port][/?ids=sysid,compid] - UDP broadcast until GCS discovery:
udp-b://[bind_host][:port]@[:port][/?ids=sysid,compid] - UDP broadcast (permanent):
udp-pb://[bind_host][:port]@[:port][/?ids=sysid,compid] - TCP client:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP server:
tcp-l://[bind_port][:port][/?ids=sysid,compid]
Note: ids from URL overrides ids given by system_id & component_id parameters.
Dependencies
Same as for mavros:
- Linux host
- Asio library ( https://think-async.com/Asio/ )
- console-bridge library
- compiler with C++20 support
Shared io_service (optional)
By default each connection owns and runs its own asio::io_service thread.
For multi-connection setups you can provide a shared asio::io_service and
run it from your own thread pool.
#include <asio.hpp>
#include <mavconn/interface.hpp>
asio::io_service shared_io;
auto work = std::make_unique<asio::io_service::work>(shared_io);
std::jthread io_thread([&]() { shared_io.run(); });
auto conn = mavconn::MAVConnInterface::open_url(
"udp://0.0.0.0:14555@127.0.0.1:14550",
1, mavconn::MAV_COMP_ID_UDP_BRIDGE,
[](const mavlink::mavlink_message_t *, mavconn::Framing) {},
{},
&shared_io);
conn->close();
work.reset();
shared_io.stop();
License
Changelog for package libmavconn
2.15.1 (2026-08-22)
- libmavconn: fix serial baudrate parsing above uint16 url_parse_host hardcoded a uint16 port limit and error label, which rejected serial baudrates above 65535 (e.g. 921600) with a misleading 'invalid port value' error. Make the value range and field name configurable and allow baudrate to use the full int range. Adds a regression test covering a high valid baudrate and invalid zero/non-numeric baudrates. Fix #2265
- Merge pull request #2260 from mavlink/fix-deprecations Fix deprecations
- libmavconn: fix deprecated literal operator whitespace
- libmavconn: avoid -Wformat-security in format() with no args
- Contributors: Vladimir Ermakov
2.15.0 (2026-08-08)
-
Merge pull request #2259 from mavlink/docs-refresh docs: refresh, refactor extractor
-
docs: refresh subpackage READMEs
- mavros: point the API docs link at readthedocs/plugin reference instead of the dead wiki.ros.org page; fix ROS1 roslaunch examples to ros2 launch; note that up-to-date install instructions live in the readthedocs guide.
- mavros_extras: link to the full plugin reference.
- libmavconn: link to the docs and API reference.
- mavros_msgs: add the missing README (message/service overview + API links).
- test_mavros: mark the ROS1-era SITL hand-tests as historical.
-
Merge pull request #2256 from mavlink/try-optimize-router Optimize MAVROS router and MAVConn send path
-
libmavconn: speed up utils::format with a stack-buffer fast path The old format() called snprintf twice (once to measure, once to fill) and wrote through &ret.front()/capacity(), which is UB for empty output. Format into a small stack buffer first (single snprintf), re-formatting into a heap string only when the output exceeds it. Handles encoding errors and the empty-output case.
-
libmavconn: skip send post when chain active, use composed async_write Only the producer that turns the tx queue from idle to active posts a send handler; an in-progress chain drains everything enqueued meanwhile. This removes the per-message asio::post handler allocation and shared_from_this churn on the send path in steady state. Use composed asio::async_write for TCP/serial so partial writes are handled internally, deleting the manual MsgBuffer::pos tracking and resend loop (and the fragile capture of a reference into the tx queue).
-
libmavconn: fix serial close deadlock, add serial pair benchmark MAVConnSerial::close() held mutex while joining the io thread, while the io thread (do_read error handler) blocked on that same mutex -> deadlock. Release the mutex before shutdown_owned(), matching UDP/TCP. Add a serial throughput benchmark case over a socat PTY,link=... pair (stable device paths for both ends), now that the close hang is fixed. UDP/TCP/serial pair throughput all benchmark cleanly.
-
libmavconn: add tcp pair benchmark, make benchmark standalone Add a TCP client/server pair throughput case next to the UDP one, and rename the UDP case MavconnUdpBenchmark for naming consistency. The benchmark is kept as a standalone executable (not a CI test) because the MAVConn async close/shutdown race intermittently hangs the TCP case under the test harness; run it manually to check mavconn hot-path regressions. A serial (tty) case was attempted over a socat pty pair but dropped: it works in isolation yet reproduces the same intermittent close() hang, and the pty master has no clean device path for a second MAVConnSerial.
-
libmavconn: add end-to-end transport pair benchmark A sender/receiver MAVConn UDP pair over loopback measuring sustained message throughput through the full send (enqueue + async send) and receive (async recv + parse_buffer + callback) paths, to catch mavconn hot-path regressions.
-
libmavconn: revert pool allocator experiment (benchmark showed it slower) benchmark (deque<MsgBuffer> push/pop, ros2-lyrical, 16-core): PushPopPlain ~71 ns/op PushPopPool ~175 ns/op (~2.5x slower) PushPopPlainInline ~73 ns/op PushPopPoolInline ~185 ns/op (still ~2.5x slower even when the queue fits entirely in the inline chunk) The overhead is intrinsic per-op (chunk_of, free_list_ vector ops, in_use counters, shrink_if_idle on every release); glibc's tcache malloc/free is faster than the hand-rolled pool even for same-size blocks. Restore plain std::deque<MsgBuffer>.
-
libmavconn: experiment: pool the tx queue MsgBuffer nodes Back std::deque<MsgBuffer> with a chunked pool allocator: the first 32 blocks come from one contiguous inline array (zero alloc), further blocks from heap chunks freed when the queue drains back to
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_cmake_pytest | |
| ament_lint_auto | |
| ament_lint_common | |
| mavlink |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mavros | |
| mavros_extras |
Launch files
Messages
Services
Plugins
Recent questions tagged libmavconn at Robotics Stack Exchange
|
libmavconn package from mavros repolibmavconn mavros mavros_examples mavros_extras mavros_msgs |
ROS Distro
|
Package Summary
| Version | 2.15.1 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/mavlink/mavros.git |
| VCS Type | git |
| VCS Version | ros2 |
| Last Updated | 2026-08-24 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Vladimir Ermakov
Authors
- Vladimir Ermakov
MAVCONN library
It is mavlink connection and communication library used in MAVROS. Since 2014-11-02 it adopted to use outside from ROS environment by splitting to individual package and removing dependencies to rosconsole.
See the MAVROS documentation and the libmavconn API reference for more details.
Connection URL
Connection defined by URL.
Just pass one of that URL to MAVConnInterface::open_url() and get connection object.
Supported schemas:
- Serial:
/path/to/serial/device[:baudrate] - Serial:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - Serial with hardware flow control:
serial-hwfc:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host][:port]@[remote_host][:port][/?ids=sysid,compid] - UDP broadcast until GCS discovery:
udp-b://[bind_host][:port]@[:port][/?ids=sysid,compid] - UDP broadcast (permanent):
udp-pb://[bind_host][:port]@[:port][/?ids=sysid,compid] - TCP client:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP server:
tcp-l://[bind_port][:port][/?ids=sysid,compid]
Note: ids from URL overrides ids given by system_id & component_id parameters.
Dependencies
Same as for mavros:
- Linux host
- Asio library ( https://think-async.com/Asio/ )
- console-bridge library
- compiler with C++20 support
Shared io_service (optional)
By default each connection owns and runs its own asio::io_service thread.
For multi-connection setups you can provide a shared asio::io_service and
run it from your own thread pool.
#include <asio.hpp>
#include <mavconn/interface.hpp>
asio::io_service shared_io;
auto work = std::make_unique<asio::io_service::work>(shared_io);
std::jthread io_thread([&]() { shared_io.run(); });
auto conn = mavconn::MAVConnInterface::open_url(
"udp://0.0.0.0:14555@127.0.0.1:14550",
1, mavconn::MAV_COMP_ID_UDP_BRIDGE,
[](const mavlink::mavlink_message_t *, mavconn::Framing) {},
{},
&shared_io);
conn->close();
work.reset();
shared_io.stop();
License
Changelog for package libmavconn
2.15.1 (2026-08-22)
- libmavconn: fix serial baudrate parsing above uint16 url_parse_host hardcoded a uint16 port limit and error label, which rejected serial baudrates above 65535 (e.g. 921600) with a misleading 'invalid port value' error. Make the value range and field name configurable and allow baudrate to use the full int range. Adds a regression test covering a high valid baudrate and invalid zero/non-numeric baudrates. Fix #2265
- Merge pull request #2260 from mavlink/fix-deprecations Fix deprecations
- libmavconn: fix deprecated literal operator whitespace
- libmavconn: avoid -Wformat-security in format() with no args
- Contributors: Vladimir Ermakov
2.15.0 (2026-08-08)
-
Merge pull request #2259 from mavlink/docs-refresh docs: refresh, refactor extractor
-
docs: refresh subpackage READMEs
- mavros: point the API docs link at readthedocs/plugin reference instead of the dead wiki.ros.org page; fix ROS1 roslaunch examples to ros2 launch; note that up-to-date install instructions live in the readthedocs guide.
- mavros_extras: link to the full plugin reference.
- libmavconn: link to the docs and API reference.
- mavros_msgs: add the missing README (message/service overview + API links).
- test_mavros: mark the ROS1-era SITL hand-tests as historical.
-
Merge pull request #2256 from mavlink/try-optimize-router Optimize MAVROS router and MAVConn send path
-
libmavconn: speed up utils::format with a stack-buffer fast path The old format() called snprintf twice (once to measure, once to fill) and wrote through &ret.front()/capacity(), which is UB for empty output. Format into a small stack buffer first (single snprintf), re-formatting into a heap string only when the output exceeds it. Handles encoding errors and the empty-output case.
-
libmavconn: skip send post when chain active, use composed async_write Only the producer that turns the tx queue from idle to active posts a send handler; an in-progress chain drains everything enqueued meanwhile. This removes the per-message asio::post handler allocation and shared_from_this churn on the send path in steady state. Use composed asio::async_write for TCP/serial so partial writes are handled internally, deleting the manual MsgBuffer::pos tracking and resend loop (and the fragile capture of a reference into the tx queue).
-
libmavconn: fix serial close deadlock, add serial pair benchmark MAVConnSerial::close() held mutex while joining the io thread, while the io thread (do_read error handler) blocked on that same mutex -> deadlock. Release the mutex before shutdown_owned(), matching UDP/TCP. Add a serial throughput benchmark case over a socat PTY,link=... pair (stable device paths for both ends), now that the close hang is fixed. UDP/TCP/serial pair throughput all benchmark cleanly.
-
libmavconn: add tcp pair benchmark, make benchmark standalone Add a TCP client/server pair throughput case next to the UDP one, and rename the UDP case MavconnUdpBenchmark for naming consistency. The benchmark is kept as a standalone executable (not a CI test) because the MAVConn async close/shutdown race intermittently hangs the TCP case under the test harness; run it manually to check mavconn hot-path regressions. A serial (tty) case was attempted over a socat pty pair but dropped: it works in isolation yet reproduces the same intermittent close() hang, and the pty master has no clean device path for a second MAVConnSerial.
-
libmavconn: add end-to-end transport pair benchmark A sender/receiver MAVConn UDP pair over loopback measuring sustained message throughput through the full send (enqueue + async send) and receive (async recv + parse_buffer + callback) paths, to catch mavconn hot-path regressions.
-
libmavconn: revert pool allocator experiment (benchmark showed it slower) benchmark (deque<MsgBuffer> push/pop, ros2-lyrical, 16-core): PushPopPlain ~71 ns/op PushPopPool ~175 ns/op (~2.5x slower) PushPopPlainInline ~73 ns/op PushPopPoolInline ~185 ns/op (still ~2.5x slower even when the queue fits entirely in the inline chunk) The overhead is intrinsic per-op (chunk_of, free_list_ vector ops, in_use counters, shrink_if_idle on every release); glibc's tcache malloc/free is faster than the hand-rolled pool even for same-size blocks. Restore plain std::deque<MsgBuffer>.
-
libmavconn: experiment: pool the tx queue MsgBuffer nodes Back std::deque<MsgBuffer> with a chunked pool allocator: the first 32 blocks come from one contiguous inline array (zero alloc), further blocks from heap chunks freed when the queue drains back to
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_cmake_pytest | |
| ament_lint_auto | |
| ament_lint_common | |
| mavlink |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mavros | |
| mavros_extras |
Launch files
Messages
Services
Plugins
Recent questions tagged libmavconn at Robotics Stack Exchange
|
libmavconn package from mavros repolibmavconn mavros mavros_examples mavros_extras mavros_msgs |
ROS Distro
|
Package Summary
| Version | 2.15.1 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/mavlink/mavros.git |
| VCS Type | git |
| VCS Version | ros2 |
| Last Updated | 2026-08-24 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Vladimir Ermakov
Authors
- Vladimir Ermakov
MAVCONN library
It is mavlink connection and communication library used in MAVROS. Since 2014-11-02 it adopted to use outside from ROS environment by splitting to individual package and removing dependencies to rosconsole.
See the MAVROS documentation and the libmavconn API reference for more details.
Connection URL
Connection defined by URL.
Just pass one of that URL to MAVConnInterface::open_url() and get connection object.
Supported schemas:
- Serial:
/path/to/serial/device[:baudrate] - Serial:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - Serial with hardware flow control:
serial-hwfc:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host][:port]@[remote_host][:port][/?ids=sysid,compid] - UDP broadcast until GCS discovery:
udp-b://[bind_host][:port]@[:port][/?ids=sysid,compid] - UDP broadcast (permanent):
udp-pb://[bind_host][:port]@[:port][/?ids=sysid,compid] - TCP client:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP server:
tcp-l://[bind_port][:port][/?ids=sysid,compid]
Note: ids from URL overrides ids given by system_id & component_id parameters.
Dependencies
Same as for mavros:
- Linux host
- Asio library ( https://think-async.com/Asio/ )
- console-bridge library
- compiler with C++20 support
Shared io_service (optional)
By default each connection owns and runs its own asio::io_service thread.
For multi-connection setups you can provide a shared asio::io_service and
run it from your own thread pool.
#include <asio.hpp>
#include <mavconn/interface.hpp>
asio::io_service shared_io;
auto work = std::make_unique<asio::io_service::work>(shared_io);
std::jthread io_thread([&]() { shared_io.run(); });
auto conn = mavconn::MAVConnInterface::open_url(
"udp://0.0.0.0:14555@127.0.0.1:14550",
1, mavconn::MAV_COMP_ID_UDP_BRIDGE,
[](const mavlink::mavlink_message_t *, mavconn::Framing) {},
{},
&shared_io);
conn->close();
work.reset();
shared_io.stop();
License
Changelog for package libmavconn
2.15.1 (2026-08-22)
- libmavconn: fix serial baudrate parsing above uint16 url_parse_host hardcoded a uint16 port limit and error label, which rejected serial baudrates above 65535 (e.g. 921600) with a misleading 'invalid port value' error. Make the value range and field name configurable and allow baudrate to use the full int range. Adds a regression test covering a high valid baudrate and invalid zero/non-numeric baudrates. Fix #2265
- Merge pull request #2260 from mavlink/fix-deprecations Fix deprecations
- libmavconn: fix deprecated literal operator whitespace
- libmavconn: avoid -Wformat-security in format() with no args
- Contributors: Vladimir Ermakov
2.15.0 (2026-08-08)
-
Merge pull request #2259 from mavlink/docs-refresh docs: refresh, refactor extractor
-
docs: refresh subpackage READMEs
- mavros: point the API docs link at readthedocs/plugin reference instead of the dead wiki.ros.org page; fix ROS1 roslaunch examples to ros2 launch; note that up-to-date install instructions live in the readthedocs guide.
- mavros_extras: link to the full plugin reference.
- libmavconn: link to the docs and API reference.
- mavros_msgs: add the missing README (message/service overview + API links).
- test_mavros: mark the ROS1-era SITL hand-tests as historical.
-
Merge pull request #2256 from mavlink/try-optimize-router Optimize MAVROS router and MAVConn send path
-
libmavconn: speed up utils::format with a stack-buffer fast path The old format() called snprintf twice (once to measure, once to fill) and wrote through &ret.front()/capacity(), which is UB for empty output. Format into a small stack buffer first (single snprintf), re-formatting into a heap string only when the output exceeds it. Handles encoding errors and the empty-output case.
-
libmavconn: skip send post when chain active, use composed async_write Only the producer that turns the tx queue from idle to active posts a send handler; an in-progress chain drains everything enqueued meanwhile. This removes the per-message asio::post handler allocation and shared_from_this churn on the send path in steady state. Use composed asio::async_write for TCP/serial so partial writes are handled internally, deleting the manual MsgBuffer::pos tracking and resend loop (and the fragile capture of a reference into the tx queue).
-
libmavconn: fix serial close deadlock, add serial pair benchmark MAVConnSerial::close() held mutex while joining the io thread, while the io thread (do_read error handler) blocked on that same mutex -> deadlock. Release the mutex before shutdown_owned(), matching UDP/TCP. Add a serial throughput benchmark case over a socat PTY,link=... pair (stable device paths for both ends), now that the close hang is fixed. UDP/TCP/serial pair throughput all benchmark cleanly.
-
libmavconn: add tcp pair benchmark, make benchmark standalone Add a TCP client/server pair throughput case next to the UDP one, and rename the UDP case MavconnUdpBenchmark for naming consistency. The benchmark is kept as a standalone executable (not a CI test) because the MAVConn async close/shutdown race intermittently hangs the TCP case under the test harness; run it manually to check mavconn hot-path regressions. A serial (tty) case was attempted over a socat pty pair but dropped: it works in isolation yet reproduces the same intermittent close() hang, and the pty master has no clean device path for a second MAVConnSerial.
-
libmavconn: add end-to-end transport pair benchmark A sender/receiver MAVConn UDP pair over loopback measuring sustained message throughput through the full send (enqueue + async send) and receive (async recv + parse_buffer + callback) paths, to catch mavconn hot-path regressions.
-
libmavconn: revert pool allocator experiment (benchmark showed it slower) benchmark (deque<MsgBuffer> push/pop, ros2-lyrical, 16-core): PushPopPlain ~71 ns/op PushPopPool ~175 ns/op (~2.5x slower) PushPopPlainInline ~73 ns/op PushPopPoolInline ~185 ns/op (still ~2.5x slower even when the queue fits entirely in the inline chunk) The overhead is intrinsic per-op (chunk_of, free_list_ vector ops, in_use counters, shrink_if_idle on every release); glibc's tcache malloc/free is faster than the hand-rolled pool even for same-size blocks. Restore plain std::deque<MsgBuffer>.
-
libmavconn: experiment: pool the tx queue MsgBuffer nodes Back std::deque<MsgBuffer> with a chunked pool allocator: the first 32 blocks come from one contiguous inline array (zero alloc), further blocks from heap chunks freed when the queue drains back to
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_cmake_pytest | |
| ament_lint_auto | |
| ament_lint_common | |
| mavlink |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mavros | |
| mavros_extras |
Launch files
Messages
Services
Plugins
Recent questions tagged libmavconn at Robotics Stack Exchange
|
libmavconn package from mavros repolibmavconn mavros mavros_examples mavros_extras mavros_msgs |
ROS Distro
|
Package Summary
| Version | 2.15.1 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/mavlink/mavros.git |
| VCS Type | git |
| VCS Version | ros2 |
| Last Updated | 2026-08-24 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Vladimir Ermakov
Authors
- Vladimir Ermakov
MAVCONN library
It is mavlink connection and communication library used in MAVROS. Since 2014-11-02 it adopted to use outside from ROS environment by splitting to individual package and removing dependencies to rosconsole.
See the MAVROS documentation and the libmavconn API reference for more details.
Connection URL
Connection defined by URL.
Just pass one of that URL to MAVConnInterface::open_url() and get connection object.
Supported schemas:
- Serial:
/path/to/serial/device[:baudrate] - Serial:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - Serial with hardware flow control:
serial-hwfc:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host][:port]@[remote_host][:port][/?ids=sysid,compid] - UDP broadcast until GCS discovery:
udp-b://[bind_host][:port]@[:port][/?ids=sysid,compid] - UDP broadcast (permanent):
udp-pb://[bind_host][:port]@[:port][/?ids=sysid,compid] - TCP client:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP server:
tcp-l://[bind_port][:port][/?ids=sysid,compid]
Note: ids from URL overrides ids given by system_id & component_id parameters.
Dependencies
Same as for mavros:
- Linux host
- Asio library ( https://think-async.com/Asio/ )
- console-bridge library
- compiler with C++20 support
Shared io_service (optional)
By default each connection owns and runs its own asio::io_service thread.
For multi-connection setups you can provide a shared asio::io_service and
run it from your own thread pool.
#include <asio.hpp>
#include <mavconn/interface.hpp>
asio::io_service shared_io;
auto work = std::make_unique<asio::io_service::work>(shared_io);
std::jthread io_thread([&]() { shared_io.run(); });
auto conn = mavconn::MAVConnInterface::open_url(
"udp://0.0.0.0:14555@127.0.0.1:14550",
1, mavconn::MAV_COMP_ID_UDP_BRIDGE,
[](const mavlink::mavlink_message_t *, mavconn::Framing) {},
{},
&shared_io);
conn->close();
work.reset();
shared_io.stop();
License
Changelog for package libmavconn
2.15.1 (2026-08-22)
- libmavconn: fix serial baudrate parsing above uint16 url_parse_host hardcoded a uint16 port limit and error label, which rejected serial baudrates above 65535 (e.g. 921600) with a misleading 'invalid port value' error. Make the value range and field name configurable and allow baudrate to use the full int range. Adds a regression test covering a high valid baudrate and invalid zero/non-numeric baudrates. Fix #2265
- Merge pull request #2260 from mavlink/fix-deprecations Fix deprecations
- libmavconn: fix deprecated literal operator whitespace
- libmavconn: avoid -Wformat-security in format() with no args
- Contributors: Vladimir Ermakov
2.15.0 (2026-08-08)
-
Merge pull request #2259 from mavlink/docs-refresh docs: refresh, refactor extractor
-
docs: refresh subpackage READMEs
- mavros: point the API docs link at readthedocs/plugin reference instead of the dead wiki.ros.org page; fix ROS1 roslaunch examples to ros2 launch; note that up-to-date install instructions live in the readthedocs guide.
- mavros_extras: link to the full plugin reference.
- libmavconn: link to the docs and API reference.
- mavros_msgs: add the missing README (message/service overview + API links).
- test_mavros: mark the ROS1-era SITL hand-tests as historical.
-
Merge pull request #2256 from mavlink/try-optimize-router Optimize MAVROS router and MAVConn send path
-
libmavconn: speed up utils::format with a stack-buffer fast path The old format() called snprintf twice (once to measure, once to fill) and wrote through &ret.front()/capacity(), which is UB for empty output. Format into a small stack buffer first (single snprintf), re-formatting into a heap string only when the output exceeds it. Handles encoding errors and the empty-output case.
-
libmavconn: skip send post when chain active, use composed async_write Only the producer that turns the tx queue from idle to active posts a send handler; an in-progress chain drains everything enqueued meanwhile. This removes the per-message asio::post handler allocation and shared_from_this churn on the send path in steady state. Use composed asio::async_write for TCP/serial so partial writes are handled internally, deleting the manual MsgBuffer::pos tracking and resend loop (and the fragile capture of a reference into the tx queue).
-
libmavconn: fix serial close deadlock, add serial pair benchmark MAVConnSerial::close() held mutex while joining the io thread, while the io thread (do_read error handler) blocked on that same mutex -> deadlock. Release the mutex before shutdown_owned(), matching UDP/TCP. Add a serial throughput benchmark case over a socat PTY,link=... pair (stable device paths for both ends), now that the close hang is fixed. UDP/TCP/serial pair throughput all benchmark cleanly.
-
libmavconn: add tcp pair benchmark, make benchmark standalone Add a TCP client/server pair throughput case next to the UDP one, and rename the UDP case MavconnUdpBenchmark for naming consistency. The benchmark is kept as a standalone executable (not a CI test) because the MAVConn async close/shutdown race intermittently hangs the TCP case under the test harness; run it manually to check mavconn hot-path regressions. A serial (tty) case was attempted over a socat pty pair but dropped: it works in isolation yet reproduces the same intermittent close() hang, and the pty master has no clean device path for a second MAVConnSerial.
-
libmavconn: add end-to-end transport pair benchmark A sender/receiver MAVConn UDP pair over loopback measuring sustained message throughput through the full send (enqueue + async send) and receive (async recv + parse_buffer + callback) paths, to catch mavconn hot-path regressions.
-
libmavconn: revert pool allocator experiment (benchmark showed it slower) benchmark (deque<MsgBuffer> push/pop, ros2-lyrical, 16-core): PushPopPlain ~71 ns/op PushPopPool ~175 ns/op (~2.5x slower) PushPopPlainInline ~73 ns/op PushPopPoolInline ~185 ns/op (still ~2.5x slower even when the queue fits entirely in the inline chunk) The overhead is intrinsic per-op (chunk_of, free_list_ vector ops, in_use counters, shrink_if_idle on every release); glibc's tcache malloc/free is faster than the hand-rolled pool even for same-size blocks. Restore plain std::deque<MsgBuffer>.
-
libmavconn: experiment: pool the tx queue MsgBuffer nodes Back std::deque<MsgBuffer> with a chunked pool allocator: the first 32 blocks come from one contiguous inline array (zero alloc), further blocks from heap chunks freed when the queue drains back to
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_cmake_pytest | |
| ament_lint_auto | |
| ament_lint_common | |
| mavlink |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mavros | |
| mavros_extras |
Launch files
Messages
Services
Plugins
Recent questions tagged libmavconn at Robotics Stack Exchange
|
libmavconn package from mavros repolibmavconn mavros mavros_examples mavros_extras mavros_msgs |
ROS Distro
|
Package Summary
| Version | 2.15.1 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/mavlink/mavros.git |
| VCS Type | git |
| VCS Version | ros2 |
| Last Updated | 2026-08-24 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Vladimir Ermakov
Authors
- Vladimir Ermakov
MAVCONN library
It is mavlink connection and communication library used in MAVROS. Since 2014-11-02 it adopted to use outside from ROS environment by splitting to individual package and removing dependencies to rosconsole.
See the MAVROS documentation and the libmavconn API reference for more details.
Connection URL
Connection defined by URL.
Just pass one of that URL to MAVConnInterface::open_url() and get connection object.
Supported schemas:
- Serial:
/path/to/serial/device[:baudrate] - Serial:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - Serial with hardware flow control:
serial-hwfc:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host][:port]@[remote_host][:port][/?ids=sysid,compid] - UDP broadcast until GCS discovery:
udp-b://[bind_host][:port]@[:port][/?ids=sysid,compid] - UDP broadcast (permanent):
udp-pb://[bind_host][:port]@[:port][/?ids=sysid,compid] - TCP client:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP server:
tcp-l://[bind_port][:port][/?ids=sysid,compid]
Note: ids from URL overrides ids given by system_id & component_id parameters.
Dependencies
Same as for mavros:
- Linux host
- Asio library ( https://think-async.com/Asio/ )
- console-bridge library
- compiler with C++20 support
Shared io_service (optional)
By default each connection owns and runs its own asio::io_service thread.
For multi-connection setups you can provide a shared asio::io_service and
run it from your own thread pool.
#include <asio.hpp>
#include <mavconn/interface.hpp>
asio::io_service shared_io;
auto work = std::make_unique<asio::io_service::work>(shared_io);
std::jthread io_thread([&]() { shared_io.run(); });
auto conn = mavconn::MAVConnInterface::open_url(
"udp://0.0.0.0:14555@127.0.0.1:14550",
1, mavconn::MAV_COMP_ID_UDP_BRIDGE,
[](const mavlink::mavlink_message_t *, mavconn::Framing) {},
{},
&shared_io);
conn->close();
work.reset();
shared_io.stop();
License
Changelog for package libmavconn
2.15.1 (2026-08-22)
- libmavconn: fix serial baudrate parsing above uint16 url_parse_host hardcoded a uint16 port limit and error label, which rejected serial baudrates above 65535 (e.g. 921600) with a misleading 'invalid port value' error. Make the value range and field name configurable and allow baudrate to use the full int range. Adds a regression test covering a high valid baudrate and invalid zero/non-numeric baudrates. Fix #2265
- Merge pull request #2260 from mavlink/fix-deprecations Fix deprecations
- libmavconn: fix deprecated literal operator whitespace
- libmavconn: avoid -Wformat-security in format() with no args
- Contributors: Vladimir Ermakov
2.15.0 (2026-08-08)
-
Merge pull request #2259 from mavlink/docs-refresh docs: refresh, refactor extractor
-
docs: refresh subpackage READMEs
- mavros: point the API docs link at readthedocs/plugin reference instead of the dead wiki.ros.org page; fix ROS1 roslaunch examples to ros2 launch; note that up-to-date install instructions live in the readthedocs guide.
- mavros_extras: link to the full plugin reference.
- libmavconn: link to the docs and API reference.
- mavros_msgs: add the missing README (message/service overview + API links).
- test_mavros: mark the ROS1-era SITL hand-tests as historical.
-
Merge pull request #2256 from mavlink/try-optimize-router Optimize MAVROS router and MAVConn send path
-
libmavconn: speed up utils::format with a stack-buffer fast path The old format() called snprintf twice (once to measure, once to fill) and wrote through &ret.front()/capacity(), which is UB for empty output. Format into a small stack buffer first (single snprintf), re-formatting into a heap string only when the output exceeds it. Handles encoding errors and the empty-output case.
-
libmavconn: skip send post when chain active, use composed async_write Only the producer that turns the tx queue from idle to active posts a send handler; an in-progress chain drains everything enqueued meanwhile. This removes the per-message asio::post handler allocation and shared_from_this churn on the send path in steady state. Use composed asio::async_write for TCP/serial so partial writes are handled internally, deleting the manual MsgBuffer::pos tracking and resend loop (and the fragile capture of a reference into the tx queue).
-
libmavconn: fix serial close deadlock, add serial pair benchmark MAVConnSerial::close() held mutex while joining the io thread, while the io thread (do_read error handler) blocked on that same mutex -> deadlock. Release the mutex before shutdown_owned(), matching UDP/TCP. Add a serial throughput benchmark case over a socat PTY,link=... pair (stable device paths for both ends), now that the close hang is fixed. UDP/TCP/serial pair throughput all benchmark cleanly.
-
libmavconn: add tcp pair benchmark, make benchmark standalone Add a TCP client/server pair throughput case next to the UDP one, and rename the UDP case MavconnUdpBenchmark for naming consistency. The benchmark is kept as a standalone executable (not a CI test) because the MAVConn async close/shutdown race intermittently hangs the TCP case under the test harness; run it manually to check mavconn hot-path regressions. A serial (tty) case was attempted over a socat pty pair but dropped: it works in isolation yet reproduces the same intermittent close() hang, and the pty master has no clean device path for a second MAVConnSerial.
-
libmavconn: add end-to-end transport pair benchmark A sender/receiver MAVConn UDP pair over loopback measuring sustained message throughput through the full send (enqueue + async send) and receive (async recv + parse_buffer + callback) paths, to catch mavconn hot-path regressions.
-
libmavconn: revert pool allocator experiment (benchmark showed it slower) benchmark (deque<MsgBuffer> push/pop, ros2-lyrical, 16-core): PushPopPlain ~71 ns/op PushPopPool ~175 ns/op (~2.5x slower) PushPopPlainInline ~73 ns/op PushPopPoolInline ~185 ns/op (still ~2.5x slower even when the queue fits entirely in the inline chunk) The overhead is intrinsic per-op (chunk_of, free_list_ vector ops, in_use counters, shrink_if_idle on every release); glibc's tcache malloc/free is faster than the hand-rolled pool even for same-size blocks. Restore plain std::deque<MsgBuffer>.
-
libmavconn: experiment: pool the tx queue MsgBuffer nodes Back std::deque<MsgBuffer> with a chunked pool allocator: the first 32 blocks come from one contiguous inline array (zero alloc), further blocks from heap chunks freed when the queue drains back to
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_gtest | |
| ament_cmake_pytest | |
| ament_lint_auto | |
| ament_lint_common | |
| mavlink |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mavros | |
| mavros_extras |
Launch files
Messages
Services
Plugins
Recent questions tagged libmavconn at Robotics Stack Exchange
|
libmavconn package from mavros repolibmavconn mavros mavros_extras mavros_msgs test_mavros |
ROS Distro
|
Package Summary
| Version | 1.21.1 |
| License | GPLv3 |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/mavlink/mavros.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2025-12-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Vladimir Ermakov
Authors
- Vladimir Ermakov
MAVCONN library
It is mavlink connection and communication library used in MAVROS. Since 2014-11-02 it adopted to use outside from ROS environment by splitting to individual package and removing dependencies to rosconsole.
Connection URL
Connection defined by URL.
Just pass one of that URL to MAVConnInterface::open_url() and get connection object.
Supported schemas:
- Serial:
/path/to/serial/device[:baudrate] - Serial:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - Serial with hardware flow control:
serial-hwfc:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host][:port]@[remote_host][:port][/?ids=sysid,compid] - UDP broadcast until GCS discovery:
udp-b://[bind_host][:port]@[:port][/?ids=sysid,compid] - UDP broadcast (permanent):
udp-pb://[bind_host][:port]@[:port][/?ids=sysid,compid] - TCP client:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP server:
tcp-l://[bind_port][:port][/?ids=sysid,compid]
Note: ids from URL overrides ids given by system_id & component_id parameters.
Dependencies
Same as for mavros:
- Linux host
- Boost >= 1.46 (used Boost.ASIO)
- console-bridge library
- compiller with C++11 support
License
Changelog for package libmavconn
1.21.1 (2025-12-12)
1.21.0 (2025-09-08)
- regenerate all
- Contributors: Vladimir Ermakov
1.20.1 (2025-05-05)
1.20.0 (2024-10-10)
1.19.0 (2024-06-06)
1.18.0 (2024-03-03)
1.17.0 (2023-09-09)
- Merge pull request #1865 from scoutdi/warnings Fix / suppress some build warnings
- Suppress warnings from included headers
- Contributors: Morten Fyhn Amundsen, Vladimir Ermakov
1.16.0 (2023-05-05)
1.15.0 (2022-12-30)
- Merge pull request #1794 from rossizero/master libmavconn: fix MAVLink v1.0 output selection
- libmavconn: fix MAVLink v1.0 output selection Fix #1787
- Contributors: Vladimir Ermakov, rosrunne
1.14.0 (2022-09-24)
- libmavconn: fix MAVLink v1.0 output selection Fix #1787
- Merge pull request #1775 from acxz/find-geographiclib use already installed FindGeographicLib.cmake
- use already installed FindGeographicLib.cmake
- Contributors: Vladimir Ermakov, acxz
1.13.0 (2022-01-13)
1.12.2 (2021-12-12)
1.12.1 (2021-11-29)
- mavconn: fix connection issue introduced by #1658
- Contributors: Vladimir Ermakov
1.12.0 (2021-11-27)
-
Merge pull request #1658 from asherikov/as_bugfixes Fix multiple bugs
-
Fix multiple bugs
- fix bad_weak_ptr on connect and disconnect
- introduce new API to avoid thread race when assigning callbacks
- fix uninitialized variable in TCP client constructor which would randomly block TCP server This is an API breaking change: if client code creates connections using make_shared<>() instead of open_url(), it is now necessary to call new connect() method explicitly.
-
Contributors: Alexander Sherikov, Vladimir Ermakov
1.11.1 (2021-11-24)
1.11.0 (2021-11-24)
1.10.0 (2021-11-04)
- Merge pull request #1626 from valbok/crash_on_shutdown Show ENOTCONN error instead of crash on socket's shutdown
- Show ENOTCONN error instead of crash When a client suddenly drops the connection, socket.shutdown() will throw an exception: boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> > what(): shutdown: Transport endpoint is not connected Showing an error in this common case looks more reasonable than crashing.
- Contributors: Val Doroshchuk, Vladimir Ermakov
1.9.0 (2021-09-09)
1.8.0 (2021-05-05)
1.7.1 (2021-04-05)
1.7.0 (2021-04-05)
File truncated at 100 lines see the full file
Launch files
Messages
Services
Plugins
Recent questions tagged libmavconn at Robotics Stack Exchange
|
libmavconn package from mavros repolibmavconn mavros mavros_extras mavros_msgs test_mavros |
ROS Distro
|
Package Summary
| Version | 0.17.5 |
| License | GPLv3 |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/mavlink/mavros.git |
| VCS Type | git |
| VCS Version | indigo-devel |
| Last Updated | 2017-02-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Vladimir Ermakov
Authors
- Vladimir Ermakov
MAVCONN library
It is mavlink connection and communication library used in MAVROS. Since 2014-11-02 it adopted to use outside from ROS environment by splitting to individual package and removing dependencies to rosconsole.
Connection URL
Connection defined by URL.
Just pass one of that URL to MAVConnInterface::open_url() and get connection object.
Supported schemas:
- Serial:
/path/to/serial/device[:baudrate] - Serial:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host[:port]]@[remote_host[:port]][/?ids=sysid,compid] - TCP client:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP server:
tcp-l://[bind_port][:port][/?ids=sysid,compid]
Note: ids from URL overrides ids given by system_id & component_id parameters.
Dependencies
Same as for mavros:
- Linux host
- Boost >= 1.46 (used Boost.ASIO and Boost.Signals2)
- console-bridge library
- compiller with C++11 support
License
Changelog for package libmavconn
0.17.5 (2017-02-07)
- Pthread fix for OSX
(#650)
- fix pthread and missing defines for osx
- adapted their style using tabs
- fix elif to else
- Contributors: Fadri Furrer
0.17.4 (2016-06-23)
0.17.3 (2016-05-20)
- libmavconn #543: support build with mavlink 2.0 capable mavgen
- Contributors: Vladimir Ermakov
0.17.2 (2016-04-29)
0.17.1 (2016-03-28)
- MAVConnSerial: Stop io_service before closing serial device (Fixes #130) The serial device was closed before calling io_service.stop() so io_<service::run>() never returned, leading to hang on join in MAVConnSerial::close()
Backtrace:
#0 0x00007f80217e966b in pthread_join (threadid=140188059690752, thread_return=0x0) at pthread_join.c:92
#1 0x00007f80215602d7 in std::thread::join() ()
#2 0x00007f8020ccc674 in mavconn::MAVConnSerial::close() ()
#3 0x00007f8020ccc6f5 in mavconn::MAVConnSerial::~MAVConnSerial() ()
#4 0x00007f8020cc7b2e in boost::detail::sp_counted_impl_pd<mavconn::MAVConnSerial*, boost::detail::sp_ms_deleter<mavconn::MAVConnSerial> >::dispose() ()
#5 0x000000000040ee0a in boost::detail::sp_counted_base::release() [clone .part.27] [clone .constprop.472] ()
#6 0x000000000041eb22 in mavros::MavRos::~MavRos() ()
#7 0x000000000040eb38 in main ()
- Contributors: Kartik Mohta
0.17.0 (2016-02-09)
- rebased with master
- Contributors: francois
0.16.6 (2016-02-04)
0.16.5 (2016-01-11)
0.16.4 (2015-12-14)
- libmavconn #452: remove pixhawk, add paparazzi dialects. Mavlink package provide information about known dialects, so we do not touch mavlink_dialect.h selection ifs.
- Contributors: Vladimir Ermakov
0.16.3 (2015-11-19)
0.16.2 (2015-11-17)
0.16.1 (2015-11-13)
0.16.0 (2015-11-09)
0.15.0 (2015-09-17)
0.14.2 (2015-08-20)
0.14.1 (2015-08-19)
0.14.0 (2015-08-17)
0.13.1 (2015-08-05)
0.13.0 (2015-08-01)
- libmavconn: simpify exception code.
- Contributors: Vladimir Ermakov
0.12.0 (2015-07-01)
- libmavconn: UDP: Do not exit on Network unreachable error. Requested by \@mhkabir, idea given by \@adamantivm in https://github.com/algron/mavros/commit/48fa19f58786387b4aee804e0687d6d39a127806
- Contributors: Vladimir Ermakov
0.11.2 (2015-04-26)
- libmavconn fix #269: override default channel getter helpers Default inlined mavlink getter helpers cause issue, when each plugin has it's own sequence number.
- libmavconn #269: add seq number to debug
- Contributors: Vladimir Ermakov
File truncated at 100 lines see the full file
Launch files
Messages
Services
Plugins
Recent questions tagged libmavconn at Robotics Stack Exchange
|
libmavconn package from mavros repolibmavconn mavros mavros_extras mavros_msgs test_mavros |
ROS Distro
|
Package Summary
| Version | 0.17.5 |
| License | GPLv3 |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/mavlink/mavros.git |
| VCS Type | git |
| VCS Version | indigo-devel |
| Last Updated | 2017-02-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Vladimir Ermakov
Authors
- Vladimir Ermakov
MAVCONN library
It is mavlink connection and communication library used in MAVROS. Since 2014-11-02 it adopted to use outside from ROS environment by splitting to individual package and removing dependencies to rosconsole.
Connection URL
Connection defined by URL.
Just pass one of that URL to MAVConnInterface::open_url() and get connection object.
Supported schemas:
- Serial:
/path/to/serial/device[:baudrate] - Serial:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host[:port]]@[remote_host[:port]][/?ids=sysid,compid] - TCP client:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP server:
tcp-l://[bind_port][:port][/?ids=sysid,compid]
Note: ids from URL overrides ids given by system_id & component_id parameters.
Dependencies
Same as for mavros:
- Linux host
- Boost >= 1.46 (used Boost.ASIO and Boost.Signals2)
- console-bridge library
- compiller with C++11 support
License
Changelog for package libmavconn
0.17.5 (2017-02-07)
- Pthread fix for OSX
(#650)
- fix pthread and missing defines for osx
- adapted their style using tabs
- fix elif to else
- Contributors: Fadri Furrer
0.17.4 (2016-06-23)
0.17.3 (2016-05-20)
- libmavconn #543: support build with mavlink 2.0 capable mavgen
- Contributors: Vladimir Ermakov
0.17.2 (2016-04-29)
0.17.1 (2016-03-28)
- MAVConnSerial: Stop io_service before closing serial device (Fixes #130) The serial device was closed before calling io_service.stop() so io_<service::run>() never returned, leading to hang on join in MAVConnSerial::close()
Backtrace:
#0 0x00007f80217e966b in pthread_join (threadid=140188059690752, thread_return=0x0) at pthread_join.c:92
#1 0x00007f80215602d7 in std::thread::join() ()
#2 0x00007f8020ccc674 in mavconn::MAVConnSerial::close() ()
#3 0x00007f8020ccc6f5 in mavconn::MAVConnSerial::~MAVConnSerial() ()
#4 0x00007f8020cc7b2e in boost::detail::sp_counted_impl_pd<mavconn::MAVConnSerial*, boost::detail::sp_ms_deleter<mavconn::MAVConnSerial> >::dispose() ()
#5 0x000000000040ee0a in boost::detail::sp_counted_base::release() [clone .part.27] [clone .constprop.472] ()
#6 0x000000000041eb22 in mavros::MavRos::~MavRos() ()
#7 0x000000000040eb38 in main ()
- Contributors: Kartik Mohta
0.17.0 (2016-02-09)
- rebased with master
- Contributors: francois
0.16.6 (2016-02-04)
0.16.5 (2016-01-11)
0.16.4 (2015-12-14)
- libmavconn #452: remove pixhawk, add paparazzi dialects. Mavlink package provide information about known dialects, so we do not touch mavlink_dialect.h selection ifs.
- Contributors: Vladimir Ermakov
0.16.3 (2015-11-19)
0.16.2 (2015-11-17)
0.16.1 (2015-11-13)
0.16.0 (2015-11-09)
0.15.0 (2015-09-17)
0.14.2 (2015-08-20)
0.14.1 (2015-08-19)
0.14.0 (2015-08-17)
0.13.1 (2015-08-05)
0.13.0 (2015-08-01)
- libmavconn: simpify exception code.
- Contributors: Vladimir Ermakov
0.12.0 (2015-07-01)
- libmavconn: UDP: Do not exit on Network unreachable error. Requested by \@mhkabir, idea given by \@adamantivm in https://github.com/algron/mavros/commit/48fa19f58786387b4aee804e0687d6d39a127806
- Contributors: Vladimir Ermakov
0.11.2 (2015-04-26)
- libmavconn fix #269: override default channel getter helpers Default inlined mavlink getter helpers cause issue, when each plugin has it's own sequence number.
- libmavconn #269: add seq number to debug
- Contributors: Vladimir Ermakov
File truncated at 100 lines see the full file
Launch files
Messages
Services
Plugins
Recent questions tagged libmavconn at Robotics Stack Exchange
|
libmavconn package from mavros repolibmavconn mavros mavros_extras |
ROS Distro
|
Package Summary
| Version | 0.8.6 |
| License | GPLv3 |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/mavlink/mavros.git |
| VCS Type | git |
| VCS Version | hydro-devel |
| Last Updated | 2015-03-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Vladimir Ermakov
Authors
- Vladimir Ermakov
MAVCONN library
It is mavlink connection and communication library used in MAVROS. Since 2014-11-02 it adopted to use outside from ROS environment by splitting to individual package and removing dependencies to rosconsole.
Connection URL
Connection defined by URL.
Just pass one of that URL to MAVConnInterface::open_url() and get connection object.
Supported schemas:
- Serial:
/path/to/serial/device[:baudrate] - Serial:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host[:port]]@[remote_host[:port]][/?ids=sysid,compid] - TCP client:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP server:
tcp-l://[bind_port][:port][/?ids=sysid,compid]
Note: ids from URL overrides ids given by system_id & component_id parameters.
Dependencies
Same as for mavros:
- Linux host
- Boost >= 1.46 (used Boost.ASIO and Boost.Signals2)
- console-bridge library
- compiller with C++11 support
License
Licensed under terms of LGPLv3 or GPLv3 (actually GPLv3 in headers, but it also LGPL).
Changelog for package libmavconn
0.8.6 (2015-03-04)
0.8.5 (2014-11-04)
- Fix libmavconn include destination. Before that change headers installed in include/libmavconn (package name) and it broke release builds for 0.9.1 and 0.8.4. Strange that prerelease build runs without errors. Issue #162.
- Contributors: Vladimir Ermakov
0.8.4 (2014-11-03)
- Fix libmavconn deps. Releases 0.9 and 0.8.3 ar broken because i forgot to add mavlink dep.
- Contributors: Vladimir Ermakov
0.8.3 (2014-11-03)
- 0.8.2
- prepare minor release 0.8.2 for hydro
- mavconn #162: fix console_bridge package name. In Hydro console bridge not released as system dependency.
- Contributors: Vladimir Ermakov
0.8.2 (2014-11-03)
- mavconn #162: fix console_bridge package name. In Hydro console bridge not released as system dependency.
- Contributors: Vladimir Ermakov
0.8.1 (2014-11-02)
- mavconn #161: try to fix hydro build
- mavconn #161: Move mavconn tests.
- mavconn #161: Fix headers used in mavros. Add readme.
- mavconn #161: Fix mavros build.
- mavconn #161: Move library to its own package Also rosconsole replaced by console_bridge, so now library can be used without ros infrastructure.
- Contributors: Vladimir Ermakov
Dependant Packages
| Name | Deps |
|---|---|
| mavros |
Launch files
Messages
Services
Plugins
Recent questions tagged libmavconn at Robotics Stack Exchange
|
libmavconn package from mavros repolibmavconn mavros mavros_extras mavros_msgs test_mavros |
ROS Distro
|
Package Summary
| Version | 1.21.1 |
| License | GPLv3 |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/mavlink/mavros.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2025-12-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Vladimir Ermakov
Authors
- Vladimir Ermakov
MAVCONN library
It is mavlink connection and communication library used in MAVROS. Since 2014-11-02 it adopted to use outside from ROS environment by splitting to individual package and removing dependencies to rosconsole.
Connection URL
Connection defined by URL.
Just pass one of that URL to MAVConnInterface::open_url() and get connection object.
Supported schemas:
- Serial:
/path/to/serial/device[:baudrate] - Serial:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - Serial with hardware flow control:
serial-hwfc:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host][:port]@[remote_host][:port][/?ids=sysid,compid] - UDP broadcast until GCS discovery:
udp-b://[bind_host][:port]@[:port][/?ids=sysid,compid] - UDP broadcast (permanent):
udp-pb://[bind_host][:port]@[:port][/?ids=sysid,compid] - TCP client:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP server:
tcp-l://[bind_port][:port][/?ids=sysid,compid]
Note: ids from URL overrides ids given by system_id & component_id parameters.
Dependencies
Same as for mavros:
- Linux host
- Boost >= 1.46 (used Boost.ASIO)
- console-bridge library
- compiller with C++11 support
License
Changelog for package libmavconn
1.21.1 (2025-12-12)
1.21.0 (2025-09-08)
- regenerate all
- Contributors: Vladimir Ermakov
1.20.1 (2025-05-05)
1.20.0 (2024-10-10)
1.19.0 (2024-06-06)
1.18.0 (2024-03-03)
1.17.0 (2023-09-09)
- Merge pull request #1865 from scoutdi/warnings Fix / suppress some build warnings
- Suppress warnings from included headers
- Contributors: Morten Fyhn Amundsen, Vladimir Ermakov
1.16.0 (2023-05-05)
1.15.0 (2022-12-30)
- Merge pull request #1794 from rossizero/master libmavconn: fix MAVLink v1.0 output selection
- libmavconn: fix MAVLink v1.0 output selection Fix #1787
- Contributors: Vladimir Ermakov, rosrunne
1.14.0 (2022-09-24)
- libmavconn: fix MAVLink v1.0 output selection Fix #1787
- Merge pull request #1775 from acxz/find-geographiclib use already installed FindGeographicLib.cmake
- use already installed FindGeographicLib.cmake
- Contributors: Vladimir Ermakov, acxz
1.13.0 (2022-01-13)
1.12.2 (2021-12-12)
1.12.1 (2021-11-29)
- mavconn: fix connection issue introduced by #1658
- Contributors: Vladimir Ermakov
1.12.0 (2021-11-27)
-
Merge pull request #1658 from asherikov/as_bugfixes Fix multiple bugs
-
Fix multiple bugs
- fix bad_weak_ptr on connect and disconnect
- introduce new API to avoid thread race when assigning callbacks
- fix uninitialized variable in TCP client constructor which would randomly block TCP server This is an API breaking change: if client code creates connections using make_shared<>() instead of open_url(), it is now necessary to call new connect() method explicitly.
-
Contributors: Alexander Sherikov, Vladimir Ermakov
1.11.1 (2021-11-24)
1.11.0 (2021-11-24)
1.10.0 (2021-11-04)
- Merge pull request #1626 from valbok/crash_on_shutdown Show ENOTCONN error instead of crash on socket's shutdown
- Show ENOTCONN error instead of crash When a client suddenly drops the connection, socket.shutdown() will throw an exception: boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> > what(): shutdown: Transport endpoint is not connected Showing an error in this common case looks more reasonable than crashing.
- Contributors: Val Doroshchuk, Vladimir Ermakov
1.9.0 (2021-09-09)
1.8.0 (2021-05-05)
1.7.1 (2021-04-05)
1.7.0 (2021-04-05)
File truncated at 100 lines see the full file
Launch files
Messages
Services
Plugins
Recent questions tagged libmavconn at Robotics Stack Exchange
|
libmavconn package from mavros repolibmavconn mavros mavros_extras mavros_msgs test_mavros |
ROS Distro
|
Package Summary
| Version | 1.21.1 |
| License | GPLv3 |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/mavlink/mavros.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2025-12-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Vladimir Ermakov
Authors
- Vladimir Ermakov
MAVCONN library
It is mavlink connection and communication library used in MAVROS. Since 2014-11-02 it adopted to use outside from ROS environment by splitting to individual package and removing dependencies to rosconsole.
Connection URL
Connection defined by URL.
Just pass one of that URL to MAVConnInterface::open_url() and get connection object.
Supported schemas:
- Serial:
/path/to/serial/device[:baudrate] - Serial:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - Serial with hardware flow control:
serial-hwfc:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host][:port]@[remote_host][:port][/?ids=sysid,compid] - UDP broadcast until GCS discovery:
udp-b://[bind_host][:port]@[:port][/?ids=sysid,compid] - UDP broadcast (permanent):
udp-pb://[bind_host][:port]@[:port][/?ids=sysid,compid] - TCP client:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP server:
tcp-l://[bind_port][:port][/?ids=sysid,compid]
Note: ids from URL overrides ids given by system_id & component_id parameters.
Dependencies
Same as for mavros:
- Linux host
- Boost >= 1.46 (used Boost.ASIO)
- console-bridge library
- compiller with C++11 support
License
Changelog for package libmavconn
1.21.1 (2025-12-12)
1.21.0 (2025-09-08)
- regenerate all
- Contributors: Vladimir Ermakov
1.20.1 (2025-05-05)
1.20.0 (2024-10-10)
1.19.0 (2024-06-06)
1.18.0 (2024-03-03)
1.17.0 (2023-09-09)
- Merge pull request #1865 from scoutdi/warnings Fix / suppress some build warnings
- Suppress warnings from included headers
- Contributors: Morten Fyhn Amundsen, Vladimir Ermakov
1.16.0 (2023-05-05)
1.15.0 (2022-12-30)
- Merge pull request #1794 from rossizero/master libmavconn: fix MAVLink v1.0 output selection
- libmavconn: fix MAVLink v1.0 output selection Fix #1787
- Contributors: Vladimir Ermakov, rosrunne
1.14.0 (2022-09-24)
- libmavconn: fix MAVLink v1.0 output selection Fix #1787
- Merge pull request #1775 from acxz/find-geographiclib use already installed FindGeographicLib.cmake
- use already installed FindGeographicLib.cmake
- Contributors: Vladimir Ermakov, acxz
1.13.0 (2022-01-13)
1.12.2 (2021-12-12)
1.12.1 (2021-11-29)
- mavconn: fix connection issue introduced by #1658
- Contributors: Vladimir Ermakov
1.12.0 (2021-11-27)
-
Merge pull request #1658 from asherikov/as_bugfixes Fix multiple bugs
-
Fix multiple bugs
- fix bad_weak_ptr on connect and disconnect
- introduce new API to avoid thread race when assigning callbacks
- fix uninitialized variable in TCP client constructor which would randomly block TCP server This is an API breaking change: if client code creates connections using make_shared<>() instead of open_url(), it is now necessary to call new connect() method explicitly.
-
Contributors: Alexander Sherikov, Vladimir Ermakov
1.11.1 (2021-11-24)
1.11.0 (2021-11-24)
1.10.0 (2021-11-04)
- Merge pull request #1626 from valbok/crash_on_shutdown Show ENOTCONN error instead of crash on socket's shutdown
- Show ENOTCONN error instead of crash When a client suddenly drops the connection, socket.shutdown() will throw an exception: boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> > what(): shutdown: Transport endpoint is not connected Showing an error in this common case looks more reasonable than crashing.
- Contributors: Val Doroshchuk, Vladimir Ermakov
1.9.0 (2021-09-09)
1.8.0 (2021-05-05)
1.7.1 (2021-04-05)
1.7.0 (2021-04-05)
File truncated at 100 lines see the full file
Launch files
Messages
Services
Plugins
Recent questions tagged libmavconn at Robotics Stack Exchange
|
libmavconn package from mavros repolibmavconn mavros mavros_extras mavros_msgs test_mavros |
ROS Distro
|
Package Summary
| Version | 1.21.1 |
| License | GPLv3 |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/mavlink/mavros.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2025-12-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Vladimir Ermakov
Authors
- Vladimir Ermakov
MAVCONN library
It is mavlink connection and communication library used in MAVROS. Since 2014-11-02 it adopted to use outside from ROS environment by splitting to individual package and removing dependencies to rosconsole.
Connection URL
Connection defined by URL.
Just pass one of that URL to MAVConnInterface::open_url() and get connection object.
Supported schemas:
- Serial:
/path/to/serial/device[:baudrate] - Serial:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - Serial with hardware flow control:
serial-hwfc:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host][:port]@[remote_host][:port][/?ids=sysid,compid] - UDP broadcast until GCS discovery:
udp-b://[bind_host][:port]@[:port][/?ids=sysid,compid] - UDP broadcast (permanent):
udp-pb://[bind_host][:port]@[:port][/?ids=sysid,compid] - TCP client:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP server:
tcp-l://[bind_port][:port][/?ids=sysid,compid]
Note: ids from URL overrides ids given by system_id & component_id parameters.
Dependencies
Same as for mavros:
- Linux host
- Boost >= 1.46 (used Boost.ASIO)
- console-bridge library
- compiller with C++11 support
License
Changelog for package libmavconn
1.21.1 (2025-12-12)
1.21.0 (2025-09-08)
- regenerate all
- Contributors: Vladimir Ermakov
1.20.1 (2025-05-05)
1.20.0 (2024-10-10)
1.19.0 (2024-06-06)
1.18.0 (2024-03-03)
1.17.0 (2023-09-09)
- Merge pull request #1865 from scoutdi/warnings Fix / suppress some build warnings
- Suppress warnings from included headers
- Contributors: Morten Fyhn Amundsen, Vladimir Ermakov
1.16.0 (2023-05-05)
1.15.0 (2022-12-30)
- Merge pull request #1794 from rossizero/master libmavconn: fix MAVLink v1.0 output selection
- libmavconn: fix MAVLink v1.0 output selection Fix #1787
- Contributors: Vladimir Ermakov, rosrunne
1.14.0 (2022-09-24)
- libmavconn: fix MAVLink v1.0 output selection Fix #1787
- Merge pull request #1775 from acxz/find-geographiclib use already installed FindGeographicLib.cmake
- use already installed FindGeographicLib.cmake
- Contributors: Vladimir Ermakov, acxz
1.13.0 (2022-01-13)
1.12.2 (2021-12-12)
1.12.1 (2021-11-29)
- mavconn: fix connection issue introduced by #1658
- Contributors: Vladimir Ermakov
1.12.0 (2021-11-27)
-
Merge pull request #1658 from asherikov/as_bugfixes Fix multiple bugs
-
Fix multiple bugs
- fix bad_weak_ptr on connect and disconnect
- introduce new API to avoid thread race when assigning callbacks
- fix uninitialized variable in TCP client constructor which would randomly block TCP server This is an API breaking change: if client code creates connections using make_shared<>() instead of open_url(), it is now necessary to call new connect() method explicitly.
-
Contributors: Alexander Sherikov, Vladimir Ermakov
1.11.1 (2021-11-24)
1.11.0 (2021-11-24)
1.10.0 (2021-11-04)
- Merge pull request #1626 from valbok/crash_on_shutdown Show ENOTCONN error instead of crash on socket's shutdown
- Show ENOTCONN error instead of crash When a client suddenly drops the connection, socket.shutdown() will throw an exception: boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> > what(): shutdown: Transport endpoint is not connected Showing an error in this common case looks more reasonable than crashing.
- Contributors: Val Doroshchuk, Vladimir Ermakov
1.9.0 (2021-09-09)
1.8.0 (2021-05-05)
1.7.1 (2021-04-05)
1.7.0 (2021-04-05)
File truncated at 100 lines see the full file