To make it clear: ROS2 offers not one but two solutions under the same "differential drive control": the differential drive itself and a "skid drive". Plus, we can also implement "Ackermann steering vehicle" using the ackermann_steering_controller.
The diff. drive controller that ROS2 has can be used to drive devices with two wheels and a cast wheel: just picture robotic vacuum cleaner. This is a traditional application of a differential drive: two wheels can rotate independently, so the robot can turn "on the spot", and to help it to keep balance, a passive "cast wheel" is used.
This is what we are going to do in this section.
As for the skid drive, the situation is a bit more complex. Let's say, we have a device on tracks or on four durable wheels:
The reason I mentioned durability is: we are about to turn wheels in different directions to turn the thing on the spot, so - unlike with one pair of wheels - there will be some friction, so our tires better be good.
Or you can think of something with tracks:
The controller ROS2 provides allows us to control a multiwheeled device with variable distance between wheels and so on. Still, this is NOT a good choivce for a passenger car, as tires will not last long: this is when we use the Ackermann controller.
In this section we will focus on the robotic-vacuum-cleaner-like platform:
However, we are going to make it more like robotic vacuum cleaner, which means it is going to have a cylinder-shaped body, cut from the sides, so the wheels are inside the cylinder area. This way our robot can turn at the spot, without worrying about being stuck: