jeudi 13 décembre 2007

More about I-SOBOT servo protocol

Here are some conclusions after tracking servo frames.

Standby frame, sent a few seconds after no order is sent (to reduce servo power):

see below! I don't know why the table is displayed there... probably wysiwyg

Byteleft armright armleft legright leg

  • Only one difference between left arm frame and right arm frame in byte 5. In fact, Byte 5 in left arm frame is the head position. When head is turned right (Joystick action #16), this byte value is 0xBB = -69. When head is turned left (Joystick action #15), this byte value is 0x45 = +69. As we will see below, servo positions are signed values.
  • In the legs, the 5 bytes are used. Although there are only 4 servos in each leg, one is double and that might be the reason. Note that values for left leg are just the opposite of values for right leg (expressed with 8bits): 0x65 = -0x9B, 0xB5 = -0x4B and so on. It is rather logical but it also proves that these servos are well calibrated and might be easy to use without detailed technical data we probably can't get from Tomy.
  • Checksum computation: it is rather clear with these 4 frames that the checksum is the sum of byte 1 ("start" byte = 0x05) through byte 6 including carries. Carry include explains the result 0x06 for right arm as well as results for legs.
Some position values for shoulder rotation (byte 2) obtained with Arm Lock (Joystick control #14):
  • Arms vertically downward along body: left 0x26, right 0xDA which is the opposite of 0x26.
  • Arms horizontal: left 0x80, right 0x80.
  • I think that with left 0xDA and right 0x26 w, I-SOBOT will raise its arms vertically upward.
That's all for today. Now it's OK to send frames with an external UART and check which servo correspond to which byte.

mardi 11 décembre 2007

Right-arm control

Before going into the serial protocol to control I-SOBOT servos, a few precisions about power.

When fully charged, NiMH batteries deliver 1.37V each so VCC voltage is 4.1V. The VDD voltage is 3.3V generated by the voltage regulator. VDD remains quite stable even during I-SOBOT walk though this movement requires most servos to run simultaneously.

Now the servos. I connected external wires on right arm connector (see figure in previous message). The fourth signal is the serial output. It works at logic levels 0-3.3V.
After signal analysis with my scope, it shows that orders are sent in an 8 bytes frame with a basic 8N1 serial protocol (8bits, no parity and one stop bit) at 2400bauds speed.
When I-SOBOT is not moving, the frame for the right arm is:
byte 1 0x05
byte 2 0x00
byte 3 0x00
byte 4 0x00
byte 5 0x80
byte 6 0x80
byte 7 0x60
byte 8 0xFF
When the arm is moving, bytes 2, 3, 4 and 7 change values.
After testing with simple movements, I think:
byte 2 = shoulder rotation
byte 3 = shoulder raise
byte 4 = elbow
This will be confirmed with future tests.

Signification of other bytes:
Obviously, there is no address in the frame so orders are broadcasted to all the servos in the arm. Each servo must be programmed to know which byte in the frame correspond to its position. Also, it is necessary that the frame contains synchronization bytes and checksum so that receivers can synchronize. I think the protocol is:
byte 1 0x05 = beginning of frame
bytes 2-6 servo positions
byte 7 checksum or similar data consistency check (signals may be corrupted by servos power draw)
byte 8 0xFF = end of frame (good to synchronize the scope, it is the longest positive pulse of the frame: 3.76ms)

I will go on soon with the left arm and the legs before testing with an external UART.

dimanche 9 décembre 2007

i-SOBOT controller overview (2)

To finish with the controller top side, here is a first detail of the servo connections. Each servo is connected with 4 wires: battery supply for motor power(VCC in red), electronic supply (VDD in yellow, to be confirmed), signal (to be confirmed) and ground (GND in black). There are 2 extra signals on the head connector for LEDs.
Note header CON1 which is probably the programming connector for on-board chips.

On the other side of the board, we find the power section, the speaker amplifier and the gyroscope PCB.
The gyroscope is a Murata device. Package is similar to Gyrostar series but the reference C720 is not mentionned in the datasheet ( Assuming they are similar, this gyroscope measures rotation on axis along the longest side of the package. So the way the board is mounted in I-SOBOT, it measures rotation of its chest. I just don't understand why it is mounted on a daughter board, it could measure the same rotation mounted on the main PCB. Signal amplification (such as mentionned in the datasheet) is performed with a Unisonic Technologies LMV358L rail-to-rail operationnal amplifier(
Last thing we see clearly on this side, the 2mm pitch headers for servo connection.

Let's see how servos are wired to the dispatchers.
Note the star wiring for optimal power of each servo. Servos are wired in parallel from a dispatcher as shown on the picture below.
Each servo has four ultra flexible wires: red, green, blue and orange as mentionned by the letters R, G, B and O on the dispatcher. The meaning is:
Blue = GND = Battery -
Red = VCC = Battery +
Orange = VDD
Green = Signal

i-SOBOT controller overview

I place back the battery holder and lay i-SOBOT on it to access the controller cover. It is fixed with 4 screws as shown below:

Nothing special to remove them and access to the controller. Here is a list of parts I have identified:

The tilt sensor is a simple switch made of a mercury drop that connects two electrodes (on the top side) when it is not vertical. It is a very simple sensor that can tell roughly the controller when i-sobot chest is horizontal or vertical.

Once the power, speaker (SPK1) and microphone connectors are unplugged, it is possible to remove the board that is just plugged in the various servo connectors. On this picture, you can see that it is easy to send your own signals to the servos. The shoulder servos are hidden by the head servo:

Others details in next message.

i-sobot power supply

I-SOBOT is powered with 3 NiMH batteries, size AAA HR03.
3 Eneloop 800mAh NiMH batteries are included in the pack but it works also well with other NiMH batteries.
The manual warns not to use non rechargeable batteries like alkaline because voltage may be too high: >1.5V for alkaline, 1.2V for NiMH.
Also NiMH batteries can draw high current and it is necessary for the 17 servos. I have noticed that not all servos move at the same time in complex motions: so far I don't know if this is due to a limitation of the current draw or of the controller. Anyway, this is a limitation I would like to remove to generate nice and fluid movements.

Let's remove the battery holder (it is fixed to the body with 2 screws):

Don't do any disassembly by yourself if you are not sure to be able to reassemble the parts. These operations void guarantee.

On the next picture, you can see the battery holder 3.6V single output and a protection on its back (probably short-circuit or fuse):

I tried to remove the front cover with the upper 4 screws but something at the bottom prevents removing it. However, there is nothing interesting except the speeaker as far as I could see.

The battery cable goes through the body to power the controller in the back:

Let's see the controler side and the good news.

jeudi 6 décembre 2007


This blog is dedicated to hacking of Tomy i-SOBOT humanoïd robot.

I received my first i-SOBOT yesterday and tried the various preprogrammed modes. It is really fun for the value, especially the special actions mode like dancing and doing exercises. Tomy and Takara engineers have done a great job and i-SOBOT is certainly a milestone in humanoïd robots history.
There is already many great videos of it on-line and it is not the aim of this blog to add more.

As a robotics enthousiast, I am much more interested in studying the hardware to use i-SOBOT as a low-cost humanoïd platform with advanced robotics controller like Mobisense Systems MBS270, especially to add sensors and computer vision.
I wanted to start this kind of project earlier but I could not afford alternate humanoïds like Robonova and Bioloïd series. I-SOBOT is a nice platform for such projects. Of course, there is Robosapien but another point for i-SOBOT is that it looks, to my point of vue, more friendly than other humanoïds.
Robosapien is really agressive and nothing except its name would make think about wisdom (sapien in latin).

As a first step, I will try to present a hardware overview of i-SOBOT. The next step will be servos protocol hacking. This has been done already in Japan and I will add the link when I find it.