Pololu Robotics & Electronics
My account Comments or questions? About Pololu Contact Ordering information Distributors

Pololu Forum

Jrk 21v3 full serial command set


Hi, I have a full size biped built using 10 of the torxis i00600 servos.
Trying to control them open loop with RC position control has been a disaster.
It is crucial to know the servo position before sending a target command or the robot may break a servo gear. I have done that many times.

I cannot use usb so I am stuck with the serial commands.
Are all of the commands for the jrk 21v3 available via serial?
Can I get a list?
Please do not send me to the incomplete list in the users manual.
For example, how using the serial commands, do I write the variable that sets an individual address to each board.



Hello, Daniel.

The “Motor Control Commands”, “Error Reporting Commands”, and “Variable Reading Commands” sections of the jrk user’s guide completely list all of the serial commands available for the jrk controllers.

It sounds like you want to be able to change the device number of each board via serial commands, which is not an available option. In order to change configuration parameters like the device number, you will need to use the native USB interface. The simplest way to change the device number would be to use the Jrk Configuration Utility. Alternatively, you could use JrkCmd (the command line utility that comes with the Jrk Configuration Utility). The JrkCmd takes a jrk settings file as an input and applies the settings to the jrk, but it is not particularly easy to write or edit a jrk settings file. You can see a description of the commands for JrkCmd by typing jrkcmd (with nothing else) on the command line. If you want to get a better understanding of how JrkCmd works, you can see its C# source code in the Pololu USB Software Development Kit.



Hi Brandon,
I was off the project for a bit but now trying to attack the problem again.
Let’s try again please.
I have 10 i600 Servos that are SEALED. (Comes that way from Gearwurx)
They are set for TX/RX control at fixed 115200.
The UART signals are hard wired in a daisy-chain with multiple AND gates.
The addresses are all unique.
The servos can be positioned via the limited UART commands.

It is important for me to be able to tune the PID dynamically.
From your last post it seems that the firmware person did not allow for this in a daisy-chained system.

Is this correct?

Thanks, Daniel


Hello, Daniel.

There is no way to change the PID coefficients through the TTL serial interface. You would need to use the native USB interface as I described in my previous post. However, if you do write a program to change the nonvolatile configuration parameters (like the PID coefficients), you should be careful because they are stored in EEPROM, which is only rated for 100,000 erase/write cycles.



Wouldn’t need to change the PID more than a few dozen times. (Actually the learning algorithm adjusts them)
But there are other settings that should be changeable at run-time besides the PID.
Depending on the biped robots move it would be great if I could limit the current to prevent damage.
Quite a few gears have been stripped without real time current control.

Total “My Bad” for not researching the GearWurx and the Jrk products a bit more.
I read the words “Daisy Chain” and “Control” in the Pololu’s user manual and didn’t realize the limitations.

A 10 servo USB based robot is not practical in wiring, connection to a hub or realtime firmware control.
The Jrk 21v3 with it’s limited communications stack firmware is not the right controller.
I will use it as is for now.

Will you be replacing it with something less primitive in the near future?

Thanks for the quick reply.


Ever think of Open Sourcing the code to deprecated product. I would be happy to fix the Jrk.


We recently released the Jrk G2 controllers, which are updated versions of the original Jrk controllers.

Similar to the original Jrk controllers, the G2 versions store all of their settings in non-volatile EEPROM memory. However, they also store a temporary copy in RAM, which allows you to read and write over serial (as well as I2C and USB) to change them on-the-fly (e.g. the RAM settings will override most of the EEPROM settings). You can find some more information about this in the “Setting reference” section of the Jrk G2 Motor Controller User’s Guide.

You might be able to swap in the Jrk G2 controllers, but they are not the same form factor, and the mounting holes are in different locations, so you would need to figure out a way of securing them.

We do not currently have any plans for releasing the source code for the firmware on the Jrk controllers.



Hi Brandon,
I found a protocol.h file on the internet for the 21v3.
This indicates that someone at Pololu wrote some C code.
It would be great if I could get some C source code that runs on the serial UART for my 10 servos that are daisy chained. They are all addressed separately and set up for CRC. I could spend about 4 hours and write it from scratch.

It would be great if I don’t need to do that.

Thanks, Daniel Albert


We do not have any example code for controlling several daisy-chained Jrk controllers with CRC calculations like you described. If you are referring to the original Jrk 21v3, you can find a link to some example C code that shows how to send Set Target and Get Position commands in the “Cross-platform C” and “Windows C” sections of the Jrk user’s guide.

Additionally, you might find the “CRC Computation in C” section of the Simple Motor Controller’s user’s guide helpful. Since the Simple Motor Controllers use the same CRC implementation, the method for calculating it would be the same, only with different bytes.

Also, if you try writing your own code and run into problems, or have any specific questions about the protocol, I would be happy to try to help.