EZMQTT Broker icon EZMQTT Broker — Local MQTT broker for ARC: host pub/sub messaging on TCP port 1883, relay topics between publisher and subscriber clients. Try it →
 
OpenCR

Opencr by Robotis

Turn OpenCR into an EZB controller for ARCx: drive Dynamixel servos, PWM, sensors, UART and scripts at 921,600 baud.
Connection Type
USB
Number of Servos
200
Audio Support
No
Camera Support
No
UARTs
None
I2C Support
No
ADC Ports
None
Digital Ports
None
A blue robot controller board cabled to smart servos in a desktop robot arm and connected by USB to a laptop showing a control dashboard
OpenCR + Synthiam ARCx

An ARM Cortex-M7 robot controller, ready for ARCx

The ROBOTIS OpenCR 1.0 is an open-source robot controller with an ARM Cortex-M7 processor, Dynamixel servo ports and an onboard motion sensor. Install Synthiam's EZB firmware and it becomes an EZB-compatible board that ARCx drives over USB: ports, PWM, serial devices and Dynamixel servos from any web browser.

How the OpenCR works with Synthiam. You compile and upload Synthiam's OpenCR firmware with the Arduino IDE, and the board speaks the EZB protocol over its USB port at 921,600 baud. In ARCx, the Ezb Connection skill connects to that serial port, and the Dynamixel Servo Driver runs Dynamixel servos on the board's servo bus. In ARC, use the EZB Connection skill (and the Dynamixel skill for servos). We recommend ARCx: it runs on Windows, Linux and Raspberry Pi, and is used from any web browser.

Meet the hardware

What is the OpenCR?

OpenCR 1.0 is an open-source robot controller board from ROBOTIS. It pairs an ARM Cortex-M7 microcontroller with power regulation for motors, three TTL and three RS485 Dynamixel ports, an IMU, user buttons and LEDs, and Arduino-style headers. It is the controller in ROBOTIS's TurtleBot3 robots.

With Synthiam's firmware, the OpenCR becomes an EZB controller: ARC and ARCx read and write its ports, generate PWM for servos and motor drivers, talk to serial devices on its UARTs and send packets to Dynamixel servos on its servo bus.

OpenCR at a glance

TypeOpen-source robot controller board
MakerROBOTIS
ProcessorSTM32F746ZGT6, 32-bit ARM Cortex-M7 with FPU, 216 MHz
SensorsIMU (3-axis gyroscope and accelerometer)
Power5 V from USB, or 5-24 V battery/supply; 12 V, 5 V and 3.3 V outputs
Connection to SynthiamUSB (micro-B) at 921,600 baud
Synthiam uses it forDigital, analog, PWM, UART and Dynamixel servos
WebsiteROBOTIS store · e-Manual
Possibilities

What you can do with an OpenCR in Synthiam

⚙

Dynamixel servos

The firmware powers the Dynamixel bus and handles its half-duplex direction for you. Map each servo to a Synthiam virtual port and use it like any other servo.

🎛

PWM servos and motors

Position hobby servos, set DC motor speed through a motor driver, or dim LEDs on the PWM pins.

📏

Sensors and I/O

Read analog sensors (potentiometers, distance sensors) on the A ports and switch digital outputs, including the onboard LED.

🔌

Serial devices

Talk to GPS modules, motor controllers and other serial sensors on the hardware UARTs from any script.

🎬

Animations and arms

Record poses in Auto Position, edit timelines in Servo Animation, or drive an arm by its end point with the Kinematics Service.

🤖

Scripts, AI and Custom UI

Blockly, JavaScript and Python; AI agents through ARCx's MCP server; and drag-and-drop control screens for phones and tablets.

Port reference

How Synthiam ports map to the OpenCR

Synthiam uses familiar port names: D0, D1... for digital and A0, A1... for analog. OpenCR labels and capabilities differ, so keep the ROBOTIS pin map handy: OpenCR pinout and examples (ROBOTIS e-Manual).

OpenCR pinout diagram showing the GPIO header, JTAG, OLLO, UART, power, battery, TTL and RS485 Dynamixel connectors
OpenCR connectors: GPIO header, power outputs, UART, and the TTL and RS485 Dynamixel ports.
Synthiam portOpenCRNotes
D0-D23Arduino pin numbers 0-23Digital read/write (PWM and servos only on the PWM pins below). Each Synthiam port number is the OpenCR Arduino pin with the same number.
PWMPins 3, 5, 6, 9, 10, 11PWM is only available on these pins: servo positions, DC motor speed (with a motor driver), LED brightness.
A portsAnalog header6 analog ports (_AnalogPorts 6). They read analog sensors, and can also be used as digital I/O, so an A pin can often behave like a D pin.
D13Onboard LEDHandy for a first test (see the script below).
UART 0Serial1Hardware serial port for serial devices.
UART 1Serial2Hardware serial port for serial devices.
UART 2Serial3, the Dynamixel busUse this UART in the Dynamixel skill. The firmware switches the half-duplex bus between send and receive and turns on Dynamixel power at start-up.

In other words, Synthiam's UART 0, 1 and 2 map to the OpenCR's UART 1, 2 and 3 (Serial1, Serial2 and Serial3). If you are unsure which pin to use for a device, check the ROBOTIS mapping page above for the correct OpenCR header pin and its supported modes.

Get started

Install the firmware and connect

  1. Install the Arduino IDE and open it once to make sure it starts.
  2. Add the OpenCR board package. In File > Preferences, paste this into Additional Boards Manager URLs:
    https://raw.githubusercontent.com/ROBOTIS-GIT/OpenCR/master/arduino/opencr_release/package_opencr_index.json
    Then open Tools > Board > Boards Manager, search for OpenCR, and install OpenCR by ROBOTIS (it shows INSTALLED when done).
  3. Select the board in Tools > Board (OpenCR Board, or a similarly named OpenCR option) so the code compiles for the OpenCR's ARM CPU.
  4. Download and unzip the firmware source: DJ's OpenCR v1 Firmware Sourcecode (updated February 9, 2021). Put it in a folder you can find easily.
  5. Compile and upload by following the tutorial to compile and upload the firmware. If the upload fails, check the selected COM port under Tools > Port.
  6. Connect from ARCx. Install ARCx, open the Ezb Connection configuration, select EZB 0 and set Baud rate to 921600 on the Connection tab. Save, pick the OpenCR's serial port in the main window and press connect. In ARC, add the EZB Connection skill, choose the COM port and set the baud rate to 921,600.
  7. Add Dynamixel servos (optional). Add the Dynamixel Servo Driver, choose Hardware UART 2 and your servos' baud rate, scan the bus, map each servo to a virtual port and press Initialize.

Why 921,600 baud?

Synthiam talks to microcontrollers over a USB "COM port" at a speed called the baud rate. Many Arduino-style devices use 9600 by default, but this firmware is set to a much faster 921,600. If the baud rate is wrong, the connection fails or the board behaves unpredictably.

The Bus tab of the ARCx Dynamixel Servo Driver with EZB, hardware UART, baud rate, timeout and initialization settings
The Dynamixel Servo Driver's Bus tab. On the OpenCR, choose Hardware UART 2.
First test

The OpenCR has an onboard LED on Digital 13 (D13). These scripts turn it on and off every 500 milliseconds (half a second) in a loop.

ARCx (JavaScript)

while (true) {

  Digital.set(d13, true);
  sleep(500);

  Digital.set(d13, false);
  sleep(500);
}

ARC (EZ-Script)

:loop

Set(d13, true)

sleep(500)

Set(d13, false)

sleep(500)

goto(loop)

If the LED does not blink, confirm (1) the firmware is uploaded, (2) you are connected to the correct COM port, and (3) the baud rate is 921,600.

ARCx or ARC?
ARCx Recommended ARC
Runs onWindows 10/11 x64, Ubuntu 24.04 x64 and ARM64, including Raspberry Pi 4/5Windows
User interfaceAny web browser, several people at once; closing the browser leaves the robot runningWindows desktop application
Board connectionEzb Connection, USB serial at 921,600EZB Connection, USB serial at 921,600
Dynamixel servosDynamixel Servo Driver on UART 2Dynamixel skill on UART 2
ScriptingBlockly, JavaScript, PythonBlockly, EZ-Script, JavaScript, Python
AI agentsBuilt-in MCP serverThrough robot skills
Troubleshooting

When something does not work

Set the baud rate to 921,600. In ARCx it is on the board's Connection tab in Ezb Connection; save, then disconnect and reconnect after changing it.

Check the COM port under Tools > Port, that OpenCR Board is selected, and that the OpenCR board package shows as installed in Boards Manager.
Confirm the firmware is uploaded, you are connected to the correct COM port, and the baud rate is 921,600. The LED is on D13.

PWM only works on pins 3, 5, 6, 9, 10, 11. Move the servo or motor driver signal to one of those.

Choose UART 2 in the Dynamixel skill, check that the servos are powered (Dynamixel servos need the OpenCR's battery or supply input, not USB alone), and that the skill's baud rate matches every servo on the chain.
Questions

Frequently asked questions

"Firmware source code" is the human-readable program you compile into what runs on the board. The Arduino IDE compiles it for the OpenCR and uploads it in one step, and having the source means you can change settings such as the baud rate.

Uploading the Synthiam firmware replaces the program on the board, including the TurtleBot3 firmware. If you want to keep the TurtleBot3's ROS setup, see the TurtleBot 3 and ROS 2 pages instead.

Not with this firmware. It exposes the digital, analog, PWM and UART ports and the Dynamixel bus. The IMU, buttons and extra LEDs are not part of the EZB firmware.

Turn your OpenCR into a Synthiam robot

Upload the firmware, connect ARCx at 921,600 baud, and control the board from any web browser.


ARC Pro

Upgrade to ARC Pro

Join the ARC Pro community and gain access to a wealth of resources and support, ensuring your robot's success.