ros-controls/ros_controllers — pull request #77 by po1 (2014-01-26 00:01:59+00:00)
Title: Controller for differential drive wheel base

### Diff-drive controller

This controller leverages `ros_control` and furnishes a mean to control a differential drive wheel base.
It has been implemented and tested on the REEM robot.

Overview of its features:

* takes a `sensor_msgs/Twist` message as an input, and will control the wheel base assuming a set of two coaxial wheels through two `VelocityJointInterface`.
* publishes odometry through an `nav_msgs/Odometry` and to `tf`, with a transform from `/odom` to `/base_link`
* implements task-space velocity and acceleration limits
* automatic stop after command timeout

The configuration is done through `rosparam`, here is an example of a controller parameter file:

```yaml
mobile_base_controller:
type : "diff_drive_controller/DiffDriveController"
left_wheel : 'wheel_left_joint'
right_wheel : 'wheel_right_joint'
publish_rate: 50.0 # defaults to 50
pose_covariance_diagonal : [0.001, 0.001, 1000000.0, 1000000.0, 1000000.0, 1000.0]
twist_covariance_diagonal: [0.001, 0.001, 1000000.0, 1000000.0, 1000000.0, 1000.0]

# Wheel separation and radius multipliers
wheel_separation_multiplier: 1.0 # default: 1.0
wheel_radius_multiplier : 1.0 # default: 1.0

# Velocity commands timeout [s], default 0.5
cmd_vel_timeout: 0.25

# Velocity and acceleration limits
# Whenever a min_* is unspecified, default to -max_*
linear:
x:
has_velocity_limits : true
max_velocity : 1.0 # m/s
min_velocity : -0.5 #m/s
has_acceleration_limits: true
max_acceleration : 0.8 # m/s^2
min_acceleration : -0.4 # m/s^2
angular:
z:
has_velocity_limits : true
max_velocity : 1.7 # rad/s
has_acceleration_limits: true
max_acceleration : 1.5 # rad/s^2
```

Request for review:
@adolfo-rt @bmagyar @efernandez