This repo is my hands‑on journey through ROS 2 simulation and control, from navigation, motion planning and hardware integration. It contains examples in C++ and Python, plus final projects to show the concepts in action.
Repo structure (top‑level):
course_level1/ # Core ROS 2 nodes in C++/Python + final projects
course_level2/ # URDF, TF, RViz2, Gazebo; sensor sim + bringup
course_level3/ # Actions, lifecycle, components, executors + final project
course_moveit/ # MoveIt planning (URDF->SRDF, planning groups, API demos)
course_nav2/ # SLAM & Nav2 with TurtleBot3 in Gazebo + mapping & nav
course_ros2_control/ # ROS 2 Control hardware interfaces & controllers
docs/ # GIFs, videos, screenshots, certificates
Courses: by Edouard Renard (Level 1, 2, 3, MoveIt, Nav2, ros2_control).
Folder:
course_ros2_control/
- Skills: ROS 2 hardware_interface, ROS 2 controller_manager,
ros2_controlYAMLs, gazebo‑ros2‑control bridge, C++ motor drivers, build custom ros2_control controller. - Outcome: bring a custom URDF to life with ros2_controllers and hardware_interfaces for robust integration between hardware motor drivers and ROS 2 applications. Also developed a custom ros2_control complimentary filter controller.
Folder:
course_moveit/
What I learned:
- URDF → SRDF pipeline: joints, collision pairs, and planning groups.
- Planning scene & kinematics: IK queries, Cartesian paths, constraints.
- MoveGroup API (C++/Python): plan, execute, async stops, trajectory inspection.
Demos:
Final activity: build a small arm commander that sequences joint targets (either FK or IK) with the option of Cartesian paths.
Folder:
course_nav2/
What I learned:
- Mapping & Localization:
slam_toolbox, AMCL, static 2D maps. - Nav2 stack:
bt_navigator,planner_server,controller_server, recovery. - Costmaps: global/local, inflation, footprint tuning, voxel/obstacle layers.
Final demo: Map a house with SLAM in Rviz2 + Gazebo, then navigate to a goal set by the user.
Folder:
course_level3/
What I learned:
- Actions (C++/Py): goal/feedback/result APIs for long‑running tasks.
- Lifecycle Nodes: managed bringup, deterministic configuration & cleanup.
- Components: composition, intra‑process comms, lower latency & memory.
- Executors: single vs multi‑threaded, callback groups, real‑time behavior.
Final project: compose a multi‑node C++ app with lifecycle‑managed robot bringup and an action server coordinating a short and simple goal.
Folder:
course_level2/
What I learned:
- URDF/Xacro: links/joints, inertia, collision vs visual, macros.
- TF tree: frame conventions, static vs dynamic transforms.
- RViz2: visual debugging with TF, markers, point clouds.
- Gazebo: spawn, sensors, plugins; launch files for bringup.
Final project: complete robot description simulate sensors, and control a robot in Gazebo; verify TF tree and visualize in RViz2.
Folder:
course_level1/
What I learned:
- Nodes, topics, services, parameters, timers in C++ & Python.
- Messages & interfaces: custom
.msg/.srvwithrosidl. - Packages & launch:
ament_cmakeandament_pythonpkg basics.
Final project (Python and C++, respectively):
- ROS 2 Jazzy, C++17, Python 3.12
- MoveIt, Nav2, Gazebo (Harmonic), RViz2
- URDF/Xacro, TF2, ros2_control
- Actions, Lifecycle, Components, Executors
- Certificates available in
docs/Certificates of Completion/.
Maintained by Cedric Hollande - cedrich@seas.upenn.edu | cedric.hollande25@gmail.com










