Ncomm – A node-based robotics framework written in Rust
github.com
github.com
Also, in case you didn't know, some much larger companies tried to replace ROS and eventually saw the light and gave up: NVidia (Isaac, yes, Isaac was at first a new framework for robotics that was meant to replace ROS, they've since reused that name to mean something else), and Viam (Go; now a ROS sponsor).
I known, that does not exclude the fact that people should try to work together, but maybe not using the same ROS philosophy.
ROS is irredeemable. I've seen it used in large projects, and the amount of time wasted "wrestling with ros" was ridiculous. I believe this will never change. Just because tensorflow existed meant folks shouldn't have looked for an easier way, and created PyTorch? No! Forge on, intrepid ros-replacers!
I found that if you "stick to the golden path" (monorepo with all your nodes/pkgs + colcon as the build system, deploy to a single supported OS), ROS mostly Just Works. That's a lot of pre-conditions though. But if you deviate a little bit, you're in for a world of pain.
If you try to develop a ROS system as any other C/C++/Python project, there will be some confusing things like always having to source the environment setup file.
Installing it is ... difficult (to say the least) if you're not using the exact version of Ubuntu that is officially supported. One pretty good workaround I found for this is using a VSCode Dev Container for ROS development. I'm then cross compiling to arm64 using Yocto Linux and meta-ros, so I get reliable and reproducible deployments. Once you get over the initial setup pain (which is significant), it's not too bad.
I think things could be significantly improved, but I will also say - I see many students at my uni which build advanced robots with ROS and they probably wouldn't consider themselves expert programmers. A similar effect happens with Arduino. And replicating this "novice-compatibility" is in my opinion the hardest part of replacing ROS.
We are wrapping everything in bash entry points to accomplish this.
> ... build advanced robots with ROS ...
Yes, experiencing this first hand... there are just so many examples out there for integrating with all the various sensors and such.
> I'm then cross compiling to arm64 using Yocto Linux and meta-ros, so I get reliable and reproducible deployments. Once you get over the initial setup pain (which is significant), it's not too bad.
Can we get a call and talk about this? Because I'm comfortable with the concepts you're talking about but we've not sorted out how to make an actually deployable artifact from (for one example) our workspace making use of pymoveit.
EDIT: Saw your email in your profile and sent a message
For context: I'm building a "satellite bus/payload computer" OS based on Yocto Linux for space applications addressing the typical problems people encounter when trying to use Linux for space:
- I've set up my robot/OBC/gadget by copying files into a /home/user and it's running. How do I deploy this and keep track of how the image was built? Some people make an image of the SD card. Other people make a script that customizes the rootfs and creates an image (better!). But we want to have control of the whole stack, since we want to implement secure boot and a few other things.
- I want to update my robot/satellite. Ideally using as little bandwidth as possible. How? Some options: have an A/B system and download a new (delta-)image to the other partition. Or I just upload the changed files. To solve this we use OSTree which lets us have a versioned filesystem with extremely small bsdiff delta updates. It's very satisfying.
> we've not sorted out how to make an actually deployable artifact from (for one example) our workspace making use of pymoveit
Heh, this is the big question for ROS and meta-ros. How do you deploy a workspace? So far we've settled on building the workspace in Yocto and installing it straight into the ROS prefix (typically /opt/ros/ROS_DISTRO).
You can see an example of a recipe that compiles a ROS2 workspace here: https://gitlab.com/raccoon-os/raccoon-os/-/blob/master/meta-...
It's a bit complicated due to the fact that we're also using ROS2 Rust and this recipe should be converted into a .bbclass, but we haven't gotten that far yet.
I'm not a fan of what OSRF has done with ROS 2 personally, but supporting both python and C++ is one of the good bits, even though that support has degraded since ROS 1.
That way we can slowly figure out more ergonomic ways of build/install/package/run nodes without sacrificing the really useful software that exists in the ROS2 ecosystem.
And it even has recording/playback and visualization features in the author's other repos.
Now we've got this bullshit with multiple slower RMWs with vastly larger overhead and none of them work reliably, clogging the network with multicasts. Not only that but some packages only work with some RMWs or just one, fracturing the ecosystem even further, because breaking everything every 2 years wasn't enough to reduce compatibility.
Like the whole point of ROS in principle is the standardization, grab any two packages and they will work with each other if you remap the topics because the message types are the same. The effort should be in the direction to further this standardization, not actively prevent it.
It can keep up with decent speeds while not using much RAM.