ROSbot is an autonomous robot platform based on Husarion CORE2-ROS robot controller available in two version: 2.0 and 2.0 PRO.
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. Both version integrates:
- 4-wheels mobile platform containing DC motors with encoders and an aluminum frame
- Orbbec Astra RGBD camera
- MPU 9250 inertial sensor (accelerometer + gyro)
- rear panel providing interfaces for additional modules
In ROSbot 2.0:
- CORE2-ROS controller with Asus Tinker Board with Rockchip RK3288 up to 1,8GHz, 2GB DDR3 RAM and 16 GB MicroSD.
- RPLIDAR A2 laser scanner
In ROSbot 2.0 PRO:
- CORE2-ROS controller with UpBoard UP with Intel® ATOM™ x5-Z8350 Processors 64 bits up to 1.92GHz, 4GB DDR3L RAM and 32GB eMMC.
- RPLIDAR A3 laser scanner
If you do not own ROSbot yet, you can purchase it here.
You can also test the performance of ROSbot using our simulation model in Gazebo environment. It is available here, at our GitHub page.
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
|Dimensions with camera and LiDAR||200 x 235 x 220mm / 7.87 x 9.25 x 8.66in [L x W x H]|
|Dimensions without LiDAR||200 x 235 x 146mm / 7.87 x 9.25 x 5.74in [L x W x H]|
|Dimensions without camera and LiDAR||200 x 235 x 106mm / 7.87 x 9.25 x 4.17in [L x W x H]|
|Weight||2,84kg / 100oz (with camera and LiDAR), 2,45kg / 86oz (without camera and LiDAR)|
|Wheel diameter / Clearance / Wheelbase||85mm / 22mm / 105mm|
|Chassis material||Powder-coated aluminum plate, 1.5mm thick|
|Maximum translational velocity||1.25 m/s|
|Maximum rotational velocity||420 deg/s (7.33 rad/s)|
|Maximum load capacity||10kg / 352oz|
|Battery life||1.5h - 5h|
|Infrared distance sensor||4||VL53L0X Time-of-Flight distance sensor with up to 200 cm range, more details.|
|CORE2||1||Real-time controller based on STM32F407 microcontroller.|
|DC motor||4||Xinhe 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 sensor||1||Powerful 9-Axis Accel/Gyro/Magnetometer sensor with MPU-9250, more details.|
|RGBD camera||1||Orbbec Astra with RGB image size 640x480 and depth image size 640x480.|
|Batteries||3||Li-Ion 18650 protected, rechargeable batteries, 3500mAh capacity, 3.7V nominal voltage
Note: Device may be shipped interchangeably with similar batteries.
|Antenna||1||Connected directly to the ASUS Tinker Board Wi-Fi module. Uses an RP-SMA(m) <-> I-PEX MHF4 cable to connect the antenna with SBC.|
In ROSbot 2.0:
|SBC||1||ASUS 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. The SBC runs on Ubuntu-based OS, customized to use ROS.|
|LIDAR||1||RpLidar A2, 360 degree and up to 8m range, more details.|
In ROSbot 2.0 PRO:
|SBC||1||UpBoard with 4 GB RAM, Quad-Core Intel Atom Z8350 1,92 GHz as CPU, a Intel® HD 400 Graphics as a GPU and 32GB eMMC. The SBC runs on Ubuntu-based OS, customized to use ROS.|
|LIDAR||1||RpLidar A3, 360 degree and up to 25m range, more details.|
Rear panel description
|Antenna connector||1||Wi-Fi antenna RP-SMA socket. Required for Wi-Fi connectivity.|
|USB||2||USB 2.0 host ports from SBC.|
|HDMI||1||HDMI output from SBC.|
|Power switch||1||Turns ROSbot completely ON or OFF.|
|LEDs||6||LR1(yellow), LR2(blue), L1(red), L2(green), L3(green), PWR(red), more details here.|
|reset button||1||Button used for reset CORE2.|
|hCfg button||1||Button used for connecting ROSbot to [Husarion Cloud](https://cloud.husarion.com/).|
|hBtn||2||hBtn1, hBtn2 - programmable buttons.|
|Outputs for servo||6||Servo output with PWM, more details here.|
|USB serial||1||USB serial port used for debugging the firmware on CORE2-ROS controller.|
|Charging connector||1||6-pin connector for charging internal Li-Ion batteries.|
|DC power input||1||DC 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 sensor||2||VL53L0X Time-of-Flight distance sensor with up to 200 cm range, more details here..|
|hExt||1||12xGPIO, 7x ADC, SPI, I2C, UART, more details here.|
|hSens||1||4 xGPIO, ADC, UART, more details here.|
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).
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.
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:
- 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).
- Use red and blue buttons to select “LiPo BATT” mode and press [Start].
- Use arrows to select “LiPo CHARGE” mode.
- Press [Start] - the current value should start blinking. Use arrows to set the current to 1.5A.
- Press [Start] again - the voltage value should start blinking. Select “11.1V(3S)” using arrows. The picture below shows the desired result.
- Press and hold [Start] for 2 seconds. The charger should now ask for confirmation. Press [Start] again. The charging process should begin now.
- 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.
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 connected (and charging) all the time. It will increase the batteries lifetime. Align the charging current to keep the voltage at about 11.1V-12V.
- 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.
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 16.04, which runs on the SBC (ASUS Tinker Board or UpBoard) and contains all components needed to start working with ROS immediately. The microSD card 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:
|publisher||Raw IMU data in custom message type|
|publisher||Front left range sensor raw data|
|publisher||Front right range sensor raw data|
|publisher||Rear left range sensor raw data|
|publisher||Rear right range sensor raw data|
|publisher||Wheels rotation angle|
|publisher||User buttons state, details in User buttons section|
|publisher||Position based on encoders|
|publisher||Odometry based on wheel encoders|
|publisher||Odometry based on encoders|
|publisher||IMU data wrapped in standard ROS message type|
|publisher||Odometry based on sensor fusion|
|publisher||ROSbot position based on sensor fusion|
|subscriber||Allow to set custom state of EKF|
|service server||Allow to control behaviour of CORE2 board, detaild in CORE2 config section|
Orbbec Astra camera API is documented in driver repository
Slamtec RpLidar scanner API is documented in driver repository
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
Config message definition
string command string data --- uint8 SUCCESS=0 uint8 FAILURE=1 uint8 COMMAND_NOT_FOUND=2 string data uint8 result
SLED - Set LED state, data structure is
LED_NUMBER LED_STATE, where:
LED_NUMBERis number of LED, could be
LED_STATEis desired LED state, could be
0to set LED off and
1to set LED on
EIMU - Enable/disable IMU, possible values:
RIMU - Reset IMU (for Kalman related odometry)
To reset IMU MPU9250 call with empty
EJSM - Enable/disable joint state message publication, possible values
RODOM - Reset odometry
To reset odometry call with empty
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:
S <hex color code>- SOLID COLOR
F <hex color code>- FADE IN FADE OUT ANIMATION
B <hex color code>- BLINK FRONT/REAR ANIMATION
R- RAINBOW ANIMATION
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.
- 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.
- Download image for Raspberry Pi/Tinkerboard from here (there is a single image for both platforms).
- Extract downloaded image (For this process we recommend using 7zip)
- 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.
- Insert SD card back to ROSbot
- Proceed to Connect ROSbot to your Wi-Fi network section.
ROSbot 2.0 PRO
Before you begin, you will need:
- USB drive (at least 8GB)
- Mouse, keyboard and USB hub
- Display with HDMI cable
- Download Ubuntu installation image from section Downloads on our webside.
- Flash Ubuntu on USB drive (For this process we recommend using Etcher but any image writing tool will be good):
- Download Etcher and install it.
- Plug in USB drive into your computer.
- Open Etcher and select from your hard drive .iso file that you downloaded.
- Select the USB drive you wish to write your image to.
- Review your selections and click 'Flash!' to begin writing data to the USB drive.
- Plug keyboard and mouse through USB hub to one of the USB-A ports on ROSbot rear panel.
- Connect monitor to HDMI port on ROSbot rear panel.
- Plug in USB drive into second USB-A port on ROSbot rear panel.
- Press "Esc" during booting.
- You will see blue window with "Enter Password", press "Enter".
- Click "Right arrow" to enter Boot card and change Boot Option Priorities for your USB drive.
- Save & Exit.
- After Restart chose option Install Ubuntu (remember to choose option with erasing new Ubuntu and remove all part of the old one).
- Proceed to Connect ROSbot to your Wi-Fi network section.
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.
- Plug in a display with HDMI, mouse and keyboard into USB port in the rear panel of ROSbot.
- Turn on the robot and wait until it boots.
- Connect to a Wi-Fi network using Ubuntu GUI
- Open Linux terminal and type
ifconfigto find your IP address. Save it for later.
Option 2: Using Ethernet adapter
In the ROSbot 2.0 set there is one USB-Ethernet card.
- Turn on the robot and wait until it boots.
- Plug in Ethernet adapter (included in set) to USB port in the rear panel
- Plug in one end of the Ethernet cable into your computer and other one to the adapter
- To connect with ROSbot via ssh, type in your terminal application:
ssh firstname.lastname@example.org password
- Connect to a Wi-Fi network
- in the terminal type
nmcli c add type wifi save yes autoconnect yes con-name rosbot20wifi ifname wlan0 ssid <WiFi-SSID>and press Enter
nmcli c modify rosbot20wifi wifi-sec.key-mgmt wpa-psk wifi-sec.psk <WiFi-PASSWORD>and press Enter to obtain an IP address and connect to the Wi-Fi network
ifconfigto find your IP address. Save it for later.
Access ROSbot terminal using wireless connection
Connecting over LAN network
The most convenient way to work with ROSbot on daily basis is to do that over Wi-Fi. Connect your laptop to the same Wi-Fi network as ROSbot and type in the terminal:
ssh husarion@<ROSBOT_IP> where <ROSBOT_IP> is the IP address obtained in the previous steps.
FOR WINDOWS USERS:
If you are Windows user you might like to connect to your ROSbot by using the Remote Desktop Connection:
r then type
You will see a window appear:
Type in your device IP address and click connect.
You will see the ROSbot desktop, from the top menu, choose the
Connecting over the internet (optional)
Not always your laptop and ROSbot can be in the same LAN network. To overcome that obstacle use VPN. Husarnet is a recommended VPN for ROSbots. It's preinstalled on ROSbot so you need to install that on you laptop.
To connect your laptop and ROSbot over VPN:
- In the Linux terminal on your laptop (Ubuntu OS is recommended) to install Husarnet type:
curl https://install.husarnet.com/install.sh | sudo bashto install Husarnet. If the process is done type
sudo systemctl restart husarnet
- In the Linux terminal of your laptop and in the Linux terminal of your ROSbot to configure network type:
sudo husarnet websetupand open the link that will appear in a web browser. The link should look like that:
https://app.husarnet.com/husarnet/fc94xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxand add your devices to the same network. You will need to do that step both for ROSbot and for your laptop.
At this point your laptop and ROSbot should be in the same VPN network. To access your ROSbot from a level of your laptop over the internet just type in the terminal:
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. There are two firmware options for you to choose from.
I. Mbed firmware (recommended)
WARNING: When mbed firmware is uploaded to internal STM32F4 microcontroller, https://cloud.husarion.com is no available for your ROSbot.
This firmware version is based on ARM's Mbed OS system. If you're interested in learning more about using Mbed OS check our tutorial Using CORE2 with Mbed OS. We recommend you also to look at the ROSbot's Mbed firmware GitHub page.
SSH to ROSbot over LAN network or VPN to get access to it's Linux terminal.
We will use
stm32loader tool to upload the firmware to ROSbot. To check if you have this tool already installed on your robot, open the terminal and run:
sudo stm32loader --help
If you get
command not found you will need to finish all the steps below. Otherwise, you just need to complete step one.
husarion-shield services and reboot your ROSbot. These services are responsible for connection to the Husarion Cloud and they also control GPIO pins that are used for uploading the firmware. We will need direct access to them. Run:
sudo systemctl disable husarnet-configurator sudo systemctl stop husarnet-configurator sudo systemctl disable husarion-shield sudo reboot
2. Install necessary support libraries on your robot. In the terminal run:
cd ~/ && git clone https://github.com/TinkerBoard/gpio_lib_python.git cd ~/gpio_lib_python && sudo python setup.py install --record files.txt
ROSbot 2.0 PRO:
cd ~/ && git clone https://github.com/vsergeev/python-periphery.git cd ~/python-periphery && git checkout v1.1.2 sudo python setup.py install --record files.txt
Restart the terminal after the installation.
stm32loader on your robot:
cd ~/ && git clone https://github.com/husarion/stm32loader.git cd ~/stm32loader && sudo python setup.py install --record files.txt
You can check if tool works by running following commands:
sudo stm32loader -c tinker -f F4
ROSbot 2.0 PRO:
sudo stm32loader -c upboard -f F4
Programming the firmware (using stm32loader)
We prepared for you
.bin files ready to be uploaded to your ROSbot. They have following settings:
ws2812b driver is enabled by default (check ROSbot with WS2812B LEDs signalization)
rosserial baudrate is set to:
500000for ROSbot 2.0
460800for ROSbot 2.0 Pro
Download the appropriate firmware to your ROSbot and save it in
Before uploading the firmware using
stm32loader make sure you have the
husarnet-configurator service disabled.
The following steps remove the software bootloader used by Husarion Cloud. You can flash it again in any moment in case you want to return to hFramework firmware.
To upload the firmware run:
sudo stm32loader -c tinker -u -W
sudo stm32loader -c tinker -e -w -v rosbot-2.0-***.bin
sudo stm32loader -c upboard -u -W
sudo stm32loader -c upboard -e -w -v rosbot-2.0-***.bin
Wait until firmware is uploaded.
Required ROS packages -
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.
Create new work space and change directory:
mkdir ~/ros_workspace mkdir ~/ros_workspace/src cd ~/ros_workspace/src
Clone rosbot_ekf repository:
git clone https://github.com/husarion/rosbot_ekf.git
Install dependencies required by rosbot_ekf package:
sudo apt-get install ros-kinetic-robot-localization
Change directory and build code using catkin_make:
cd ~/ros_workspace catkin_make
To set it up permanently, open .bashrc file in text editor:
Go to the end of file and add line:
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
II. Husarion Cloud + hFramework firmware (deprecated)
hFramework is a framework used to create the previous version of ROSbot low-level firmware. It is not recommended to be used. Instead of hFramework based firmware please consider using mbed based ROSbot firmware mentioned. However that instruction is preserved for backward compatibility.
At first you have to connect ROSbot to Husarion cloud. There are two ways to do that: over the terminal and using hConfig app.
a. Using Linux terminal
- open https://cloud.husarion.com in your web browser
- click Add new button
- enter device name and click Next
- copy a code under a QR code (it looks like:
- open Linux terminal execude a command (including code from the previous step)
sudo husarion-register --code "prod|xxxxxxxxxxxxxxxxxxxxxx", and then
sudo systemctl restart husarnet-configurator
- after a few seconds you should see your device online at https://cloud.husarion.com
b. Using hConfig app (only for ROSbot 2.0) That's a deprecated option, so previously mentioned instructions are preferred.
- Press and hold the hCfg button on ROSbots rear panel.
- Turn on the power switch.
- When blue and yellow LEDs starts blinking, release the hCfg button.
- Connect your mobile device to Husarion Wi-Fi and open hConfig app (hConfig in App Store or hConfig in Google Play) to connect ROSbot to the Wi-Fi network and your user account at cloud.husarion.com (how to do this).
If your ROSbot is connected to Husarion cloud do the following steps:
- Turn on your ROSbot.
- At https://cloud.husarion.com click "edit" next to your device name and select "IDE".
- Create a new project using CORE2 as your board and "ROSbot default firmware" as a template.
- Build and upload program to the device (use button with a cloud in left-up corner).
- Go back to main panel of https://cloud.husarion.com
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.
Configuring ROSbot to work with 5GHz WiFi.
By default ROSbot supports WiFi in 2.4GHz band, this is sufficent for most cases. If you encounter problems with data transfers e.g. due to processing large amounts of data or noise from other networks you can try to use connection in 5GHz band.
To do this, you will need a USB 5GHz WiFi card (any device based on RTL8811AU or RTL8812AU should be fine,we have tested it with TP-Link Archer T4U and D-Link DWA-172).
ROSbot 2.0 is supporting the adapters by default, if you have recent image version you can skip update and kernel instal, otherwise do:
sudo apt-get update sudo apt-get install tinkerboard-kernel modprobe rtl8812au
For ROSbot 2.0 PRO some modifications are required:
sudo apt install linux-headers-generic-hwe-16.04-upboard git clone https://github.com/abperiasamy/rtl8812AU_8821AU_linux.git cd rtl8812AU_8821AU_linux/ make sudo make install sudo modprobe -a rtl8812au sudo cp -R . /usr/src/rtl8812AU_8821AU_linux-1.0 sudo dkms add -m rtl8812AU_8821AU_linux -v 1.0 sudo dkms build -m rtl8812AU_8821AU_linux -v 1.0 sudo dkms install -m rtl8812AU_8821AU_linux -v 1.0
For Remote Desktop or keyboard and display, you can use desktop GUI tools to setup connection.
For SSH method type
ifconfig to list network interfaces, you should see now new interface named
Now, list all available newtworks:
sudo iwlist wlan1 scanning | grep ESSID
Connect to selected WiFi with:
nmcli c add type wifi save yes autoconnect yes con-name <NetworkSSID> ifname wlan1 ssid <NetworkSSID> nmcli c modify <NetworkSSID> wifi-sec.key-mgmt wpa-psk wifi-sec.psk <Password>
Remember to replace
<Password> with name and passowrd of chosen network.
ROSbot will try to connect to this network each time it boots.
Docs and links
All helpful documents and links in one place:
- ROSbot Safety Instructions - important!
- ROSbot limited warranty terms and conditions - important!
- Charging manual for ROSbot
- ROSbot drawing
- ROS tutorials for ROSbot
- ROSbot on ROS webpage
- ROSbot on ROS Wiki
- URDF model of ROSbot - for Gazebo integrated with ROS
- ROSbot project on hackaday.io
- ROSbot project on instructables.com