Practice the ROS2 Control - Velocity Controller coding problem in Motion Control. Browser-based execution with automated grading — no local ROS install required. 78% of engineers pass this challenge.
Implement a velocity controller node that drives a robot along a parameterized motion pattern and publishes velocity commands to /cmd_vel.
Your node must:
max_linear_speed (default 0.5 m/s) and max_angular_speed (default 1.0 rad/s)geometry_msgs/Twist on /cmd_velcreate_timer(0.1, ...) (10 Hz) control loopTwist message with non-zero linear.x or angular.z (or both)linear.x to [-max_linear_speed, max_linear_speed]angular.z to [-max_angular_speed, max_angular_speed]Twist messageOutput: geometry_msgs/Twist on /cmd_vel at 10 Hz
This is the interface contract for every differential drive robot: differential drive controllers, omni-wheel controllers, and skid-steer controllers all listen on /cmd_vel and convert Twist into individual wheel velocities. Understanding this interface — and its limits — is prerequisite knowledge for working with ros2_control, Nav2, or writing any teleoperation interface.
Twist() has all zeros. The robot won't move. Your control loop must set at least one non-zero field.0.5 instead of reading self.get_parameter('max_linear_speed').value defeats the purpose of parameterisation.It is a hands-on Motion Control 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 control, velocity, differential-drive skills used in robotics interviews and production systems.