I have a platform with two tracks and two motors. Each one uses an electronic speed control with "double tap to reverse". Each ESC takes an input pulse train frequency from at 1500 neutral +/-700.

I'm interested in learning if there are algorithms or a list of commands I can use to control how such platform executes maneuvers. For example:

  • Lock one thread and have the platform rotate by using the other one
  • Have two treads rotate in opposite directions
  • Execute a U turn

I'm struggling with expressing in code how such maneuvers should be executed. There's a "dead" zone around the 1500 pulse train frequency where the ESC output is too weak to cause the platform to move. The double tap to reverse also makes it tough to understand for how long each track should be turned off.

Thank you for your input

  • $\begingroup$ List questions are generally discouraged on this site. Is there any chance you can edit your question to solicit less discussion and opinion and phrase it in a way that there can be correct answers? $\endgroup$
    – ThomasH
    Commented Nov 10, 2012 at 15:36
  • $\begingroup$ The correct answer to this question would be a link to a website that lists either an algorithm or a table of tracked platform maneuvers. $\endgroup$
    – Alex Stone
    Commented Nov 10, 2012 at 19:27
  • $\begingroup$ I have to be honest. I've read this question a few times now, and I don't really understand what you're asking. Or what this platform looks like. $\endgroup$ Commented Nov 10, 2012 at 19:54

1 Answer 1


I think you're caught up in trying to build high-level behavior (maneuvers) from low-level motor functionality, when in reality you should be attempting to decouple them somewhat.

So you're asking 3 questions.

  1. How do the high level behaviors work?
  2. What low-level API do I want?
  3. How should the low-level API be implemented on my ESC?

So, working backwards: the relevant information on implementation is most likely in your ESC's manual, on their website, or some such. Call them up if it's unclear, sometimes they'll be familiar with the programming gotchas and can point you in the right direction.

I'd focus on writing a motor controller API that accepts desired velocity for each tread. You'll have to fake it in the dead zone, most likely by varying the motor speed so on average it's the speed you want (probably some sort of PID here). But, your controller should maintain a desired velocity (0%-100% + direction) for each motor until it's handed a new desired velocity.

The high level behaviors just set desired velocity for each tread. So, a U-turn is any setting where the velocities are equal and opposite; a turn is anything where velocities are unequal but aligned. Your path planner (or whatever tells the platform where it should go) will be the one to decide how tightly to turn to get wherever it's going (another PID, most likely).


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.