Applies to v0.1.0.
Vehicle control · ROS 1
The control contract is identical to ROS 2: the same /cmd_vel, the same units, the same conversion. Only the client library differs.
The contract
linear.x— forward speed in m/s, clamped at the car's ceiling.angular.z— yaw rate in rad/s, positive is left.- Publish above 2 Hz, or the 0.5 s watchdog stops the car.
The full explanation of why a fixed yaw rate loses steering authority at speed, and how /ego/cmd_applied reports what the car obeyed, is on the ROS 2 page. None of it is version specific.
Worked example
limits = read_vehicle_info() # /ego/vehicle_info, JSON in a String
vmax = limits["max_speed_ms"]
cmd = Twist()
cmd.linear.x = max(-vmax, min(vmax, 0.4))
cmd.angular.z = cmd.linear.x * math.tan(math.radians(
-1.0 * limits["max_steer_deg"])) / limits["wheelbase_m"] # -1.0 here = full right (ROS: positive angular.z is LEFT)
pub.publish(cmd)Clamp the speed first, then convert the steering with that same speed. The teleop example does exactly this.