controllers vs drivers
Hello, I'm having trouble getting an overview of what's going on in actually making something move. In particular, I'm confused by the term "controller." Just what exactly does that mean and how is it different from a driver? Is it just for real time support, perhaps? In the pr2_controller tutorials, the following is written multiple times:
" Commanding a joint trajectory for the arm requires the following components:
- a controller that sends commands directly to the joints;
- an action interface to the controller in the form of a ROS action, that takes in a trajectory command expressed as a series of joint angles and sends the appropriate low-level commands to the controller;
- the high-level program that uses the action interface to issue the desired joint trajectories. I figure
The first two components are available in ROS. In this tutorial we will show you how to use them by writing the third component, the high level program. "
Now I'm not using a pr_2, but I feel these aspects of ROS are there for very good reasons and I'd like to know what they are before I make my robot framework. From those statements, controllers look very much like another way to say drivers. However, I looked at the actual code in the controller modules, and I didn't see any low level stuff at all. Looking around elsewhere, I see ethercat drivers for the pr2, and I'm back to thinking there is a distinct difference. Another thing I'm confused about is whether the controller is separate from the action server or not. It would makes sense to me that these would be the same bit of code, but in the above explanation, they seem to be separate.
Any links or help are much appreciated. I think I understand the reasoning for actionlib (preemption, feedback, reuse of client code, etc.) but I just can't find much on lower level stuff and the reasoning behind it. Thanks in advance