#Meadow: Experimental Robotics-Focused Middleware

4 messages · Page 1 of 1 (latest)

abstract chasm
#

Over the past couple years, I've slowly been chipping away at a project called Meadow: https://github.com/quietlychris/meadow

It's an experimental robotics-focused networking middleware; basically, if you have a piece of data in one program or thread, and want to get it into other programs or threads, Meadow aims to be an easy and performant way to make that happen. I'm a user of this project myself, mostly in developmental robotics work, but I expect folks that are working in robotics, IoT, or other fields where messaging is important might also find it useful. Meadow should support any serde-compatible data, has TCP, UDP, and QUIC-based transport options, and has some intuitive configuration based on typestates. It's not currently published on crates.io, although I'm hoping to get a 0.1 release up at some point over the next few months.

I'm particularly interested in getting feedback from other users; if anyone has an interest in using something like this and comes across bugs, unexpected behaviour, or has suggestions on how to improve the quality of the codebase, please feel free to create an issue or make a PR in the repo. Thank you! 🙂

GitHub

Publish/request middleware for robotics applications, with a focus on ease-of-use - GitHub - quietlychris/meadow: Publish/request middleware for robotics applications, with a focus on ease-of-use

thick lynx
#

It's been a minute but I used to do some ROS stuff, the readme says this is more middleware compared to the high level organization of ROS, does that mean it could work in coordination with ros or that its use case is different?
Just glanced through stuff so sorry if that's a dumb question
Looks super cool, thanks for sharing!!

abstract chasm
#

@thick lynx Sorry for the late reply! So I think the Venn diagram between ROS and Meadow has a big overlapping area; at their core, they're really both ways of moving data around. I'd say the difference is that ROS includes a bunch of other stuff as a part of the overall framework (like package management via Catkin/Colcon, in part because C++'s ability to easily re-use code isn't great).

Meadow isn't batteries-included, since Cargo makes it so easy, and since Meadow should work for almost any serde-compatible data, we can often just re-use existing libraries directly. For example, when I was looking to use an Inertial Measurement Unit (IMU), the device crate used the mint library for Euler Angles and already supported serde; I didn't have to write any extra interop boilerplate to be able to move that data around using Meadow.

You could, in theory, use Meadow in collaboration with ROS, although you'd need to write a data translation layer of some sort since they don't serialize data the same way. That said, in my experience Meadow is pretty low overhead, so as long as you can do the ROS part in Rust, adding a connection to the Meadow bus shouldn't be very hard/take very long.

thick lynx
#

Neat! Definitely going to keep this in mind for my next mechatronics project