Safe workstation setup
Install and document a repeatable Ubuntu development environment.
Course 01 · Free
A nine-phase path from your first Ubuntu terminal to deploying complete ROS 2 robots: Linux basics, developer workflows, robotics tooling, ROS 2 installation and development, simulation, perception, Nav2 and professional-level robotics.

Learning outcomes
Course outline
The kernel, distributions, open source, and why ROS 2 and robot computers run Linux.
Open lessonChoosing a release, verifying the image, dual boot vs dedicated disk, and the first update.
Open lessonOne tree, no drive letters, and what each top-level folder is for.
Open lessonWhere am I, what is here, and how to move; absolute and relative paths, and tab completion.
Open lessonCreating, copying, moving and deleting safely, with -r, -i and -p.
Open lessonsudo apt update, apt install, apt remove, searching and reading package information.
Open lessonRead, write and execute for user, group and others; octal modes; ownership; when sudo is right.
Open lessonEditing files in the terminal and on the desktop, saving, quitting and switching.
Open lessonVariables, export, PATH lookup, startup files and sourcing ROS from .bashrc.
Open lessonFinding running programs, watching CPU and memory, and stopping a process safely.
Open lessonAddresses, ports, TCP vs UDP, multicast groups and why ROS 2 discovery depends on them.
Open lessonUnits, systemctl, journalctl and writing a service that starts your robot at boot.
Open lessonLogging in to a robot, keys instead of passwords, the config file and port forwarding.
Open lessonCopying files and folders to and from a robot with scp, sftp and rsync.
Open lessonlsblk, df, du, partitions, filesystems and finding what fills a disk.
Open lessonFinding the device, mounting and unmounting safely, and permanent mounts in fstab.
Open lessonStable device names, permissions and symlinks for serial adapters, lidars and cameras.
Open lessonWriting a script, #!/bin/bash, making it executable, variables, arguments and exit codes.
Open lessonif, test, for, while, case, functions and reading command output.
Open lessonAliases, functions, history search, tmux and small habits that save hours.
Open lessonRepositories, commits, branches, remotes, .gitignore and the everyday workflow.
Open lessonInstalling, extensions for C++, Python and ROS, remote SSH, tasks and debugging.
Open lessonThe compiler, make, CMake and the colcon build tool, and checking their versions.
Open lessonpython3, pip, venv, why not to pip install system-wide, and Python with ROS 2.
Open lessonCompiler versions, -std=c++17, warnings, clang and clang-tidy, and switching compilers.
Open lessonResolving system dependencies from package.xml and cloning many repositories from a .repos file.
Open lessonChoosing an RMW, domains, interfaces and reading discovery problems.
Open lessonufw rules for DDS ports, multicast on Wi-Fi and checking that packets flow.
Open lessonImages, containers, running commands, mounting folders and ROS 2 images.
Open lessonDockerfiles, compose, restart policies, updates and keeping robot images small.
Open lessonNVIDIA drivers, JetPack, checking the GPU, and CUDA in containers.
Open lessonInstalling sensor drivers, USB permissions, checking data and ROS 2 driver nodes.
Open lessonLocale, universe, the ros2-apt-source package and the signing key.
Open lessonDesktop vs ros-base, ros-dev-tools, upgrading and what gets installed.
Open lessonsetup.bash, what sourcing changes, per-terminal scope and adding it to .bashrc.
Open lessonmkdir -p ~/ros2_ws/src, cloning packages into src and the workspace layout.
Open lessoncolcon build, options, reading the output and running your first executable.
Open lessonUnderlay and overlay, sourcing order, shadowing packages and checking which one is used.
Open lessonROS_DISTRO, ROS_DOMAIN_ID, RMW_IMPLEMENTATION, ROS_LOCALHOST_ONLY and logging variables.
Open lessonros2 topic list, ros2 node info, ros2 service call, and other everyday commands.
Open lessonapt names, finding packages, rosdep keys and building from source instead.
Open lesson/opt/ros/lyrical, share, lib and include, workspace install folders and ~/.ros.
Open lessonros2 pkg create on Ubuntu, package.xml, dependencies with rosdep and building one package.
Open lessonA node class, CMakeLists.txt for C++17, building, running and inspecting the node.
Open lessonBuilding a talker and listener pair and checking them with the ros2 tools.
Open lessonCalling services from the CLI, sending action goals, feedback and cancellation.
Open lessonros2 param list/get/set/dump, YAML files and loading them at start-up.
Open lessonWriting, installing and running launch files from an Ubuntu workspace.
Open lessonInspecting QoS on Ubuntu, matching profiles and the common mismatch warnings.
Open lessonChoosing single or multi-threaded execution and checking CPU use in Ubuntu.
Open lessonManaging node states with ros2 lifecycle and start-up order on a robot.
Open lessonDebug builds, running a node under gdb, backtraces and core files.
Open lessonChecking the installation, network, QoS and package versions.
Open lessonWriting a robot description and checking it with the Ubuntu tools.
Open lessonConverting xacro to URDF on the command line and using it in launch files.
Open lessonInspecting the transform tree with the Ubuntu tools and publishing static frames.
Open lessonRunning it from a launch file with a xacro-generated description.
Open lessonUsing the GUI sliders to test joints before any simulation or hardware.
Open lessonInstalling Gazebo and the ros_gz bridge on Ubuntu and running the first world.
Open lessonros_gz_sim create, spawning from robot_description and checking the model.
Open lessonSystem plugins, the sensors system, and connecting Gazebo to ros2_control.
Open lessonLidar, camera and IMU sensors in Gazebo, bridging them and viewing the data.
Open lessonDriving the simulated robot with cmd_vel and checking odometry.
Open lessonInstalling a lidar driver, serial permissions, the /scan topic and RViz2.
Open lessonUSB cameras with v4l2, RealSense, camera_info and calibration.
Open lessonSerial and I2C IMUs, the sensor_msgs/Imu message and checking orientation and units.
Open lessonInstalling PCL, the pcl_ros tools, filtering clouds and viewing them in RViz2.
Open lessonInstalling OpenCV, cv_bridge, building C++ and Python examples.
Open lessonCompressed images, republishing and measuring bandwidth on the network.
Open lessonDepth images, encodings, depth_image_proc and turning depth into point clouds.
Open lessonRunning a neural-network detector on Ubuntu, GPU use and detection messages.
Open lessonGenerating, printing and detecting ArUco markers for docking and alignment.
Open lessonrobot_localization: fusing wheel odometry and an IMU into one estimate.
Open lessonapt packages, the TurtleBot 3 demo and checking that the prerequisites work.
Open lessonLive mapping, driving to map, saving the map and the pose graph.
Open lessonLocalizing on a saved map, setting the initial pose and checking convergence.
Open lessonMap files, loading them with nav2_map_server and checking the origin and resolution.
Open lessonGlobal and local costmaps, layers, inflation and inspecting them in RViz2.
Open lessonNavFn and Smac planners, testing a plan with the compute_path action.
Open lessonThe controller server, DWB and Regulated Pure Pursuit, and tuning speeds.
Open lessonWhere the BT XML lives, choosing a tree and viewing its state.
Open lessonSpin, back up, wait, clear costmaps and testing each recovery from the terminal.
Open lessonSending a dock goal, the docking server and verifying charging.
Open lessonPREEMPT_RT, priorities, CPU isolation, memory locking and measuring latency.
Open lessonCyclone and Fast DDS configuration files, network buffers and large messages.
Open lessonRunning several robots, task assignment and open-source fleet software.
Open lessonNamespaces, shared resources, priorities and deadlock avoidance.
Open lessonSeveral computers in one ROS 2 system: time sync, discovery server and networking.
Open lessonjournald, log rotation, ROS log levels and collecting metrics from a running robot.
Open lessonWatchdogs, emergency stops, service restarts and the limits of software safety.
Open lessonPreparing a robot computer: images, services, updates, backups and rollback.
Open lessonJetPack, power modes, tegrastats, CUDA containers and remote flashing.
Open lessonSizing an x86 robot computer, BIOS settings, power, cooling and ROS 2 installation.
Open lessonUbuntu on a Raspberry Pi 4/5, SD card vs SSD, GPIO, I2C, power and ROS 2 limits.
Open lessonProject: a differential-drive AMR from packages to a deployed, self-starting robot.
Open lessonProject: an arm with ros2_control, MoveIt 2 and a safe deployment on Ubuntu.
Open lessonPractice
Install and document a repeatable Ubuntu development environment.
Build a shell-based report for disk, memory, processes and networking.
Prepare and validate the directories, tools and environment used in later courses.
Documentation
Verified September 2026. Links open the official documentation.