The dual steering system and controllers

Welcome to my second post! Today we are looking into how the differential steering and Ackerman steering can be combined to produce a dual steering system – as discussed in the previous post, and how a suitable controller can be chosen to operate our robot.

But before we plunge into combined steering mechanisms and wireless wizardry, we are going to explore the remainder of the basic structures outlined at the start of the previous post. These are the drive and power disturbution systems.

NOTE: This only an intro into these systems. Their implementation will be explored in detail as we start designing and making the robot in future posts.

Drive system

This system includes the drive motors and its control circuitry (motor driver module) but can also include other supporting circuitry such as for encoder management etc.

I’ve chosen to use a DC 12V 350RPM metal gear motor w/ encoders as they are much simpler to control and use than stepper motors or brushless DC motors. They also have a wide variety of types with various specs, thus can be bought to match your robot’s needs closely. To find the motor specs needed by your robot (provided you have a general idea of the robot’s attributes – such as it’s weight) you can use this very helpful drive motor sizing tool. Usually the robot weighs 1Kg to 2Kg, I took it to be 1.5Kg  for my calculations.

The choice of motor driver module is initially almost as wide as that of the drive motors, but once you’ve picked your drive motor and know some of it’s basic info such stall current and voltage range, the choice narrows down to those that are compatible for your chosen motor. Even then, there are different types of motor driver modules that operate on different control logic. The most common and recommend type is using PWM I/O control. Others include SPI, I2C and even serial I/O controls but these are rare. The motor driver should be able to handle the motor’s stall current and if 2 motors are connected (parallel) to a single motor output channel on the driver (such as for controlling left motors and right motors in 4WD), don’t forget that the max current per channel should be double the stall current of each motor: 2 motors each draw the stall current when stalled. It should also be capable of handling a bit more than the max recommended voltage of the motor. Although, it’s unlikely all the motors will stall at once, but it’s always better to account for worst case scenarios.

Power Distribution system

This consists of the power source (battery), distribution (wiring) and regulation circuitry. The distribution and regulation can be done easily by using a power distribution board (PDB) which ‘breaks down’ the input voltage from the battery into lower (or higher) voltages via buck/boost converters while still making the battery’s voltage available to use. Common voltages used are 3.3V, 5V and 12V which power different boards and systems in the robot: a micro-controller used to manage I/O may need 3.3V whereas the Pi needs 5V and the motor driver is usually supplied 12V. These PDBs are commonly used in RC systems such as those in RC planes or cars and are easily available. This is a simple system but is integral to the proper functioning of the robot as power fluctuations, spikes or incorrect voltages may interfere (cause resets/reboots) with other system circuitry, cause random/erratic behavior and may even destroy modules and expensive components. So PDBs must be chosen with regard for quality.

The Dual Steering Configuration

Now to the more anticipated bit – dual steering! Differential steering and Ackerman steering can be combined with absolutely no changes to the structure of the steering system! That’s right – if you noticed, the ackerman system already has the structure needed for differential steering in it, as all that differential steering depends on is the motors. It’s all a matter of how it is used!

Dual Steering – Differential drive mode

As shown below, the ackerman steering mechanism can be used for differential drive mode. The servo that moves the tie rod and thus causes the wheel to turn, is set to 90° (centre) and locked (in code and maybe physically – via latch-like mechanism – if needed) so that the wheels are facing straight. Then the signals from the controller can be interpreted for differential steering and the motors can be rotated just like in a normal differential steering robot to steer it.

This slideshow requires JavaScript.

The only requirements for producing differential steering in the dual steering system is:

  • A reliable servo that keeps its centering well: so that it returns to the actual 90° and keeps the wheels straight.
  • Setting the servo to 90° / ‘normal’ and preventing it from being changed via code and (optionally) having notches in the tie rod and inserting pins using another servo, to physically lock it in place.

Dual Steering – Ackerman mode

When the 90° ‘lock’ on the steering servo is released in the code (and physical lock – if implemented – is also released) and the signals from the controller are interpreted for ackerman steering, the servo moves the tie rod just like in normal ackerman steering, causing the wheels to turn at the appropriate angles and thus turning the robot and steering it just as before!

Therefore, the only difference in the design of the robot needed to implement a dual steering system is in the code. But wait a minute… how will the robot know when it is in differential drive mode and when it is in ackerman mode? That’s where the choice of controller and signals transmitted come into play. The controller either needs to send a separate signal to the robot to indicate the current steering mode or have a difference in  the transmission of the existing signals which could be recognised by the robot to change the steering mode.

Controllers and the Operation of Dual Steering System

Many people use the wireless (Bluetooth) game controllers such as that of PS3, Xbox etc. These are suitable for most robots and scenarios, and have enough channels (separate signals for each function) to operate our dual steering system.


  • Lightweight: you’ll be carrying it around and holding it for a long time during competitions, so being lightweight is preferable.
  • Enough channels for most cases.
  • Very easy to use and code for.
  • Uses Bluetooth which has a large variety of libraries and support on the Pi.


  • Doesn’t offer much customisation in terms of the behavior of each channel.
  • Mixes and programming can’t be done on the controller
  • Only buttons and joystick available, no switches or knobs.
  • Doesn’t offer different control modes (unlike the next type of controller below).

The other controller that could be used is a RC transmitter. This may be a bit excessive but it definitely offers a ton of options and can be used for any of our robots, from the simplest ones to the complex ones with a ton of servos and a robotic arm and what not. I will most likely use an RC transmitter since I already own a Turnigy 9X 9Ch radio and if your planning to get one, this would be my recommendation.

Turnigy 9X


  • Larger number of channels and options available: complex robots with lots of servos can be easily controlled.
  • Advanced customisation of the behavior of each channel.
  • Much larger range than Bluetooth (usually about 1 Km – 2 Km, but some upto 4 Km): useful for future robots.
  • Channel mixing can be programmed in radio itself: extremely useful for differential steering robots.
  • Variety of controls: Joysticks, switches, buttons and even knobs!
  • Model memory: different models can be stored on the radio, so you can control totally different robots with the same radio.
  • Most radios (like the turnigy 9X) offer a mode switch. Different channel settings and mixes can be programmed in each mode for each model (3 modes available on turnigy 9X).
  • Custom firmware can be flashed (for most transmitters/radios).


  • A bit heavy: this is the main disadvantage as you’ll be carrying it a lot during the competition.
  • Bulkier than the Bluetooth controllers.
  • Much more expensive than Bluetooth controllers.
  • Needs custom code (in the robot) to convert the receiver signals.
  • Need to learn to set it up and use it.

So there is a bit of a trade-off between cost and comfort vs features and long term benefits, but personally I’d go for the a RC transmitter/radio due to the amount of features and how easy it is to use differential driving: it does all the channel mixing for you, resulting in lesser code and faster response. It also allows for future robots as I doubt you’ll run out of channels to use as your robots get more advanced and more complex!

That’s a wrap for this post. Hope that gave you an idea of how the drive system and power distribution systems work, an explanation of how the dual steering system may be designed, and last but not the least, a basis for choosing your controller to operate the dual steering system and future robots!

In the next post, we’ll look into using the RC transmitter/radio to control our robot – especially using the mode switch to hop between driving modes in the dual steering system. Meanwhile, if you have any queries or suggestions please leave and comment below and I’ll get to them as soon as possible. Thank you for reading and I’m looking forward to meeting you in my next post!


2 thoughts on “The dual steering system and controllers

Add yours

  1. Really interesting and useful to learn about different control methods other than Bluetooth – the Bluetooth controller you listed is not very reliable and gets confused easily by other people using the same controller so s more unique controller is definitely a better option.

    Liked by 1 person

    1. Surprisingly the Bluetooth controller fails often due to power issues rather than interference (PiofThings also suggested this). These controllers are generally designed for gaming and so have a pretty good connectivity and doesn’t easily get interfered as they are designed to be – when playing multi player games in the same room etc. Power has to be constant and stable on the controller and reciever though, they seem to be susceptible to that.


Share your Thoughts

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Blog at

Up ↑

%d bloggers like this: