I’m looking for feedback and advice from the community.
Jazzy is the latest LTS version of ROS 2, but it’s only supported as tier 3 packages on Ubuntu 22.04. While it’s possible to build it from source, it’s a lengthy and cumbersome process, and I’d prefer not to repeat it on multiple devices (I know we can copy the colcon install directory and install dependencies via rosdep). Additionally, I’d prefer not to use a Dockerised solution and want to run it natively.
To solve this, I’ve started building Debian packages. So far, I’ve successfully created packages for ros_core and ros_base, and they work similarly to how ROS 2 Humble packages function on my Ubuntu 22.04 host.
My questions are:
Does this approach seem reasonable, or are there better alternatives available?
Once the Debian packages are ready, I plan to host them in a Debian pool for others to use, with both amd64 and arm64 architectures available. I’m thinking of hosting them on GitHub in a public repository. Is this a good solution, or are there better alternatives for hosting these packages?
Why do you have to use this specific combination of Ubuntu and ROS distribution? Why can you not use the humble packages on Ubuntu 22.04 or the jazzy packages on Ubuntu 24.04?
@christian The reason we want to use this specific combination of Ubuntu and ROS distribution is that Jazzy is the newer LTS release, and we are aiming to start porting our packages with that version. However, due to limitations with our vendor, we haven’t yet received Ubuntu 24.04 for our embedded device. As I mentioned earlier, we prefer not to use the Docker approach due to its drawbacks, particularly when working with lower-level peripherals. Jazzy is also supported as a tier-3 package, meaning it can be built from source. I believe it would be beneficial for both us and the community if we could build and use it in a standardized way, such as via debian or rpm packages.
I’d recommend “fighting forward” and figure out the issues you have with peripherals in Docker. Once you’ve solved those, you’ll be a lot more independent from what your SoC vendor provides. Not sure what peripherals you are concerned with, but for instance access to hardware acceleration can usually be enabled inside Docker without too much trouble. Just mentioning this because it’s a typical need on embedded devices, e.g., for efficient video encoding.
Could you provide a bit more information about the vendor, perhaps in a private message?
Slowly but surely I’ve been working on some guidance for ROS hardware vendors and having examples to point to is very helpful. I might also be able to pay them a friendly visit.
@chfritz The problem is even if we resolve the issue the docker approach, it introduces virtualization overhead (which affects performance) compared to the native execution.
Just install the latest jetpack with 22.04. Then in the 22.04, call do-release-upgrade, which will upgrade the system to 24.04. Most things work as they should. You are left with the kernel from 22.04, but that’s usually not a problem. The only things that might be tricky is the Nvidia stack with cuda. That needs to be tested.
No, that’s not true. Docker does not virtualize anything. It’s just a bunch of Linux namespaces (see man namespaces or man unshare), cgroups, and overlayfs’s. There is no performance loss whatsoever.