Skip to main content

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.


Helpful links
OS version

This guide is based on the latest OS:

SBCOS Image
Intel NUCROSbot 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.

rosbot_xl

Connect Battery​

caution

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:

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

  1. Plug in a display with HDMI, mouse and keyboard into the USB port on the rear panel of the ROSbot.
  2. Turn on the robot and wait until it boots.
  3. Open the terminal with the Ctrl + Alt + T shortcut
Boot time

The first time you run ROSbot, it takes about 2 minutes for the graphical environment to start. Subsequent launches take up to 1 minute.

Wi-Fi Setup​

Netplan

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:

husarion@rosbotxl:/home/husarion$
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:

husarion@rosbotxl:/home/husarion$
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
/etc/netplan/01-network-manager-all.yaml
---
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:

husarion@rosbotxl:/home/husarion$
sudo netplan -d apply

You can check to which Wi-Fi network your ROSbot is connected by using this command:

husarion@rosbotxl:/home/husarion$
sudo iwgetid

To find your IP address (for the wlan0 network interface) type:

husarion@rosbotxl:/home/husarion$
ip -4 addr show wlan0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'

ROSbot IP address

Save this IP address for the next step.

Complex Wi-Fi setups

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​

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

user@mylaptop:/home/user$
ssh husarion@<ROSBOT_IP>

The default root password is husarion.

Flash Firmware​

Access your ROSbot's terminal and run:

husarion@rosbotxl:/home/husarion$
~/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.

husarion@rosbotxl:/home/husarion$
sudo rosbot.start
# sudo rosbot.stop # to disable
Change configuration

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:

Manual ROSbot driving with teleop_twist_keyboard.

husarion@rosbotxl:/home/husarion$
# 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:

ROSbot teleop

tip

You can launch the teleop node even simpler, directly from the rosbot snap:

husarion@rosbotxl:/home/husarion$
rosbot.teleop

ROS 2 Interface​

The ROS 2 driver is already launched on the system. You can find the available ROS 2 topics with:

husarion@rosbotxl:/home/husarion$
ros2 topic list

For more info about topic check ROS 2 API.

ROS2 topic list

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.

warning

The reference projects are based fully on Docker - before running them you need to stop the background services running from snaps:

husarion@rosbotxl:/home/husarion$
sudo rosbot.stop
sudo husarion-webui.stop
sudo husarion-depthai.stop
sudo husarion-rplidar.stop

Find available projects below:

linkdescription
rosbot_rosMain repo contains ROSbot ROS driver. Build it if you want to make significant changes to the project.
rosbot-telepresenceStream a live video from camera to a window on your PC.
rosbot-autonomyAutonomous mapping & navigation demo for ROSbot. Using navigation2 and slam_toolbox
ROSbot XL with OpenMANIPULATOR-XControlling ROSbot XL over the Internet with a live video feed

ROS 2 Tutorials​

warning

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:

Start Snaps​

husarion@rosbotxl:/home/husarion$
sudo rosbot.start
sudo husarion-depthai.start
sudo husarion-rplidar.start
sudo husarion-webui.start

Stop Snaps​

husarion@rosbotxl:/home/husarion$
sudo rosbot.stop
sudo husarion-depthai.stop
sudo husarion-rplidar.stop
sudo husarion-webui.stop

Flash Firmware​

husarion@rosbotxl:/home/husarion$
sudo rosbot.flash

List Snap Params​

husarion@rosbotxl:/home/husarion$
sudo snap get rosbot

ROSbot ROS 2 envs

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:

husarion@rosbotxl:/home/husarion$
sudo snap get rosbot ros

ROSbot ROS 2 envs

If you would like to change the ROS_DOMAIN_ID in the rosbot snap to 123 just run:

husarion@rosbotxl:/home/husarion$
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:

husarion@rosbotxl:/home/husarion$
sudo snap set rosbot ros.transport=whatever

ROSbot available DDS setups

Now, if you would like to set the udp-lo setup, just run:

husarion@rosbotxl:/home/husarion$
sudo snap set rosbot ros.transport=udp-lo

To display the DDS setup config file, run:

husarion@rosbotxl:/home/husarion$
cat /var/snap/rosbot/common/dds-config-udp-lo.xml

ROSbot udp-lo dds setup

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:

husarion@rosbotxl:/home/husarion$
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:

husarion@rosbotxl:/home/husarion$
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:

husarion@rosbotxl:/home/husarion$
/var/snap/rosbot/common/manage_ros_env.sh