ROS-NVA2: Environment Installation

By ihsumlee , 28 February 2026
content

Below is a copy-paste, beginner-proof install + test checklist for your students (Windows + VirtualBox) and also works for you (macOS + UTM). It ends with a Stage (2D) ROS2 Jazzy demo and verification commands to confirm everything is working.

 


A) VirtualBox on Windows (student setup)

A1) Install VirtualBox

  1. Install VirtualBox (latest stable). (https://www.youtube.com/watch?v=s3BM4dgn_Is)

  2. (Optional but recommended) Install the matching “Extension Pack”.

A2) Create Ubuntu VM (recommended settings)

  • CPU: 4 cores

  • RAM: 8 GB (minimum 4 GB)

  • Disk: 60 GB (minimum 40 GB)

  • Display:

    • Video Memory: 128 MB

    • Enable 3D Acceleration: ON (helps RViz)

  • Network: NAT (default)

A3) Install Ubuntu 24.04 Desktop in the VM

  1. Download Ubuntu 24.04 Desktop ISO (amd64)

  2. Boot VM from ISO → Install Ubuntu

  3. After install, update Ubuntu:

sudo apt update
sudo apt upgrade -y
sudo reboot

 


B) UTM on macOS (Apple Silicon M1/M2/M3/M4)

B1) Install Ubuntu 24.04 Desktop (ARM64)

  • Download Ubuntu 24.04 Desktop ARM64 ISO

  • Create VM in UTM → Virtualize (not emulate)

  • Suggested: 4 cores, 8 GB RAM, 60 GB disk

Then update:

sudo apt update
sudo apt upgrade -y
sudo reboot

 


C) ROS 2 Jazzy installation (Ubuntu 24.04)

C1) Locale + apt prerequisites

sudo apt update
sudo apt install -y locales curl gnupg lsb-release software-properties-common
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
sudo add-apt-repository universe -y
sudo apt update

 

C2) Add ROS 2 apt repo (recommended method)

sudo apt install -y curl
export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F\" '{print $4}')
curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb"
sudo apt install -y /tmp/ros2-apt-source.deb
sudo apt update

 

C3) Install ROS 2 Jazzy Desktop

sudo apt install -y ros-jazzy-desktop
echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
source ~/.bashrc

 


D) ROS 2 baseline tests (must pass)

D1) Confirm distro

echo $ROS_DISTRO

Expected: jazzy

 

D2) Talker/listener test

Open two terminals.

Terminal 1:

source /opt/ros/jazzy/setup.bash
ros2 run demo_nodes_cpp talker

Terminal 2:

source /opt/ros/jazzy/setup.bash
ros2 run demo_nodes_cpp listener

Expected: listener prints messages continuously.


E) Install Stage (2D simulator) + stage_ros2 (ROS2 wrapper)

Because Ubuntu 24.04 often doesn’t provide libstage-dev as an apt package, the most reliable approach is:

  1. Build Stage from source (system install)

  2. Build stage_ros2 in a colcon workspace

E1) Install build tools

sudo apt update
sudo apt install -y git cmake g++ pkg-config \
  python3-colcon-common-extensions python3-rosdep build-essential \
  libfltk1.3-dev libjpeg-dev libpng-dev libltdl-dev libglib2.0-dev

Initialize rosdep (first time only):

sudo rosdep init 2>/dev/null || true
rosdep update

 

E2) Build & install Stage (system-wide)

mkdir -p ~/third_party && cd ~/third_party
git clone https://github.com/rtv/Stage.git
cd Stage
mkdir -p build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make install
sudo ldconfig

Verify Stage cmake config exists:

sudo find /usr/local -name "stageConfig.cmake" -o -name "stage-config.cmake"

Expected: it finds a file under /usr/local/...

 

E3) Build stage_ros2 (Jazzy branch) in workspace

mkdir -p ~/nav_class_ws/src
cd ~/nav_class_ws/src
git clone -b jazzy https://github.com/tuw-robotics/stage_ros2.git

cd ~/nav_class_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build
source install/setup.bash
echo "source ~/nav_class_ws/install/setup.bash" >> ~/.bashrc

 


F) Stage ROS2 demo test (must pass)

F1) Launch Stage demo (IMPORTANT: publish standard /tf and /tf_static)

source /opt/ros/jazzy/setup.bash
source ~/nav_class_ws/install/setup.bash
ros2 launch stage_ros2 demo.launch.py one_tf_tree:=true

Expected:

  • A Stage window opens

  • RViz opens (depending on demo config)

F2) Verify key topics exist (robot_0)

source /opt/ros/jazzy/setup.bash
source ~/nav_class_ws/install/setup.bash

ros2 topic list | egrep "^/tf$|^/tf_static$|robot_0/base_scan|robot_0/odom|clock"

Expected to see:

  • /tf

  • /tf_static

  • /robot_0/base_scan

  • /robot_0/odom

  • /clock (your demo provides it)

F3) Verify data is flowing

ros2 topic echo /tf --once
ros2 topic echo /robot_0/base_scan --once
ros2 topic echo /robot_0/odom --once
ros2 topic echo /clock --once

If these print → your simulator pipeline is healthy.

 


G) Common VM performance fixes (recommended for students)

In RViz:

  • Turn off Camera/Image displays

  • Turn off TF display unless needed

  • Set Frame Rate to 10


 

Tags