Clone wiki

libkondo4 / Home


What is it?

libkondo4 is a small open source C library project by Christopher Vo for controlling the servos and servo controller in the Kondo KHR-3HV humanoid robot kit. It consists of the following:

  • rcb4.c - A library to control the Kondo RCB-4HV serial servo controller
  • ics.c - A library to control servos via the Kondo ICS 3.0 protocol
  • Bindings for other programming languages (Python, Java)

The objective of this library is to control the robot using simple PC software. Most of the functionality in this library so was discovered by reverse engineering - listening to serial packets. In August 2010, Kondo released reference guides in Japanese for the RCB-4 and ICS 3.5 protocols, so the plan is for this library to implement full functionality of both protocols.

We use a branch of this code on the bare metal of the Blackfin DSP (Surveyor SRV-1 camera system) and on embedded Linux (Gumstix Overo) for our RoboPatriots robots in the RoboCup humanoid league.

  • Known to work on Linux and Mac OS X (untested on Windows)
  • Known to work on embedded Linux (on Gumstix and IGEPv2 platforms)
  • Minimal C code with simple, unintrusive error handling (all function calls return a status code)
  • Documentation, error messages, and code comments in English
  • Currently, it automatically detects and uses your USB Kondo adapter using libftdi and is capable at operating at full 1.25 Mbps serial speed (defaults to 115200 baud).
  • It is very easy to replace the communication with your needs - e.g. standard termios serial, or microcontroller GPIO or UART read/write commands. (used on bare metal of SRV-1 Blackfin with custom UART)
  • Example Java and Python wrappers included (based on swig)!
  • Example Nintendo Wii remote control code included (based on wiiuse)
  • Example PCB drawings to help you design your own ICS 3.0 circuit / adapter

This image shows a simple way to wire up the RCB-4 directly to a 3.3V UART on a microcontroller. The RCB-4 serial port operates at 5V CMOS logic level, inverted signal (idle low).

Get libkondo4!

  • To check out the source code: hg clone
    Please read the README instructions and license!


You will need to have libusb and libftdi, unless you modify the serial communication to use a different API.

Implemented Functionality

  • Play a motion (and can optionally block until a motion is done)
  • Stop / Freeze a currently playing motion
  • Emulate a KRI-3 button press and release
  • Get the option bytes from the robot
  • Read AD values (including battery level)
  • Read / Write digital (PIO) values and configure their input/output direction
  • Get / Set counter values (which can be referenced in motion files)
  • Query servo data from RCB-4 (id, current position, set position, trim)
  • Forward ICS packets through the RCB-4 (set position, trim, stretch, etc)
  • Ping robot
  • ICS direct serial protocol (control servos directly attached via serial). You need to have the special ICS USB adapter from Kondo, or your own circuitry to communicate half-duplex to the servos. I have made several PCB designs which I will share soon...
  • Java and Python bindings
  • Nintendo Wii remote control example

Future Work

(see issue tracker for the most up-to-date progress)

  • Functionality to change COM and Servo baud rates (and to automatically detect the correct baud rate)
  • Supporting PIO read / write
  • Uploading / downloading motion files from XML
  • Supporting standard termios serial (for communication without USB adapter)
  • Complete implementation of RCB-4 and ICS 3.5 protocols


Copyright 2010 - Christopher Vo
George Mason University - Autonomous Robotics Laboratory

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.