Practice the ROS2 Parameter Ghost coding problem in Migration. Browser-based execution with automated grading — no local ROS install required. 0% of engineers pass this challenge.
A navigation config node was ported from ROS1 to ROS2. In ROS1, rospy.get_param('~max_velocity', 0.5) worked seamlessly with launch file overrides. The ported version uses self.get_parameter('max_velocity'), but it always returns 0.0 regardless of what is passed via --ros-args. No error is raised.
Robots run at 0.0 m/s — completely stationary. The bug: in ROS2, parameters must be declared before they can be read. Reading an undeclared parameter silently returns a ParameterValue with type PARAMETER_NOT_SET, which resolves to 0.0 for doubles.
Fix the node by declaring both parameters with sensible defaults before calling get_parameter().
It is a hands-on Migration challenge on SimuCode where you implement and run ROS2 code in the browser with runtime-verified tests.
Open this page, sign in, and solve the problem in the built-in IDE. Your solution is graded against real ROS2 execution checks.
This Medium problem focuses on parameters, declare_parameter, ros1-to-ros2 skills used in robotics interviews and production systems.