Opencr by Robotis
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.
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
| Type | Open-source robot controller board |
|---|---|
| Maker | ROBOTIS |
| Processor | STM32F746ZGT6, 32-bit ARM Cortex-M7 with FPU, 216 MHz |
| Sensors | IMU (3-axis gyroscope and accelerometer) |
| Power | 5 V from USB, or 5-24 V battery/supply; 12 V, 5 V and 3.3 V outputs |
| Connection to Synthiam | USB (micro-B) at 921,600 baud |
| Synthiam uses it for | Digital, analog, PWM, UART and Dynamixel servos |
| Website | ROBOTIS store · e-Manual |
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.
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).
| Synthiam port | OpenCR | Notes |
|---|---|---|
D0-D23 | Arduino pin numbers 0-23 | Digital read/write (PWM and servos only on the PWM pins below). Each Synthiam port number is the OpenCR Arduino pin with the same number. |
| PWM | Pins 3, 5, 6, 9, 10, 11 | PWM is only available on these pins: servo positions, DC motor speed (with a motor driver), LED brightness. |
| A ports | Analog header | 6 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. |
D13 | Onboard LED | Handy for a first test (see the script below). |
| UART 0 | Serial1 | Hardware serial port for serial devices. |
| UART 1 | Serial2 | Hardware serial port for serial devices. |
| UART 2 | Serial3, the Dynamixel bus | Use 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.
Install the firmware and connect
- Install the Arduino IDE and open it once to make sure it starts.
-
Add the OpenCR board package. In File > Preferences, paste this into Additional Boards Manager URLs:
Then open Tools > Board > Boards Manager, search forhttps://raw.githubusercontent.com/ROBOTIS-GIT/OpenCR/master/arduino/opencr_release/package_opencr_index.jsonOpenCR, and install OpenCR by ROBOTIS (it shows INSTALLED when done). - Select the board in Tools > Board (OpenCR Board, or a similarly named OpenCR option) so the code compiles for the OpenCR's ARM CPU.
- 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.
- 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.
-
Connect from ARCx. Install ARCx, open the Ezb Connection configuration,
select EZB 0 and set Baud rate to
921600on 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. - 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.
Blink the onboard LED
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.
Both work; ARCx is recommended
| ARCx Recommended | ARC | |
|---|---|---|
| Runs on | Windows 10/11 x64, Ubuntu 24.04 x64 and ARM64, including Raspberry Pi 4/5 | Windows |
| User interface | Any web browser, several people at once; closing the browser leaves the robot running | Windows desktop application |
| Board connection | Ezb Connection, USB serial at 921,600 | EZB Connection, USB serial at 921,600 |
| Dynamixel servos | Dynamixel Servo Driver on UART 2 | Dynamixel skill on UART 2 |
| Scripting | Blockly, JavaScript, Python | Blockly, EZ-Script, JavaScript, Python |
| AI agents | Built-in MCP server | Through robot skills |
When something does not work
D13.
3, 5, 6, 9, 10, 11. Move the servo or motor driver signal to one of those.
Frequently asked questions
Turn your OpenCR into a Synthiam robot
Upload the firmware, connect ARCx at 921,600 baud, and control the board from any web browser.
