Edit on GitHub



OpenCR is a main controller board of the TurtleBot3. OpenCR; Open-source Control module for ROS, is developed for ROS embedded systems to provide completely open-source hardware and software. Everything about the board; Schematics, PCB Gerber, BOM and the firmware source code for the TurtleBot3 are free to distribute under open-source licenses for users and the ROS community.

The STM32F7 series is a main chip inside the OpenCR board which is based on a very powerful ARM Cortex-M7 with floating point unit. The development environment for OpenCR is wide open from Arduino IDE and Scratch for young students to traditional firmware development for the expert.

OpenCR provides digital and analog input/output pins that can interface with extension board or various sensors. Also, OpenCR features various communication interfaces: USB for connecting to PC, UART, SPI, I2C, CAN for other embedded devices.

OpenCR can provide a best solution when using with a SBC. It supports 12V, 5V, 3.3V power outputs for SBCs and sensors. It also supports hot swap power inputs between battery and SMPS.

OpenCR will be the best solution for implementing your embedded control design.


NOTE: Hot swap power switch between shore power(12V, 5A SMPS) and mobile power(battery) from OpenCR board enables UPS(Uninterrupted Power Supply) feature.

Items Specifications
Microcontroller STM32F746ZGT6 / 32-bit ARM Cortex®-M7 with FPU (216MHz, 462DMIPS)
Sensors (Discontinued) Gyroscope 3Axis, Accelerometer 3Axis, Magnetometer 3Axis (MPU9250)
(New) 3-axis Gyroscope, 3-Axis Accelerometer, A Digital Motion Processor™ (ICM-20648)
Programmer ARM Cortex 10pin JTAG/SWD connector
USB Device Firmware Upgrade (DFU)
Extension pins 32 pins (L 14, R 18) *Arduino connectivity
Sensor module x 4 pins
Extension connector x 18 pins
Communication circuits USB (Micro-B USB connector/USB 2.0/Host/Peripheral/OTG)
UART x 2 (20010WS-04)
CAN (20010WS-04)
LEDs and buttons LD2 (red/green) : USB communication
User LED x 4 : LD3 (red), LD4 (green), LD5 (blue)
User button x 2
Powers External input source
5 V (USB VBUS), 7-24 V (Battery or SMPS)
Default battery : LI-PO 11.1V 1,800mAh 19.98Wh
Default SMPS: 12V 5A
External output source
12V@1A(SMW250-02), 5V@4A(5267-02A), 3.3V@800mA(20010WS-02)
External battery Port for RTC (Real Time Clock) (Molex 53047-0210)
Power LED: LD1 (red, 3.3 V power on)
Reset button x 1 (for power reset of board)
Power on/off switch x 1
Dimensions 105(W) X 75(D) mm
Mass 60g

NOTE: MPU9250 sensor has been replaced with ICM-20648, since 2020, as MPU9250 is discontinued to produce.

User Guide

Run turtlebot3_core node
$ rosrun rosserial_python serial_node.py __name:=turtlebot3_core _port:=/dev/ttyACM0 _baud:=115200
$ rostopic echo /imu

  seq: 179
    secs: 1486448047
    nsecs: 147523921
  frame_id: imu_link
  x: 0.0165222994983
  y: -0.0212152898312
  z: 0.276503056288
  w: 0.960632443428
orientation_covariance: [0.0024999999441206455, 0.0, 0.0, 0.0, 0.0024999999441206455, 0.0, 0.0, 0.0, 0.0024999999441206455]
  x: 2.0
  y: 1.0
  z: -1.0
angular_velocity_covariance: [0.019999999552965164, 0.0, 0.0, 0.0, 0.019999999552965164, 0.0, 0.0, 0.0, 0.019999999552965164]
  x: 528.0
  y: 295.0
  z: 16648.0
linear_acceleration_covariance: [0.03999999910593033, 0.0, 0.0, 0.0, 0.03999999910593033, 0.0, 0.0, 0.0, 0.03999999910593033]

turtlebot3_core.ino includes debugging code to check odometry, connected sensor and state of TurtleBot3 or DYNAMIXEL’s. This might be help you to implement code and test it without ROS connection.

First, ready to LN-101 or any USB to Serial converter.

Second, open turtlebot3_core_config.h file and activate DEBUG. After that upload it to OpenCR.

Third, connect converter to UART2 in OpenCR.

Forth, download minicom and configure baudrate 57600 and port name.

  $ sudo apt-get install minicom
  $ minicom -s

Fifth, press reset button of OpenCR then you can see how turtlebot3_core.ino start and some data.

Success to init Motor Driver
Success to init Sensor
Success to init Diagnosis
Success to init Controller
Bumper : 2
Cliff : 204.00
Sonar : 1.00
Illumination : 480.00
Battery : 12.15
Button : 0
    w : 1.00
    x : 0.00
    y : -0.00
    z : 0.00
Torque : 1
Encoder(left) : 876
Encoder(right) : 4001
Odometry :
         x : 0.00
         y : 0.00
     theta : 0.00
How to modify ROS library code

You can modify ROS library in below paths.



If you want to modify it in the sketch folder, move the above two folders to the “skechbook/libraries” folder.

How to added topic messages

For generate topic header file, you run command below in section 2.2 of rosserial tutorial.

$ cd <sketchbook>/libraries
$ rm -rf ros_lib
$ rosrun rosserial_arduino make_libraries.py .

Since some hardware-related libraries generated by the above command are different from OpenCR, you must copy only the necessary topic header files.

Then copy the generated header file to the path below.


Open Source Software

You can modify the downloaded source code and share it with your friends.

Open Source Hardware

If you want to manufacture your own OpenCR, you can download necessary files such as PCB Gerber, BOM. When the board is ready firmware source code can be burned into the MCU.