ROSbot XL - quick start
ROSbot XL is a versatile indoor mobile robot platform, purpose-built for research, education, and application development. With increased payload capacity, higher max speed, and enhanced carrying ability compared to ROSbot 3, ROSbot XL can be a good base for your custom application. With the flexibility to integrate different sensors and other equipment, ROSbot XL allows users to tailor the platform to their specific project requirements. Alternatively, you can choose from a range of pre-configured packages tailored to specific applications, such as indoor navigation and mobile manipulation.
The robot supports various computing platforms, including Raspberry Pi, Intel NUC, and NVIDIA Jetson Orin Nano, with Ethernet-based communication to its built-in microcontroller running micro-ROS. Open-source ROS 2 drivers and a user-friendly interface make it easy to operate the robot right out of the box, whether through a web-based interface or gamepad control, providing an intuitive experience for both beginners and experts.
- π¦ Get a ROSbot XL
- π Read the full manual
This guide is based on the latest OS:
SBC | OS Image |
---|---|
Intel NUC | ROSbot XL - ROS 2 Jazzy (NUC) |
ROSbot XL - ROS 2 Humble (Jetson) | ROSbot XL - Jetson Humble (2025-07-24) |
ROSbot XL - ROS 2 Jazzy (RPi) | ROSbot XL - AMD64 Jazzy (2025-07-29) |
You can check the OS version using the command:
echo $HUSARION_OS_VERSION
Read more about OS reinstallation.
Preparationβ
Unboxingβ
What's in the box:
- ROSbot XL
- a Wi-Fi 2.4GHz / 5GHz antenna
- a USB-C charger
- an Ethernet cable
- a gamepad
- a set of regular (pneumatic) wheels
- two Allen keys: 2.5mm and 4mm
- a camera stand for mounting external cameras on the ROSbot.
Connect Batteryβ
The robot is shipped with the battery disconnected.
You need to connect the battery before the first use:
- Use a 2.5mm Allen key to unscrew the battery cover located at the bottom of the ROSbot XL.
- Once opened, you will see a 4-pin white connector (plug) and a socket. Insert the plug into the socket.
- Install the battery cover back to its place.
The robot is now ready for the next steps.
Mount External Componentsβ
If you want to mount an external camera, LIDAR, or any other equipment on your ROSbot, first you need to run the cable through the robot's cover. The video below demonstrates how to do that.
Then, attach the equipment to the cover and plug it into the appropriate connector inside the robot.
Additional instructions on how to mount the manipulator can be found at the links below:
Setting upβ
Access the Robot Terminalβ
To perform the initial network configuration, you need to access ROSbot's Linux terminal first. There are two options of doing that:
- Local Access
- Ethernet Access
ROSbot is basically a computer running Ubuntu, so let's open it like a standard PC.
- Plug in a display with HDMI, mouse and keyboard into the USB port on the rear panel of the ROSbot.
- Turn on the robot and wait until it boots.
- Open the terminal with the Ctrl + Alt + T shortcut
The first time you run ROSbot, it takes about 2 minutes for the graphical environment to start. Subsequent launches take up to 1 minute.
In the ROSbot set, there is one USB-Ethernet card.
-
Turn on the robot and wait until it boots.
-
Plug in the Ethernet adapter (included in a set) to a USB port on the rear panel of the ROSbot.
-
Plug one end of the Ethernet cable into your computer and another one to the adapter.
-
To connect to the ROSbot via ssh, type in your terminal application:
user@mylaptop:/home/user$ssh husarion@192.168.77.2
The default password for the user
husarion
is alsohusarion
.
Wi-Fi Setupβ
ROSbot uses netplan instead of a graphical Wi-Fi manager. It allows you to have all physical network interfaces configured from a single text file.
To find available Wi-Fi networks, use the following Linux command:
sudo nmcli dev wifi rescan
nmcli dev wifi
To connect your ROSbot to a Wi-Fi network, edit /etc/netplan/01-network-manager-all.yaml
file, e.g. with nano
:
sudo nano /etc/netplan/01-network-manager-all.yaml
And replace "PLACE_YOUR_WIFI_SSID_HERE"
with your SSID (Wi-Fi network name) and "PLACE_YOUR_WIFI_PASSWORD_HERE"
with your Wi-Fi password:
See the Netplan configuration file
---
network:
version: 2
renderer: NetworkManager
ethernets:
all-eths:
match:
name: eth*
dhcp4: no
dhcp6: no
optional: true
addresses:
- 192.168.77.2/24
all-enps:
match:
name: enP8p1s*
dhcp4: no
dhcp6: no
optional: true
addresses:
- 192.168.77.2/24
wifis:
# ========================================
# standard Wi-Fi config (client)
# ========================================
wlan0:
dhcp4: true
dhcp6: true
optional: true
access-points:
PLACE_YOUR_WIFI_SSID_HERE:
password: PLACE_YOUR_WIFI_PASSWORD_HERE
# ========================================
# access point Wi-Fi config
# replace "channel" with the number permitted in your country
# https://en.wikipedia.org/wiki/List_of_WLAN_channels
# ========================================
# wlan0:
# dhcp4: yes
# addresses:
# - 192.168.78.1/24
# access-points:
# "rosbotap":
# band: "5GHz"
# channel: "149"
# mode: "ap"
# password: "husarion"
then save the file (with Ctrl + O if using nano) and apply the new network setup:
sudo netplan -d apply
You can check to which Wi-Fi network your ROSbot is connected by using this command:
sudo iwgetid
To find your IP address (for the wlan0
network interface) type:
ip -4 addr show wlan0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'
Save this IP address for the next step.
If your Wi-Fi network setup is more complex (eg. if you want to connect to Eduroam based Wi-Fi that is popular in many universities), visit netplan configuration examples and netplan documentation.
Usageβ
Remote Accessβ
- LAN
- Husarnet VPN
While ROSbot is connected to a Wi-Fi network, you can access it by using its IPv4 address by SSH:
ssh husarion@<ROSBOT_IP>
The default root password is husarion
.
Flash Firmwareβ
Access your ROSbot's terminal and run:
~/flash_firmware.sh
Start Driverβ
By default the robot driver is automatically launched during system boot. However, you can manually enable/disable the rosbot daemon.
sudo rosbot.start
# sudo rosbot.stop # to disable
Since the robot is sold in several configurations, it is necessary to manually select and specify the configuration via the driver.configuration
parameter. Available options are: basic
, telepresence
, autonomy
, manipulation
, manipulation-pro
. Changing the configuration affects the robot's URDF and activates the manipulator driver.
Usage example:
snap set rosbot driver.configuration=manipulation
Robot Controlβ
The robot is controlled by sending a cmd_vel
topic with information about the desired speed. This can be done in many ways, including:
- Teleop
- Gamepad
- WebUI
Manual ROSbot driving with teleop_twist_keyboard
.
# For Jazzy
ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -p stamped:=true
# For Humble
```bash title="husarion@rosbotxl:/home/husarion$"
ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -p stamped:=false
After running the command, you will see the usage instruction:
You can launch the teleop node even simpler, directly from the rosbot
snap:
rosbot.teleop
You can control ROSbot without coding by using a Logitech F710 gamepad (not included in the standard set).
To get started:
- Connect the USB dongle to a USB-A port on the ROSbotβs rear panel.
- Set the mode switch on the gamepad to D.
- Hold down the LB button (dead man switch) and use the control sticks to drive the robot.
The web-based user interface is ready to use out-of-the-box. Simply open the following URL in your web browser:
http://<ROSBOT_IP>:8080/ui
- By default,
cmd_vel
messages are checked for a valid timestamp. If the robot's time is not synchronized with the device running the WebUI, messages may be considered outdated. It is recommended to synchronize the time between the robot and the WebUI device. - If you can't see the image from the camera, restart the camera service with:
sudo husarion-depthai.restart
ROS 2 Interfaceβ
The ROS 2 driver is already launched on the system. You can find the available ROS 2 topics with:
ros2 topic list
For more info about topic check ROS 2 API.
Helpful Resourcesβ
Factory Resetβ
The image includes a factory_reset.sh
script, which you can use if your current setup isn't working. This process will reinstall all snaps and reset the parameters to their default configuration.
./factory_reset.sh
Reference Projectsβ
Running ROS natively is fine for relatively small projects. For more complex ones, a full dockerized setup is a better approach.
The reference projects are based fully on Docker - before running them you need to stop the background services running from snaps:
sudo rosbot.stop
sudo husarion-webui.stop
sudo husarion-depthai.stop
sudo husarion-rplidar.stop
Find available projects below:
link | description |
---|---|
rosbot_ros | Main repo contains ROSbot ROS driver. Build it if you want to make significant changes to the project. |
rosbot-telepresence | Stream a live video from camera to a window on your PC. |
rosbot-autonomy | Autonomous mapping & navigation demo for ROSbot. Using navigation2 and slam_toolbox |
ROSbot XL with OpenMANIPULATOR-X | Controlling ROSbot XL over the Internet with a live video feed |
ROS 2 Tutorialsβ
Our ROS 2 tutorials were initially created for ROSbot 2 that had Orbbec Astra camera instead of Luxonis OAK-D like in ROSbot 3. ROS 2 camera topics will have different names
ROS 2 (Robot Operating System 2) provides libraries and tools to help software developers create robotic applications. We've put together a series of ROS 2 Tutorials dedicated for this platform that serve as a practical introduction to ROS 2. You can run them on any of our ROSbots, either on a physical robot or in the simulation environment. These step-by-step guides are tailored to accommodate both beginners embarking on their ROS 2 journey and experienced users looking to deepen their understanding of robot navigation.
Snap Cheatsheetβ
ROSbot operates on Ubuntu 24.04 with ROS 2 Jazzy preinstalled. The ROS 2 drivers for the mobile platform, LIDAR, camera, and web user interface are available as snaps, which can be found in the Snapcraft Store.
Preinstalled snaps:
- rosbot
- husarion-webui
- husarion-depthai
- husarion-rplidar
Start Snapsβ
sudo rosbot.start
sudo husarion-depthai.start
sudo husarion-rplidar.start
sudo husarion-webui.start
Stop Snapsβ
sudo rosbot.stop
sudo husarion-depthai.stop
sudo husarion-rplidar.stop
sudo husarion-webui.stop
Flash Firmwareβ
sudo rosbot.flash
List Snap Paramsβ
sudo snap get rosbot
Manage Envsβ
ROS 2 environment variables in snaps are managed from ros
parameter. You can list all ROS 2 envs used by snaps with this command:
sudo snap get rosbot ros
If you would like to change the ROS_DOMAIN_ID
in the rosbot
snap to 123
just run:
sudo snap set rosbot ros.domain-id=123
Husarion snaps support both rmw_fastdds_cpp
and rmw_cyclonedds_cpp
DDS implementations, including the custom setups. To list all available DDS setups run:
sudo snap set rosbot ros.transport=whatever
Now, if you would like to set the udp-lo
setup, just run:
sudo snap set rosbot ros.transport=udp-lo
To display the DDS setup config file, run:
cat /var/snap/rosbot/common/dds-config-udp-lo.xml
If you would like to create your own setup, create the file /var/snap/rosbot/common/dds-config-mysetup.xml
, paste your own config there, save it, and select with:
sudo snap set rosbot ros.transport=mysetup
If you want to interface your ROS 2 nodes running directly on the host operating system layer, you need to have the same DDS setup as in your snap. You can set all required ROS 2 environment variables on your host OS with the /var/snap/rosbot/common/ros.env
file:
source /var/snap/rosbot/common/ros.env
You can also add source envs from snap, directly from ~/.bashrc
. To modify the ~/.bashrc
file, run the utility script:
/var/snap/rosbot/common/manage_ros_env.sh