Signal Conditioning for Remote Control¶
Link to module repo: Signal Conditioning for Remote Control
Overview¶
When steering a rover with a remote control unit such as Remote Control over SBUS several problems arise.
- Small changes in the angular setpoint lead to massive rotary movements of the wheel.
- The configuration of the rover includes settings for maximum linear and angular velocities. These maximum values must be observed for all control movements.
TwistLimit¶
This class simply takes in a twist message from a remote control unit and applies scaling in order to not exceed maximum settings in the rover configuration. This ensures that a full deflection on the remote control corresponds to the maximum value of the configuration.
CurvatureVector¶
The incoming message from the remote control of type Matrix<6,1,double> is not interpreted as regular twist message. Its elements have alternative meanings which facilitates steering the robot with the remote control. The signals from the remote control include velocity, angle of the wheels and curvature. The incoming vector can be described with
The principle is based on the Ackermann steering system. As with a car, acceleration (and therefore the speed) can be controlled using the accelerator pedal. This is done by the x-value, which sets the absolute velocity. The steering wheel sets the steering radius of the vehicle. The radius is the inverted curvature (R= 1/K). Driving straight ahead therefore has curvature = 0 (radius = infinite) and goes up to a minimum turning radius (K = 1/R_min). In contrast to Ackermann steering, (quasi-) omnidirectional systems allow crab steering. The y-value alpha sets the angle of the crab steering. The block converts the input values into a classic twist vector.

The second component angle directly controls the turning of the wheels relative to a rover. As long as the wheels are driven with the same velocity a rover does not actually turn but simply moves in the direction of the wheels.
For turning you need a third control value curv which is given in the last component of the vector. This parameter allows the rover to change its direction. For a rover with two wheels the angular position will be set differently in order to achieve such a curve. The radius of the curve - the curvature - is calculated from curv by 1/curv. In such a way by using vabs and curv the steering is similar to the steering of a remote controlled racing car.
CenterRotation¶
The twist vector from a remote control unit is reduced to the angular rotation in z-direction. This means a simple rotation of the rover. This angular rotation is scaled so as full scale does not exceed the maximum value given in the rover configuration.
Configuration¶
The repository for the signal conditioner does not include a configuration. However, the configuration of the rover includes settings for maximum linear and angular velocities. These settings have to be made in the overall configuration of the rover and must be pulled in from there. For this, the the header file TwistLimit incorporates the helper class GeneralConfig. Define such a class in your control system
and pull in the values from the top-level configuration.