My colleagues and I are currently giving a university lecture during the summer, on using libpointmatcher and our mapping stack for SLAM. I was wondering whether there is an easy way to share an instance of ROS to our students.
We tried sharing a ROS pre-installed Virtual Machine with the students, yet it’s kinda cumbersome for them as they don’t all have enough knowledge to run a VM, no matter the OS they are running on their computer.
We also tried to deploy our mapping stack on TheConstructSIM. Even though it gives a great OS-agnostic way to teach ROS, it doesn’t look like it’s tailored for showing big point clouds (at least 500k points) in a RViz instance.
You could use Dev Containers from a selfhosted or cloud based service to circumvent the logistics with local OS/VM setup:
If you need better bandwidth/latency for visualizations than your network can provide, then you could install something like docker desktop on local hardware, that is: if you have the time to walk students through a docker desktop install, and that students have enough local compute power to run your software stack.
Is that a static point cloud, is it colorized with a certain bit depth, or does that have some kind of update rate? I’d recommend doing some napkin math on what kind of bandwidth you’d need as a base line if you wanted to send them over the wire and render them from something like Foxglove Studio instead. For example, it may be worth down sampling point clouds remotely before visualizing them over a local client, or sticking with your current approach using remote desktop or VNC to render the visualizations on the same remote compute instance, then stream the frame buffer of something liked rviz instead.
Something like Moonlight and Sunshine could provide a more responsive, while still FOSS, remote desktop experience, but would be a more involved setup compared to a conventional VNC server/client deployment.
Something I have wondered recently is the feasibility of distributing ISOs for students and the like to image onto USB drives or SD cards (or the USB drives can be distributed and retrieved afterwards).
I know there have been similar efforts in the past.
One issue (of presumably many) with this approach is that they would probably want to retain access to notes etc. on their computer during the lecture and booting off the drive will break that. Also, if they are not adept enough to install a VM yet, then imaging/booting off a drive may also be impractical.
And for the many students using (new) Mac computers, an x86 boot drive won’t work.
After years of teaching ROS to students and professionals, I am still using a virtual machine where everything is up and running. I find it easier than using Docker.
You can give the VM image before the lecture together with links to basic tutorials on how to install it. Most of them should make it and you will have to help only a few ones at the beginning of the first lecture or lab.
Also, tell them to setup shared folders so they do not lose the code inside the VM.
Overall, if one cannot setup a VM I would be quite skeptical on their ability to use ROS anyway.
The main drawback is the possibly slow performance of the VM as it depends on the specs of their computers.
I usually use bootable USB-sticks duplicated with dd. The sticks need to be re-flashed after a couple of trainings because the environment gets messy. I bought a bunch of fast RW sticks (Sandisk UltraFit). However according to the target laptop, you may still have boot issues, e.g. GPU driver not available, kernel panic, or whatever.
VM should work not. They may complexity the network configuration if students communicate with real robots. If you do not want students to deal with the VM itself you may setup in the class a powerful server running Proxmox and they just pop a VM out of your image. That option also allows to install a single powerful GPU on the server, shared among all clients.