Welcome to Synthiam!

The easiest way to program the most powerful robots. Use technologies by leading industry experts. ARC is a free-to-use robot programming software that makes servo automation, computer vision, autonomous navigation, and artificial intelligence easy.

Get Started
Asked — Edited

Add Self-Tuning Feedback Motion Control To Your Sabertooth Or Syren Motor Driver

Here is a gadget that may help some that are using motors instead of servos for motion control. Looks interesting.

kangaroo X2

User-inserted image

Here is a copy of the Product Description:

"Kangaroo x2 adds self-tuning feedback motion control to your Sabertooth or SyRen motor driver. It can be used with quadrature encoders or potentiometers to provide position or speed control. It supports one or two feedback channels.

Feedback control has always been highly desirable for mechanical systems. Being able to tell your device to move an exact amount, at a specific speed or to a certain position, and have it reliably and repeatably do so, regardless of the load or disturbances, has obvious benefits. However, PID and other controllers have to be carefully tuned to get acceptable results. Feedback tuning is difficult, time consuming and requires advanced math and physics knowledge.

Kangaroo x2 is the first self-tuning controller in its class. Instead of requiring you to measure, model and calculate the system, the controller itself will figure everything out after a few switch settings and button presses. In the time it takes to get a tasty snack, you can come back to a perfectly tuned system ready to accept your commands.

Instead of requiring you to use a microcontroller to do closed loop control, Kangaroo x2 works from analog and radio control sources as well as microcontrollers and computers. You can, for example, use it to build that two horsepower R/C servo you've always needed as the final piece of your doomsday device. Just remember who helped when the vaporizing starts.

During operation, you can command speeds, positions or combined commands like "move to 37 inches at a speed of 4 inches per second." You can also have the Kangaroo x2 report back speeds and positions while it is running. A mixed mode allows for unstoppable mobile robots with differential drive or tank style steering.

If you need to get your product under control, Kangaroo x2 is the best way to do it. "


Upgrade to ARC Pro

ARC Early Access will give you immediate updates and new features needed to unleash your robot's potential!

I looked at it awhile back but you need quadrature encoders or potentiometers for speed control, if that's what you need it for.
United Kingdom
Lumpy uses one of those. There were some problems with the SendSerial commands a while back, have a read of this.

Maybe Lumpy has had some progress. I hope he chimes in with good news because I would benefit from using some of these. Seems to me this gadget would do what I have seen discussed before about allowing you to control a dc motor like a servo.
The manual they have on the website is pretty informative. I too hope to hear from Lumpy on this one.
United Kingdom
If it's anything like some of the serial devices I've been looking at recently the commands often need to be sent in sections for it to work as desired, for instance the manual says the command is;


1,p400 s50

So for EZ-Script it would likely need to be;


SendSerial(D0,9600,"1,p400 s50")

I'm not entirely sure how EZ-Script takes that comma in the command, it may need to be changed to the Ascii hex code 0x2C which would mean breaking the command in to sections. Generally this works OK in my experiences with the TellyMate and LCD displays. So the code in this case would need to be;


SendSerial(D0,9600,"1",0x2C,"p400 s50")

Or in just the ascii hex for the command;



There are a few different possibilities, combining hex, dec and strings for example may work.

I'd love to have one to mess around with and see what works but funds are pretty much non existent right now but if anyone does get one, or if Lumpy still hasn't figured it out I'm more than happy to shoot over a few scripts to test and see if they work.

In Lumpy's topic, the comma was missed. We never heard if it worked or not but if it didn't this may very well be why.

Yes I did get it to work. There were a couple of commands that were
only mentioned once in the manual that I had missed.

"All commands consist of a channel number, the command, followed by a comma,
and a newline (Enter key)"

Here is the command line that I use to control my R2's dome.

Dome Center - SendSerial(D0, 9600, "1,p2450 s800", 0x0d, 0x0a)
Dome Left - SendSerial(D0, 9600, "1,p3675 s800", 0x0d, 0x0a)
Dome Right - SendSerial(D0, 9600, "1,p1225 s800", 0x0d, 0x0a)

D0=EZ Robot Port
1=Motor Channel
0x0d=Return Key *
0x0a=New Line*

*These two items are what caused me grief for about a week. Once
I added them to the command line everything began to work.

KanagrooX2 module works great. It is precise and very easy to use once

Any questions just ask away.
I use Hotpot/Softpot potentiometer(s) to provide
feedback input for my application.


I also have a new dome drive motor with built in encoder, just
haven't had time to try it out.
Thanks for the replies, Lumpy.:) We appreciate you relating your experience with it.
Thanks for the reply Lumpy. Glad you got it to work.

Do you have any pictures or videos that show how your dome motor is mounted, how the HotPot is mounted, and what you are using for the dome rotation bearing on your R2?

So the Kangaroo x2 board, used with a Sabertooth 2x12, would allow you to control two dc gear motors just like a servo? Will it allow the motors to be positioned to any particular spot in a 360 degree circle or will it be limited to 90 or 180 degrees of travel?

How would I use/control the Kangaroo X2 with the EZ_B?

:O I think I'm going to add this to my project. I haven't spend much time on my robot in a while and this got the fire back on. I've been looking for something to control and measure the speed for a while now and I think this is the solution.

The plan is to run it in speed mode and control it manually rc style. I might go for serial control in the future, though I'm not sure yet what sensors I'm going to use. Probably some kind of quadrature encoder that I'll build, I'm thinking optical. Research is being done :D.

I'll keep you guys posted on this.
That is great! I'm also thinking of buying a couple of these to try out. But maybe after Christmas.

Hope you can shed some light on the questions asked in post #11 above when you get the chance.
I had some mail today.
User-inserted image

I have to say... They're extremly fast... I ordered it last tuesday.
For $2,- international shipping this has to be a personal record with ordering stuff from the US.

Anyways... I still have to find some kind of sensor to use as feedback. Any ideas?
I was thinking something about an optical quadrature encoder, but I haven't been able to find
any that will fit or is affordable.

Until then I'll keep searching.

I have read through the manual and it really does a lot of neat things. Everyone that uses Sabertooth drives should take a serious look at this little jewel.


@dschulpius (Dave)
You could use these to control high torque DC Gear motors for your B9 robot arm joints just like servos. Using servo signals from the EZ-B.
Agreed! I'm looking very close at this. Thanks for the heads up.
I'm watching this , since I have that happen bridge saber tooth 2 X 12 for jarvis.
Hey ! ( Firstly, sorry for my poor english level, I'm a French student )
I'm having trouble with my kangaroo x2 :
It works pretty goods in " independent mode " ( switch 4 : ON )
I send commands as :

printf "1,start"; // initializing the motor 1
putc"0x0D"; // replaces the requisite "enter key"
printf "1,s50000"; // rotate the motor
putc"0x0D"; // replaces the requisite "enter key"

And it works ( I'm using CCS v4 ), I communicate by a serial port ( 9600 baud, 8 bits, N parity, 1 stop )

But my problem is that I can't control my motors in " mixed mode " ( switch 4 : OFF )
I have to send commands as :

printf "D,start"; // initializing the two motor
putc"0x0D"; // replaces the requisite "enter key"
printf "D,s50000"; // rotate the two motor
putc"0x0D"; // replaces the requisite "enter key"

But nothing happens. I tested a lot of things ( "D" or "d" , re-tuning the system, put some delay between the initalization and the speed command, knocking the robot, ... ) but I'm still in trouble.

If someone has an idea, I would really appreciate your help ! I'm using Kangaroo + sabertooth to control a robot ( see the picture ). It's for a robot contest.
Thanks for your time !

User-inserted image
United Kingdom
What are you controlling it with? The commands you have given (printf and putc) are not EZ-Script commands.

The commands should be more like SendSerial(D0, 9600, "1,p1225 s800", 0x0d, 0x0a)
I send my commands by a PIC 18F258 by the serial port, to the Kangaroo
Hello Johnny,

In mixed mode, both drive and turn must have some command for motion to happen. Do also


This will set turn to hold zero speed (alternatively T,pi0 to hold at the current position).
The reason is safety: if it responded with only one, if power gets cut between the time a drive start and command were sent and the time a turn start and command were sent, arbitrary behavior could occur. So, instead, it requires that both have a setting.

Once you have sent this, of course you can send only drive commands if you want.

Also, a side possibility, make sure you have tuned in Mixed Mode. Of the DIP switch settings, Independent/Mixed Mode and Digital/Analog Feedback DIP switches require retuning. Position/Velocity Control and Digital/Analog Control do not.