Sensor publisher
Publish typed sensor samples and inspect rates, values and QoS behavior.
Course 03 · Free
A complete seven-phase path on ROS 2 Lyrical Luth and Ubuntu 26.04: foundations, tools, Gazebo simulation, kinematics, perception, Nav2 navigation and professional-level robotics, finishing with a full warehouse robot.

Learning outcomes
Course outline
The ROS 2 idea, distributions, LTS releases and why this course targets Lyrical Luth.
Open lessonThe middleware under ROS 2, discovery, domains and choosing an RMW implementation.
Open lessonWhat each workspace folder holds, underlay and overlay, and what to commit.
Open lessoncolcon build options, selecting packages, symlink install and running tests.
Open lessonros2 pkg create, package.xml, CMakeLists.txt, setup.py and the two build types.
Open lessonrclcpp::Node, init/spin/shutdown, logging macros and the node graph.
Open lessonStreaming typed data, timers, callbacks and inspecting topics from the CLI.
Open lessonstd_msgs, sensor_msgs, geometry_msgs, writing .msg files and building a custom interface package.
Open lessonService servers and clients, .srv files, and when not to use a service.
Open lessonLong-running tasks with progress and cancellation, .action files, servers and clients.
Open lessonDeclaring, reading and changing parameters, YAML files and validation callbacks.
Open lessonStarting many nodes with parameters, remappings, arguments and includes.
Open lessonLog levels, throttled logs, rqt_console, ros2 doctor and debugging nodes with gdb.
Open lessonReliability, durability, history and depth, and matching publishers to subscribers.
Open lessonHow callbacks are scheduled, callback groups and running several nodes in one process.
Open lessonDisplays, fixed frame, saving configs and visualizing topics.
Open lessonFrames, static and dynamic broadcasters, lookups and debugging the tree.
Open lessonLinks, joints, joint types, limits and validating a description.
Open lessonProperties, macros, math and includes to avoid repeating URDF.
Open lessonPublishing TF from a URDF and joint states, and /robot_description.
Open lessonFake joint values with the GUI, the /joint_states message and its fields.
Open lessonController manager, hardware interfaces, command and state interfaces.
Open lessonConfiguring diff_drive_controller and joint_trajectory_controller.
Open lessondiagnostic_msgs, diagnostic_updater, rqt tools and ros2 topic monitoring.
Open lessonRecording topics, playing them back, storage formats and using bags in tests.
Open lessonGazebo Sim, ros_gz packages, checking the version pairing and running the first world.
Open lessonWhat each format is for, what SDF adds and how Gazebo converts URDF.
Open lessonros_gz_sim create, spawning from robot_description and launch files.
Open lessonSystem plugins, sensor plugins and the ros2_control Gazebo plugin.
Open lessonThe gpu_lidar sensor, its parameters and bridging LaserScan to ROS 2.
Open lessonCamera sensor, image and camera_info bridges and viewing in rqt_image_view.
Open lessonThe imu sensor, noise models, frames and bridging sensor_msgs/Imu.
Open lessonThe diff-drive system plugin, cmd_vel and odometry in simulation.
Open lessonteleop_twist_keyboard, joystick teleop, scaling and safety limits.
Open lessonWriting SDF worlds, including models, lights, physics and reusing model libraries.
Open lessonLinks and joints as a chain, degrees of freedom, the base and the tool frame.
Open lessonFrom joint angles to the tool position with trigonometry for a planar arm.
Open lessonFrom a target position to joint angles, multiple solutions and unreachable targets.
Open lessonThe four Denavit–Hartenberg parameters, transform matrices and chaining them.
Open lessonOne parent per frame, avoiding loops, where to attach sensors and naming conventions.
Open lessonREP 105 frame conventions and who publishes each transform.
Open lessonVisual meshes vs simplified collision shapes, and performance trade-offs.
Open lessonMass, centre of mass and the inertia tensor of boxes, cylinders and spheres.
Open lessonWriting a SystemInterface: on_init, export interfaces, read and write.
Open lessonTrajectory messages, the follow_joint_trajectory action, limits and tolerances.
Open lessonLaserScan fields, invalid readings, filtering and finding the nearest obstacle.
Open lessonPolar to Cartesian conversion, PointCloud2 and the laser_geometry package.
Open lessonDepth images, intrinsics, projecting pixels to 3D and registered point clouds.
Open lessonCamera drivers, camera_info, rectification with image_proc and cv_bridge.
Open lessonCompressed and theora transports, republish and bandwidth control.
Open lessonPointCloud2 to PCL, voxel-grid downsampling, passthrough filtering and plane removal.
Open lessonGyro and accelerometer errors, complementary filter and robot_localization.
Open lessonDead reckoning for a differential drive, drift and nav_msgs/Odometry.
Open lessonRunning a detector on camera frames, bounding boxes, IoU and non-maximum suppression.
Open lessonMarker detection, pose estimation and a simple alignment controller.
Open lessonNav2 packages, the bringup launch files and running the simulation demo.
Open lessonMap YAML and image files, map_server, map_saver and the occupancy grid.
Open lessonLayers, inflation, robot footprint and cost values.
Open lessonOnline async mapping, parameters, driving to map and saving the result.
Open lessonParticle filter localization on a known map, initial pose and tuning.
Open lessonChoosing a global planner, Dijkstra/A*, hybrid-A* and lattice planners.
Open lessonControllers that follow the path, DWB critics, and how TEB differs.
Open lessonBehavior tree nodes, the navigate_to_pose tree and customizing behaviour.
Open lessonCostmap obstacle layers, the local planner's role and the collision monitor.
Open lessonSpin, back up, wait, clear costmaps and recovery nodes in the tree.
Open lessonThe docking server, dock plugins, staging poses and charging detection.
Open lessonOne map per floor, switching maps, elevators and floor-aware goals.
Open lessonNamespaces, per-robot Nav2 instances, shared maps and avoiding conflicts.
Open lessonThe smoother server, path smoothing algorithms, speed limits and keepout zones.
Open lessonA complete bringup: robot, sensors, localization, Nav2 and RViz in one launch.
Open lessonManaged states, transition callbacks and controlled start-up of hardware.
Open lessonDesigning concurrency: groups, executors and avoiding deadlocks.
Open lessonReal-time kernels, priorities, memory locking and avoiding allocation in the loop.
Open lessonCyclone and Fast DDS settings, network interfaces, multicast and large data.
Open lessonSeveral computers in one ROS graph: networking, discovery server and time sync.
Open lessonTask queues, assignment, robot state tracking and open-source fleet tools.
Open lessonShared resources, reservations, priorities and deadlock avoidance.
Open lessonStructured logs, latency and rate metrics, percentiles and dashboards.
Open lessonWatchdogs, emergency stop, safe velocities and failing safe.
Open lessonChoosing computers, installing, systemd services, containers and remote updates.
Open lessonProject: drive base, sensors, localization and Nav2 as one package set.
Open lessonProject: arm description, ros2_control, trajectory controller and motion planning.
Open lessonProject: a warehouse world with shelves, aisles, docks and moving obstacles.
Open lessonProject: camera and lidar processing, detection, tracking and publishing results.
Open lessonProject: several namespaced robots with shared map, fleet manager and traffic rules.
Open lessonCapstone: one warehouse robot that perceives, navigates, docks and reports.
Open lessonPractice
Publish typed sensor samples and inspect rates, values and QoS behavior.
Build a cancellable action server with feedback and a C++ client.
Launch multiple nodes, record a bag and trace an injected failure.
Documentation
Verified September 2026. Links open the official documentation.