Skip to main content

ROSbot ( 2 | 2 PRO | 2R )


ROSbot is a ROS powered 4x4 drive autonomous mobile robot platform equipped with LIDAR, RGB-D camera, IMU, encoders, distance sensors available in three version: "2" and "2 PRO" and "2R".

ROSbot is an affordable robot platform for rapid development of autonomous robots. It can be a base for custom service robots, inspection robots and robots working in swarms. All versions integrates:

  • 4-wheels mobile platform containing DC motors with encoders and an aluminum frame
  • Orbbec Astra RGBD camera
  • MPU 9250 inertial sensor or BNO055 (accelerometer + gyro)
  • rear panel providing interfaces for additional modules

ROSbot versions

ROSbot is available in three options which next to features mentioned before also include:

  • Asus Tinker Board with Rockchip RK3288 (ARM32 architecture) up to 1,8GHz, 2GB DDR3 RAM and 32 GB MicroSD.
  • RPLIDAR A2 laser scanner

If you do not own ROSbot yet, you can purchase it here.

Gazebo Simulation Model

You can also test the performance of ROSbot using our simulation model in Gazebo environment. It is available here, at our GitHub page.

ROSbot gazebo

You can find free ROS tutorials dedicated for ROSbot under this link. They will guide you through different aspects of programming autonomous vehicles in ROS

Hardware guide


ROSbot dimensions

Dimensions with camera and LiDAR200 x 235 x 220mm / 7.87 x 9.25 x 8.66in [L x W x H]
Dimensions without camera200 x 235 x 146mm / 7.87 x 9.25 x 5.74in [L x W x H]
Dimensions without camera and LiDAR200 x 235 x 106mm / 7.87 x 9.25 x 4.17in [L x W x H]
Weight2,84kg / 100oz (with camera and LiDAR), 2,45kg / 86oz (without camera and LiDAR)
Standard wheel diameter / Clearance / Wheelbase85mm / 24.5mm / 105mm
Mecanum wheel diameter / Clearance / Wheelbase97mm / 30.6mm / 105mm
Chassis materialPowder-coated aluminum plate, 1.5mm thick
Maximum translational velocity1.0 m/s
Maximum rotational velocity420 deg/s (7.33 rad/s)
Maximum load capacityUp to 10kg / 352oz *not in continuous work
Battery life1.5h - 5h


Side scheme


Components description

Infrared distance sensor4VL53L0X Time-of-Flight distance sensor with up to 200 cm range, more details
CORE21Real-time controller based on STM32F407 microcontroller.
DC motor4Xinhe Motor XH-25D, Motor used: RF-370, 6VDC nominal, 5000rpm, no load speed at the output shaft: 165 rpm, stall torque: 2.9 kg*cm, stall current: 2.2A, gear ratio: ~34 (exact ratio is 30613/900), encoder: magnetic, 48ppr, 12 poles
IMU sensor1Powerful 9-Axis Accel/Gyro/Magnetometer sensor with MPU-9250, more details or Intelligent 9-axis absolute orientation sensor BNO055, more details
RGBD camera1Orbbec Astra with RGB image size 640x480 and depth image size 640x480.
Batteries3Li-Ion 18650 protected, rechargeable batteries, 3500mAh capacity, 3.7V nominal voltage. Note: Device may be shipped interchangeably with similar batteries.
Antenna1Connected directly to the ASUS Tinker Board Wi-Fi module. Uses an RP-SMA(m) <-> I-PEX MHF4 cable to connect the antenna with SBC.
SBC1ASUS Tinker Board with 2 GB RAM, Rockchip RK 3288 with 4x 1.80 GHz as CPU and a ARM Mali-T764 MP2 as a GPU and 32 GB MicroSD. The SBC runs on Ubuntu-based OS, customized to use ROS.
LIDAR1RpLidar A2, 360 degree and up to 8m range, more details

Block diagram

Graphic representation of ROSbot 2.0 (PRO) components and connections between them.

Block diagram

Rear panel description

Rear panel description

Antenna connector1Wi-Fi antenna RP-SMA socket. Required for Wi-Fi connectivity.
USB2USB 2.0 host ports from SBC.
HDMI1HDMI output from SBC.
Power switch1Turns ROSbot completely ON or OFF.
LEDs6LR1(blue), LR2(yellow), L1(red), L2(green), L3(green), PWR(red), more details here.
Reset button1Button used for reset CORE2.
hBtn2hBtn1, hBtn2 - programmable buttons.
Outputs for servo6Servo output with PWM, more details here.
USB serial1USB serial port used for debugging the firmware on CORE2-ROS controller.
Charging connector16-pin connector for charging internal Li-Ion batteries.
DC power input1DC for working with external 12V power supply. Use the power supply included with charger or any 12V, min. 5A power supply with 5.5/2.5mm plug (center-positive).
Time-of-Flight distance sensor2VL53L0X Time-of-Flight distance sensor with up to 200 cm range, more details here.
hExt112xGPIO, 7x ADC, SPI, I2C, UART, more details here.
hSens14 xGPIO, ADC, UART, more details here.
hCfg1The button no longer has any functionality.

Power supply

ROSbot is powered from an internal, rechargeable Li-Ion battery pack that contains 3 Li-Ion cells, connected in series. This type of connection is called “3S”. The schematic below explains how the cells are wired together and with the charging connector (on ROSbot side).

Power supply ROSbot

The BAT+ and BAT- are the power connections and the “bal Bxx” wires are used to monitor the voltage on each cell. It is strongly recommended to keep equal voltages on each cell during the charging process. The charger included with ROSbot can charge batteries in the described way and, thanks to that, the long life of the battery set is possible.

The nominal voltage of each cell is 3.7V but the useful range is 3.2V to 4.2V.

Important - discharge indicator If only the right firmware is preloaded to the internal controller (CORE2), the LED1 is programmed to indicate the power status:

  • the LED1 is on when the robot is turned on
  • the LED1 is blinking when battery is low – please charge immediately!

Please make sure that the user firmware always contains the function that monitors the supply voltage level. Deep discharging of batteries may decrease their lifecycle. Discharging to the voltage lower than 3.0V/cell can also trigger the over discharge protection. If the voltage is too low, turn ROSbot off and charge batteries as soon as possible.

Charging ROSbot

ROSbot charger

The ROSbot kit contains the Redox Beta charger. It is an universal charger, suitable for charging NiCd, NiMH, Li-Po, Li-Fe, Li-Ion and Pb (AGM, VRLA) batteries. ROSbot shall be charged using an included charger and cable.

Charger kit includes:

  • Redox Beta charger
  • AC/DC power adapter 100...240V to 12V 5A with 5.5/2.5mm plug on the 12V side
  • a cable to connect charger with ROSbot charging port

Quick charging guide:

  1. Connect the power adapter to the charger and the output cable between charger and ROSbot (2 connectors on charger side, 1 black connector to ROSbot charging port).
  2. Use red and blue buttons to select “LiPo BATT” mode and press [Start].
  3. Use arrows to select “LiPo CHARGE” mode.
  4. Press [Start] - the current value should start blinking. Use arrows to set the current to 1.5A.
  5. Press [Start] again - the voltage value should start blinking. Select “11.1V(3S)” using arrows. The picture below shows the desired result.
  6. Press and hold [Start] for 2 seconds. The charger should now ask for confirmation. Press [Start] again. The charging process should begin now.
  7. When the charging will be finished (after about 3 hours), the charger will generate a loud “beep” sound and will finish charging at the same time.

Charge config

If you need more information about charging, please read the Charging manual for ROSbot in PDF format.


  • You can change charging current to maximum 3A. Please note that a regular charging with the maximum current can shorten the battery life.
  • If you are going to use ROSbot stationary for a long time, you can use ROSbot with charger or power supply connected all the time. Please see the Charging manual for ROSbot for details.
  • In case you need to replace batteries, use only 18650 Li-Ion batteries, with the capacity in a range of 1800...3500mAh and with a protection circuit! Using unprotected batteries may result in serious injuries or fire.
  • Unplug charging connectors carefully. You shall not unplug the charger connectors holding the wires. The balancer connection on ROSbot side has a latching tab (see photo below) that must be pressed before unplugging. On the charger side there is no latching tab but you should also unplug this connector holding the white plug.

Latched connector


Software for ROSbot can be divided into 2 parts:

  • A low-level firmware that works on the real-time controller (CORE2). It can be developed using Visual Studio Code IDE.
  • OS based on Ubuntu 18.04 or 20.04, which runs on the SBC (ASUS Tinker Board or UpBoard) and contains all components needed to start working with ROS or ROS2 immediately. The microSD card or MMC memory with OS is included with each ROSbot. The OS has been modified to make the file system insensitive to sudden power cuts.


Below are topics and services available in ROSbot:

TopicMessage typeDirectionNode            Description        
/mpu9250rosbot_ekf/Imupublisher/serial_nodeRaw IMU data in custom message type
/range/flsensor_msgs/Rangepublisher/serial_nodeFront left range sensor raw data
/range/frsensor_msgs/Rangepublisher/serial_nodeFront right range sensor raw data
/range/rlsensor_msgs/Rangepublisher/serial_nodeRear left range sensor raw data
/range/rrsensor_msgs/Rangepublisher/serial_nodeRear right range sensor raw data
/joint_statessensor_msgs/JointStatepublisher/serial_nodeWheels rotation angle
/batterysensor_msgs/BatteryStatepublisher/serial_nodeBattery voltage
/buttonsstd_msgs/UInt8publisher/serial_nodeUser buttons state, details in User buttons section
/posegeometry_msgs/PoseStampedpublisher/serial_nodePosition based on encoders
/odom/wheelnav_msgs/Odometrypublisher/msgs_conversionOdometry based on wheel encoders
/velocitygeometry_msgs/Twistpublisher/serial_nodeOdometry based on encoders
/imusensor_msgs/Imupublisher/msgs_conversionIMU data wrapped in standard ROS message type
/odomnav_msgs/Odometrypublisher/rosbot_ekfOdometry based on sensor fusion
/tftf2_msgs/TFMessagepublisher/rosbot_ekfROSbot position based on sensor fusion
/set_posegeometry_msgs/ PoseWithCovarianceStampedsubscriber/rosbot_ekfAllow to set custom state of EKF
/cmd_velgeometry_msgs/Twistsubscriber/serial_nodeVelocity commands
/configrosbot_ekf/Configurationservice server/serial_nodeAllow to control behaviour of CORE2 board, detaild in CORE2 config section

User buttons

User button message is published only once when button is pushed. In case when both buttons are presse at the same time, two messages will be pubilshed. Possible values are:

  • 1 - button 1 pressed
  • 2 - button 2 pressed

CORE2 config

Config message definition rosbot_ekf/Configuration:

string command
string data
uint8 SUCCESS=0
uint8 FAILURE=1
string data
uint8 result

Available commands:

SLED - Set LED state, data structure is LED_NUMBER LED_STATE, where:

LED_NUMBER is number of LED, could be 1, 2 or 3

LED_STATE is desired LED state, could be 0 to set LED off and 1 to set LED on

For example, to set LED 2 on run:

$ rosservice call /config "command: 'SLED'
>data: '2 1'"

CSER - Configure servo, available parameters:

S - servo output [1:6], required with P and W parameters

V - voltage mdoe:

  • 0 - about 5V
  • 1 - about 6V
  • 2 - about 7.4V
  • 3 - about 8.6V

E - enable servo output [1,0]

P - set period in μs

W - set duty cycle in μs

CPID - Configure PID, available parameters:

kp - proportional gain (default: 0.8)

ki - integral gain (default: 0.2)

kd - derivative gain (default: 0.015)

out_max - upper limir of the PID output, represents pwm duty cycle (default: 0.80, max: 0.80)

out_min - lower limit of the PID output, represents pwm duty cycle when motor spins in opposite direction (default: -0.80, min: -0.80)

a_max - acceleration limit (default: 1.5e-4 m/s2)

speed_max - max motor speed (default: 1.0 m/s, max: 1.25 m/s)

GPID - Get PID configuration

To get PID configuration call with empty data field.

EIMU - Enable/disable IMU, possible values:

'1' - enable

'0' - disable

RIMU - Reset IMU (for Kalman related odometry)

To reset IMU MPU9250 call with empty data field.

EJSM - Enable/disable joint state message publication, possible values

'1' - enable

'0' - disable

RODOM - Reset odometry

To reset odometry call with empty data field.

CALI - Odometry valibration (update coefficients), data structure is: X Y, where

X - diameter_modificator value

Y - tyre_deflation value

EMOT - Enable/disable motors, possible values:

'0' - disconnect motors

'1' - connect motors

SANI - Set WS2812B LEDs animation This functionality is not default for ROSbots. It requires WS2812B LED stripe connected to servo 1 output on ROSbot back panel and rebuilding firmware with custom configuration.

To enable the WS2812B interface open the mbed_app.json file and change the line:

"enable-ws2812b-signalization": 0


"enable-ws2812b-signalization": 1

Possible values:


S <hex color code> - SOLID COLOR

F <hex color code> - FADE IN FADE OUT ANIMATION




By default robot always start with differential drive kinematics available to change by command:

$ rosservice call /config "command 'SKIN'
>data 'DIFF'

To set mecanum kinematics run:

$ rosservice call /config "command 'SKIN'
>data 'MEC'

MEC - mecanum kinematics DIFF - differential drive kinematics

External documentation

System reinstallation

In some cases you will need to restore ROSbot system to its default settings:

  • in case of accidential damage of the system,
  • to update the OS (it can be udpated remotely, but flashing the microSD card can be easier sometimes),
  • to clear all user changes and restore factory settings.

This process will differ depending on ROSbot version that you have.

  1. Extract SD card from ROSbot, by pushing card carefully until it is released back by card holder, thel pull it out. You can find SD card slot on ROSbot right side. SD card side view
  2. Download image for Raspberry Pi/Tinkerboard from here, you can choose ROS Melodic, ROS Noetic.
  3. Extract downloaded image (For this process we recommend using 7zip)
  4. Flash the extracted image onto SD card (For this process we recommend using Etcher but any image writing tool will be good):
  • If you want to replace the included card, remember that you need to use at least 16 GB capacity and 10 speed class micro SD card.
  • Download Etcher and install it.
  • Connect an SD card reader with the SD card inside.
  • Open Etcher and select from your hard drive .img file that you extracted.
  • Select the SD card you wish to write your image to.
  • Review your selections and click 'Flash!' to begin writing data to the SD card.
  1. Insert SD card back to ROSbot
  2. Proceed to Connect ROSbot to your Wi-Fi network section.
  3. Also, it's recommended to flash firmware before working with ROSbot:
cd ~

Connect ROSbot to your Wi-Fi network

At first ROSbot need to be connected to your Wi-Fi network.

Option 1: Using display, mouse and keyboard

ROSbot is basically a computer running Ubuntu, so let's open it like a standard PC computer.

  1. Plug in a display with HDMI, mouse and keyboard into USB port in the rear panel of ROSbot.
  2. Turn on the robot and wait until it boots.
  3. Connect to a Wi-Fi network using Ubuntu GUI
  4. Open Linux terminal and type ifconfig to find your IP address. Save it for later.

Option 2: Using an Ethernet adapter

In the ROSbot 2.0 set there is one USB-Ethernet card.

  1. Turn on the robot and wait until it boots.
  2. Plug in Ethernet adapter (included in set) to USB port in the rear panel.
  3. Plug in one end of the Ethernet cable into your computer and the other one to the adapter.
  4. To connect with ROSbot via ssh, type in your terminal application: ssh husarion@ and password husarion.
  5. Connect to a Wi-Fi network.
  • In the terminal, type nmtui and press Enter. You should see:

  • Go to Active a connection and tap Enter

  • Chose you Wi-Fi network and tap Enter one more time. Enter your password, confirm it and tap Esc to get back to main menu.

  • Use Quit to close nmtui.
  1. Type ifconfig to find your IP address. Save it for later.

Access ROSbot terminal using wireless connection

Connecting over LAN network

While ROSbot is connected to a Wi-Fi network, you can access it by using its IPv4 address by SSH:

user@mylaptop:~$ ...
ssh husarion@ROSBOT_IP

Connecting over the internet (optional)

Instead of using a local IPv4 address you can access the robot by using its hostname - both in LAN and over the Internet. You just need to setup a VPN connection (Husarnet VPN client is pre-installed)

Find the Join Code

To connect your devices to the same Husarnet VPN network you need to use the Join Code associated with that network.

You will find your Join Code in your account at

-> Click on the desired network
-> Add element button
-> Join Code tab

Connecting your ROSbot

husarion@rosbot:~$ ...
sudo systemctl enable husarnet
husarion@rosbot:~$ ...
sudo systemctl start husarnet
husarion@rosbot:~$ ...
sudo husarnet join PASTE_YOUR_JOIN_CODE_HERE rosbot

Connecting your laptop

Install Husarnet VPN client on your laptop:

user@mylaptop:~$ ...
curl | sudo bash
user@mylaptop:~$ ...
sudo systemctl restart husarnet
user@mylaptop:~$ ...
sudo husarnet join PASTE_YOUR_JOIN_CODE_HERE mylaptop

Testing the connection

That's all - now you can use your device hostname instead of IPv4 addr, eg.:

user@mylaptop:~$ ...
ssh husarion@rosbot2r

After that you should see:

ROSbot terminl

To get more information about using Husarnet visit this tutorial

Low level firmware installation

In the heart of each ROSbot there is a CORE2 board equipped with STM32F4 family microcontroller. The board is responsible for real time tasks like controlling motors, calculating PID regulator output or talking to distance sensors. High level computation is handled by SBC (single board computer) - ASUS Tinker Board (in ROSbot 2.0) or UP Board (in ROSbot 2.0 PRO).

In order to use ROSbot you have to flash ROSbot's CORE2 board with low level firmware.

I. Mbed firmware

The firmware running on STM32F4 microcontroller is based on ARM's Mbed frameworks. The firmware is open source and available on GitHub.

SSH to ROSbot over LAN network or VPN to get access to it's Linux terminal.

Navigate to home folder:

cd ~

And run a specially prepared script:


Required ROS packages - rosbot_ekf

In order to use mbed firmware the rosbot_ekf package have to be installed in your ROSbot. The package incorporates a ready to use Extended Kalman Filter that combines both the imu and encoders measurements to better approximate the ROSbot position and orientation. The package also contains custom messages that are required by the new firmware. To install the package please follow the steps below.

To launch rosserial communication and Kalman filter for mbed firmware run:

roslaunch rosbot_ekf all.launch

For PRO version add parameter:

roslaunch rosbot_ekf all.launch rosbot_pro:=true

ROS tutorials

ROS (Robot Operating System) provides libraries and tools to help software developers create robot applications. It provides hardware abstraction, device drivers, libraries, visualizers, message-passing, package management, and more. It's very powerful and functional tool dedicated to design robots. We created the set of ROS tutorials dedicated for this platform to make it easier to familiarize yourself with these frameworks.

All helpful documents and links in one place: