ROS Noetic docker container on Jetpack 6.0

To anyone who can help.

Just to set the seen, I have been developing a mobile robot running ROS for the past few years.
The system as a whole uses, a Teensy 4.0 Microcontroller, connected to a Jetson Nano 8GB, running Jetpack 4 (Ubuntu 20.04.6). On the same ROS network I have been connecting a Linux laptop also running Ubuntu 20.04.
Thus, I am using ROS Noetic mainly due to the inability to upgrade the Jetson Nano any further.

However it is obvious that there are definitely some exciting changes with LLM’s & VLM’s these days, which I am very interested in understanding and implementing. So I very recently bought a Jetson Orin Nano to connect within the ROS network but with the aim of mainly running LLM’s and VLM’s.

After carrying out the recommended in the getting started document, the upgrade to Jetpack 6 also upgraded the OS to Ubuntu 22.04, which as a result I was unable to run ROS Noetic either on the OS or even (seemingly) as a docker container. As a result I have now downgraded back to Jetpack 5 (Ubuntu 20.04), but obviously I miss a lot of the newer possibilities using GPU’s etc.

So I was wondering has anyone any information on whether it is possible to build a Noetic ROS container on Jetpack 6. As I don’t want to go through the hassle I went through to get back to Jetpack 5 again.

I have been looking through dusty-nv/jetson-containers on github, but am not really sure how to progress, as it clearly states, it does not support Jetpack 6.

If anyone can give me any help, I’d very much appreciate it.

Many thanks to all

The question is much more similar to mine, How to install ROS Noetic (Ubuntu 20.04) or ROS Melodic (Ubuntu 18.04) on Jetson Orin JetPack v6.0?

@dve_b @daniel2008_12 here are the errors I’m getting when I just tried building ROS Noetic container on JetPack 6:

$ jetson-containers build ros:noetic-ros-base

---> Running in 27ee3f1b1cba
Ign:1 http://packages.ros.org/ros/ubuntu jammy InRelease
Err:2 http://packages.ros.org/ros/ubuntu jammy Release
  404  Not Found [IP: 64.50.236.52 80]
Get:3 http://ports.ubuntu.com/ubuntu-ports jammy InRelease [270 kB]
Get:4 http://ports.ubuntu.com/ubuntu-ports jammy-updates InRelease [128 kB]
Get:5 http://ports.ubuntu.com/ubuntu-ports jammy-backports InRelease [127 kB]
Get:6 http://ports.ubuntu.com/ubuntu-ports jammy-security InRelease [129 kB]
Get:7 http://ports.ubuntu.com/ubuntu-ports jammy/multiverse arm64 Packages [224 kB]
Get:8 http://ports.ubuntu.com/ubuntu-ports jammy/main arm64 Packages [1,758 kB]
Get:9 http://ports.ubuntu.com/ubuntu-ports jammy/restricted arm64 Packages [24.2 kB]
Get:10 http://ports.ubuntu.com/ubuntu-ports jammy/universe arm64 Packages [17.2 MB]
Get:11 http://ports.ubuntu.com/ubuntu-ports jammy-updates/universe arm64 Packages [1,304 kB]
Get:12 http://ports.ubuntu.com/ubuntu-ports jammy-updates/main arm64 Packages [1,832 kB]
Get:13 http://ports.ubuntu.com/ubuntu-ports jammy-updates/restricted arm64 Packages [1,827 kB]
Get:14 http://ports.ubuntu.com/ubuntu-ports jammy-updates/multiverse arm64 Packages [29.2 kB]
Get:15 http://ports.ubuntu.com/ubuntu-ports jammy-backports/main arm64 Packages [80.6 kB]
Get:16 http://ports.ubuntu.com/ubuntu-ports jammy-backports/universe arm64 Packages [29.9 kB]
Get:17 http://ports.ubuntu.com/ubuntu-ports jammy-security/universe arm64 Packages [1,017 kB]
Get:18 http://ports.ubuntu.com/ubuntu-ports jammy-security/main arm64 Packages [1,569 kB]
Get:19 http://ports.ubuntu.com/ubuntu-ports jammy-security/restricted arm64 Packages [1,765 kB]
Get:20 http://ports.ubuntu.com/ubuntu-ports jammy-security/multiverse arm64 Packages [24.1 kB]
Reading package lists...
E: The repository 'http://packages.ros.org/ros/ubuntu jammy Release' does not have a Release file.

Although the container builds Noetic from source, it would appear that either the ROS apt servers have been removed or are down for the packages (some of which install the build tools).

I will try again in case it’s a temporary outage, however for new designs I would recommend using ROS2 if that’s possible for you to migrate to (Humble LTS currently). That will also get you compatibility with Isaac ROS.

Can I start by thanking you both for taking time out to respond to my message. Unfortunately I would have responded earlier but when I tried the site was in Maintentance, and as it is a home project only, I only have a limited time to respond. However, It really is very much appreciated.

I hope my explanation below is not too long, but I feel it would only be respectful to provide you with a reasonable answer @dusty_nv.

With regards to ROS2, to be honest i looked into that option a few years back, but had a massive problem with using ROSSerial, which is the connection I use between the Teensy and (originally a Raspberry Pi) and now the Jetson Nano.

I had also looked at the Isaac option, but after so many years of programming in ROS, there is one thing that is extremely obvious to me. The steep curve of learning ROS in any sense. After all this time, I have only scratched the surface and feeling I would have to both relearn what is possible with Issac, together with completely changing the underlying project environment, does fill me with some dread… And again to be honest, i do like to know what lies under the hood, in largely writing code from a base program, using ROS really as a networking facility.

Again through your github repository, i have tried to understand Docker containers, but when I have tried to get functions, such as cameras working etc. I generally have failed miserably. So largely my ROS projects are on 20.04 OS.

But i would really like to upgrade to 22.04 (Jetpack 6) to really benefit from CUDA in LLM’s. Do you think a 20.04 ROS (Noetic) /CUDA-12 container is a realistic option? If you do not, I will simply continue with (Jetpack 5) 20.04 for the time being.

Many thanks

Hi @dve_b I was not able to get Noetic building on 22.04, which is not in the ROS1 apt repo (http://packages.ros.org/ros/ubuntu). Even if you are building from source, you need it to install some build tools first.

So instead I tried switching it to ROS2 apt repo (http://packages.ros.org/ros2/ubuntu) just to install the build tools, but it later failed because of some version issue with the catkin python module. I did find this but haven’t had time to try it:

The CUDA 12 packages for Jetson/aarch64 aren’t available for 20.04, so unfortunately there is an incompatibility and I would stay on JetPack 5 if you need Noetic.

Once again @dusty_nv , thank you for taking your time investigating my issue, I really appreciate the link you provided, and I’ll look into it over the next couple of weeks. It does make me chuckle, as currently I am only running 20.04 on the Jetson Nano, which I only managed by carrying out the procedure I found on QEngineering -Install Ubuntu 20.04 on Jetson Nano - Q-engineering. Plus, many other times finding work-arounds on using libraries and functions on Raspberry Pi’s, etc. it’s not exactly as easy as we first like to think.

Throughout this build it feels I have essentially been by-passing limitations, and have at some points almost given in. But, somehow, always managed to find a way (though certainly not perfect) round, to move on a little.

Anyway, once again, thank you for taking time to answer and investigate my original question.

Hi @dusty_nv

I’m sorry to ask one more question, as I am planning on trying the link you provided to see if I can get that working. Obviously as you stated there is a problem with CUDA conflicts, etc. So I have been exploring docker networking and its possibilities.

So I hope to ask a very quick question of you, even a simple yes or no answer would suffice.

What I was thinking of was: create the docker container running (hopefully) ROS Noetic, which primarily ran on the host network. Create another docker container, say containing LLava, which is based upon the host OS allowing full CUDA potential, etc. but which would exist on another user-defined docker network.

Then and this is the basis my question. Do you think it is actually reasonable from your experience. To allow the ROS container an additional network link to that LLava container, whilst still communicating with the ROS master (on the robot) connected via the host network.

In this way, i would hope that a voice command such as “where do you think you are?”, could be deciphered, then passed to the LLava container, which could in essence would respond back to the ROS container, which in turn could send a /voice ROS type message across the network to the robot. Thus the robot speaker would produce a response such as " I see computers, tables and chairs, so i feel i am in an office environment!" (this is obviously an example only, but one i certainly would like to reproduce, if possible).

I would appreciate yours or anybody else’s input very much, as to whether this is simply a “pie in the sky” thought?

Many thanks