Package symbol

libmavconn package from mavros repo

libmavconn mavros mavros_examples mavros_extras mavros_msgs

ROS Distro
humble

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

MAVLink communication library. This library provide unified connection handling classes and URL to connection object mapper. This library can be used in standalone programs.

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

Licensed under terms of LGPLv3, BSD, or GPLv3.

CHANGELOG

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

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libmavconn at Robotics Stack Exchange

Package symbol

libmavconn package from mavros repo

libmavconn mavros mavros_examples mavros_extras mavros_msgs

ROS Distro
jazzy

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

MAVLink communication library. This library provide unified connection handling classes and URL to connection object mapper. This library can be used in standalone programs.

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

Licensed under terms of LGPLv3, BSD, or GPLv3.

CHANGELOG

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

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libmavconn at Robotics Stack Exchange

Package symbol

libmavconn package from mavros repo

libmavconn mavros mavros_examples mavros_extras mavros_msgs

ROS Distro
kilted

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

MAVLink communication library. This library provide unified connection handling classes and URL to connection object mapper. This library can be used in standalone programs.

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

Licensed under terms of LGPLv3, BSD, or GPLv3.

CHANGELOG

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

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libmavconn at Robotics Stack Exchange

Package symbol

libmavconn package from mavros repo

libmavconn mavros mavros_examples mavros_extras mavros_msgs

ROS Distro
lyrical

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

MAVLink communication library. This library provide unified connection handling classes and URL to connection object mapper. This library can be used in standalone programs.

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

Licensed under terms of LGPLv3, BSD, or GPLv3.

CHANGELOG

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

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libmavconn at Robotics Stack Exchange

Package symbol

libmavconn package from mavros repo

libmavconn mavros mavros_examples mavros_extras mavros_msgs

ROS Distro
rolling

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

MAVLink communication library. This library provide unified connection handling classes and URL to connection object mapper. This library can be used in standalone programs.

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

Licensed under terms of LGPLv3, BSD, or GPLv3.

CHANGELOG

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

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libmavconn at Robotics Stack Exchange

No version for distro ardent showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

libmavconn package from mavros repo

libmavconn mavros mavros_examples mavros_extras mavros_msgs

ROS Distro
humble

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

MAVLink communication library. This library provide unified connection handling classes and URL to connection object mapper. This library can be used in standalone programs.

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

Licensed under terms of LGPLv3, BSD, or GPLv3.

CHANGELOG

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

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libmavconn at Robotics Stack Exchange

No version for distro bouncy showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

libmavconn package from mavros repo

libmavconn mavros mavros_examples mavros_extras mavros_msgs

ROS Distro
humble

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

MAVLink communication library. This library provide unified connection handling classes and URL to connection object mapper. This library can be used in standalone programs.

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

Licensed under terms of LGPLv3, BSD, or GPLv3.

CHANGELOG

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

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libmavconn at Robotics Stack Exchange

No version for distro crystal showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

libmavconn package from mavros repo

libmavconn mavros mavros_examples mavros_extras mavros_msgs

ROS Distro
humble

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

MAVLink communication library. This library provide unified connection handling classes and URL to connection object mapper. This library can be used in standalone programs.

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

Licensed under terms of LGPLv3, BSD, or GPLv3.

CHANGELOG

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

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libmavconn at Robotics Stack Exchange

No version for distro eloquent showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

libmavconn package from mavros repo

libmavconn mavros mavros_examples mavros_extras mavros_msgs

ROS Distro
humble

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

MAVLink communication library. This library provide unified connection handling classes and URL to connection object mapper. This library can be used in standalone programs.

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

Licensed under terms of LGPLv3, BSD, or GPLv3.

CHANGELOG

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

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libmavconn at Robotics Stack Exchange

No version for distro dashing showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

libmavconn package from mavros repo

libmavconn mavros mavros_examples mavros_extras mavros_msgs

ROS Distro
humble

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

MAVLink communication library. This library provide unified connection handling classes and URL to connection object mapper. This library can be used in standalone programs.

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

Licensed under terms of LGPLv3, BSD, or GPLv3.

CHANGELOG

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

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libmavconn at Robotics Stack Exchange

Package symbol

libmavconn package from mavros repo

libmavconn mavros mavros_examples mavros_extras mavros_msgs

ROS Distro
galactic

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

MAVLink communication library. This library provide unified connection handling classes and URL to connection object mapper. This library can be used in standalone programs.

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

Licensed under terms of LGPLv3, BSD, or GPLv3.

CHANGELOG

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

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libmavconn at Robotics Stack Exchange

Package symbol

libmavconn package from mavros repo

libmavconn mavros mavros_examples mavros_extras mavros_msgs

ROS Distro
foxy

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

MAVLink communication library. This library provide unified connection handling classes and URL to connection object mapper. This library can be used in standalone programs.

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

Licensed under terms of LGPLv3, BSD, or GPLv3.

CHANGELOG

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

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libmavconn at Robotics Stack Exchange

Package symbol

libmavconn package from mavros repo

libmavconn mavros mavros_examples mavros_extras mavros_msgs

ROS Distro
iron

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

MAVLink communication library. This library provide unified connection handling classes and URL to connection object mapper. This library can be used in standalone programs.

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

Licensed under terms of LGPLv3, BSD, or GPLv3.

CHANGELOG

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

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libmavconn at Robotics Stack Exchange

Package symbol

libmavconn package from mavros repo

libmavconn mavros mavros_extras mavros_msgs test_mavros

ROS Distro
lunar

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

MAVLink communication library. This library provide unified connection handling classes and URL to connection object mapper. This library can be used in standalone programs.

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

Licensed under terms of LGPLv3, BSD, or GPLv3.

CHANGELOG

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

Package Dependencies

System Dependencies

Dependant Packages

Name Deps
mavros

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libmavconn at Robotics Stack Exchange

Package symbol

libmavconn package from mavros repo

libmavconn mavros mavros_extras mavros_msgs test_mavros

ROS Distro
jade

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

MAVLink communication library. This library provide unified connection handling classes and URL to connection object mapper. This library can be used in standalone programs.

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, BSD, or GPLv3.

CHANGELOG

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)

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

Package Dependencies

System Dependencies

Dependant Packages

Name Deps
mavros

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libmavconn at Robotics Stack Exchange

Package symbol

libmavconn package from mavros repo

libmavconn mavros mavros_extras mavros_msgs test_mavros

ROS Distro
indigo

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

MAVLink communication library. This library provide unified connection handling classes and URL to connection object mapper. This library can be used in standalone programs.

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, BSD, or GPLv3.

CHANGELOG

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)

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

Package Dependencies

System Dependencies

Dependant Packages

Name Deps
mavros

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libmavconn at Robotics Stack Exchange

Package symbol

libmavconn package from mavros repo

libmavconn mavros mavros_extras

ROS Distro
hydro

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

MAVLink communication library. This library provide unified connection handling classes and URL to connection object mapper. This library can be used in standalone programs.

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

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

Package Dependencies

System Dependencies

Name
boost

Dependant Packages

Name Deps
mavros

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libmavconn at Robotics Stack Exchange

Package symbol

libmavconn package from mavros repo

libmavconn mavros mavros_extras mavros_msgs test_mavros

ROS Distro
kinetic

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

MAVLink communication library. This library provide unified connection handling classes and URL to connection object mapper. This library can be used in standalone programs.

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

Licensed under terms of LGPLv3, BSD, or GPLv3.

CHANGELOG

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

Package Dependencies

System Dependencies

Dependant Packages

Name Deps
mavros

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libmavconn at Robotics Stack Exchange

Package symbol

libmavconn package from mavros repo

libmavconn mavros mavros_extras mavros_msgs test_mavros

ROS Distro
melodic

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

MAVLink communication library. This library provide unified connection handling classes and URL to connection object mapper. This library can be used in standalone programs.

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

Licensed under terms of LGPLv3, BSD, or GPLv3.

CHANGELOG

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

Package Dependencies

System Dependencies

Dependant Packages

Name Deps
mavros

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libmavconn at Robotics Stack Exchange

Package symbol

libmavconn package from mavros repo

libmavconn mavros mavros_extras mavros_msgs test_mavros

ROS Distro
noetic

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

MAVLink communication library. This library provide unified connection handling classes and URL to connection object mapper. This library can be used in standalone programs.

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

Licensed under terms of LGPLv3, BSD, or GPLv3.

CHANGELOG

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

Package Dependencies

System Dependencies

Dependant Packages

Name Deps
mavros

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libmavconn at Robotics Stack Exchange