To control EMYS, communication should be established according to the protocol of Robotis Dynamixel servos. All motors are controlled via binary data. In order to unify the different components of the robot’s control system, reading the status of touch sensors is the same as reading from the drives.

Communication overview

The master PC controller and the robot communicate with each other by sending and receiving data packets. There are two kinds of packets: Instruction Packet, which the PC sends to the robot, and Status Packet, which is sent in response. Each device has an ID number which enables addressing each device when several are connected to one bus. By passing IDs to Instruction and Status Packets, Master PC controller can control each motor separately. If multiple drives have the same ID, packet collision will occur. Avoid this by giving unique IDs to each motor.

The robot communicates using asynchronous serial communication with the following parameters

  • 57600 BPS,
  • 8 bit,
  • 1 Stop bit,
  • Parity: none.

Communication hardware layer utilizes EIA-485, a half duplex UART serial communication protocol where both TxD and RxD cannot be used at the same time. This method is generally used when many devices need to be connected to a single bus. Since more than one device is connected to the same bus, all the other devices need to be in receive mode while one device is transmitting. The master PC controller that controls the actuators sets the communication direction to receive mode, and only when it is transmitting an Instruction Packet, it changes the direction to transmit mode.

All the servos mounted in the head have Status Return Level set to 1. It means that the servo returns data only after receiving READ DATA command.

Neck and disc motors

For more details on controlling EMYS' neck and disc motors read ROBOTIS Dynamixel documentation:


Remember, that joint q1 consists of two servomotors (master and slave) working synchronously. The slave servo also has a unique ID number but no commands should be sent to it during normal operation. Slave drive is running in Slave and Reverse mode (see 10 (0x0A) register).

WARNING: It is highly recommended NOT to change the range of the servos movement.

Eye motors

RC servos and custom linear drives are used to move EMYS' eyes. They are controlled by a dedicated on-board motion controller (for more details on the controller go to Hardware/Controllers section). The joints responsible for eye rotation, protrusion and eyelid movements comply with the Dynamixel protocol but do not fully support it's features (no temperature sensing, torque control, voltage measurement, etc,). For all these joints the on-board motion controller translates Dynamixel protocol commands to the individual analog servos control signals or linear position.

WARNING: It is highly recommended NOT to change the range of the servos movement and position offsets.

 Touch sensors

Touch sensors have been installed in five points on the EMYS head.  In order to unify the different components of the head’s control system, reading the status of individual sensors is the same as reading from the drives. Each touch sensor has its own unique ID number. The available parameters for each sensor are: analog value corresponding to touch intensity, threshold values and a digital value resulting from the classification between the threshold values of the hysteresis. Data are stored in registers, which are read using the same functions as for the servomotors.


Table of component IDs

Joint/Sensor  Component name  ID 
q1 neck pitch - slave (rotation) 100
q1  neck pitch - master (rotation) 101
q2  head yaw (rotation) 102
q3  head pitch (rotation) 103
q4   lower disc (rotation) 104
q5  upper disc (rotation) 105
q6  left eyelid (rotation) 106
q7   left eyebrow (rotation) 107
q8   left eye (translation) 108
q9   right eyelid (rotation) 109
q10  right eyebrow (rotation) 110
q11  right eye (translation) 111
s1 top sensor 112
s2 left sensor 113
s3 front sensor 114
s4 right sensor 115
s5 bottom sensor 116



EMYS and FLASH are Open Source and distributed according to the GPL v2.0 © Rev. 0.9.2, 23.11.2017

FLASH Documentation