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.
If you don't have ROSbot XL yet, you can get it from the online store.
This is a quick start guide. If you need a manual instead, you can find it here
To use the utility scripts (eg. ~/flash_firmware.sh
, ~/ros_driver_start.sh
) make sure you have at least the *-2023-07-18
version of the ROS 2 Humble Husarion OS installed.
If you have the older version, please update it or use commands from the [Docker way] tab.
- Utility script
- Docker way
I have the *-2023-07-18
(or higher) version of the Husarion OS.
I have older version of the Husarion OS than *-2023-07-18
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.
Connecting the 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.
Mounting 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.
Installing the System Image for ROSbot
ROSbot XL comes with 3 SBC options, setup instructions vary slightly between them, so please select your version below.
- Intel NUC/Raspberry Pi
- Nvidia Jetson Nano
- Nvidia Jetson Orin Nano
ROSbot XL comes with a pre-installed ROS Humble OS image. If you have just received your brand new ROSbot XL, you can skip this step.
In some situations, you may need to restore the ROSbot system to its default settings:
- If the system is accidentally damaged,
- To update the OS to the latest version with supported documentation,
- To erase all user changes and revert to factory settings.
For instructions on how to reinstall the operating system, please refer to the OS reinstallation guide.
In case of Nvidia Jetson Nano, it is necessary to install and customize the system image to work with ROSbot XL.
1. Write Image to the microSD Card
First, you will need to install the official Jetson Nano image from Nvidia (based on Ubuntu 18.04). Please follow the instructions from the Nvidia guide.
2. Setup and First Boot
Follow the setup step of the Nvidia guide to fully complete the installation. In system configuration, use husarion
as a username and rosbotxl
as a computer name (it is required by robot configs setup).
3. Internet connection
The nmcli
tool will be used only temporarily to install dependencies and it will be replaced by netplan, so the later step Connecting ROSbot XL to your Wi-Fi network
will still be necessary.
Now please connect your Jetson to the Internet using Wi-Fi. You can use the GUI or the nmcli
tool (nmcli device wifi connect PLACE_YOUR_WIFI_SSID_HERE password PLACE_YOUR_WIFI_PASSWORD_HERE
).
SSH is already installed, from now on you can switch to a remote connection.
4. Netplan installation
Install netplan and other useful utilities:
sudo apt update
sudo apt install -y netplan.io wireless-tools net-tools unison rfkill network-manager nano
5. Robot configs installation
Next install robot configs using:
git clone https://github.com/husarion/robot-configs
sudo ./robot-configs/install.sh
rm -rf robot-configs
sudo setup_robot_configuration rosbot_xl ros2_humble
6. Docker installation Use the following commands to install Docker Engine:
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo groupadd docker
sudo usermod -aG docker $USER
Now install Docker compose v2.16.0:
sudo mkdir -p /usr/local/lib/docker/cli-plugins
sudo curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-aarch64 -o /usr/local/lib/docker/cli-plugins/docker-compose
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
7. Creating symlinks
To create symlinks first open the file:
sudo vim /etc/udev/rules.d/10-local.rules
copy and paste the following lines:
ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015", SYMLINK+="ttyUSBDB"
ACTION=="add", ATTRS{idVendor}=="10c4", SYMLINK+="ttyRPLIDAR"
then save and quit (:wq
).
8. Husarnet installation
Use the following command to install Husarnet:
curl -s https://install.husarnet.com/install.sh | sudo bash
Now reboot to make sure that all changes were applied.
In case of Nvidia Jetson Orin Nano, it is necessary to install and customize the system image to work with ROSbot XL.
1. Write Image to the microSD Card
First, you will need to install the official Jetson Orin Nano image from Nvidia (based on Ubuntu 20.04). Please follow the instructions from the Nvidia guide and flash the JetPack SDK 5.1.1. Flashing the right version of JetPack SDK is very important.
2. Setup and First Boot
Follow the setup step of the Nvidia guide to fully complete the installation. In system configuration, use husarion
as a username and rosbotxl
as a computer name (it is required by robot configs setup).
3. Internet connection
The nmcli
tool will be used only temporarily to install dependencies and it will be replaced by netplan, so the later step Connecting ROSbot XL to your Wi-Fi network
will still be necessary.
Now please connect your Jetson Orin Nano to the Internet using Wi-Fi. You can use the GUI or the nmcli
tool:
# Rescan wifi networks
sudo nmcli device wifi rescan
# Then
sudo nmcli device wifi connect PLACE_YOUR_WIFI_SSID_HERE password PLACE_YOUR_WIFI_PASSWORD_HERE
SSH is already installed, from now on you can switch to a remote connection.
4. Netplan installation
Install netplan and other useful utilities:
sudo apt update
sudo apt install -y netplan.io wireless-tools net-tools unison rfkill network-manager nano
5. Robot configs installation
Next install robot configs using:
git clone https://github.com/husarion/robot-configs
sudo ./robot-configs/install.sh
rm -rf robot-configs
sudo setup_robot_configuration rosbot_xl ros2_humble
6. Docker installation Use the following commands to install Docker Engine:
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo groupadd docker
sudo usermod -aG docker $USER
7. Creating symlinks
To create symlinks first open the file:
sudo vim /etc/udev/rules.d/10-local.rules
copy and paste the following lines:
ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015", SYMLINK+="ttyUSBDB"
ACTION=="add", ATTRS{idVendor}=="10c4", SYMLINK+="ttyRPLIDAR"
then save and quit (:wq
).
8. Husarnet installation
Use the following command to install Husarnet:
curl -s https://install.husarnet.com/install.sh | sudo bash
**9. ROS 2 Foxy installation **
To install ROS 2 Foxy natively follow the Ubuntu (Debian) ROS 2 Foxy installation guide. It is not necessary to install Desktop Install (Recommended)
. The ROS-Base Install (Bare Bones)
will be enough.
Additionally install teleop_twist_keyboard
:
sudo apt install ros-foxy-teleop-twist-keyboard
After the installation make sure that the file ~/.bashrc
contains source /opt/ros/foxy/setup.bash
if not:
echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
Now reboot to make sure that all changes were applied.
Accessing ROSbot's Linux terminal
To perform the initial network configuration, you need to access ROSbot's Linux terminal. There are two options:
Option 1: Using display, mouse and keyboard
To use this option, you will need an external monitor, USB and HDMI cables, mouse and keyboard.
- Intel NUC/Raspberry Pi
- Nvidia Jetson Nano
- Nvidia Jetson Orin Nano
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 ROSbot.
- Turn on the robot and wait until it boots.
- Open the Application Launcher (Husarion Logo in the top-left corner) > System Tools > Terminator app.
ROSbot's graphical desktop environment requires about 2 minutes to start during the first boot. Subsequent boots require only about 1 minute after power on.
Just like in the installation step, you can connect to your Jetson using the display:
- Plug in a display with HDMI, mouse and keyboard into the USB port on the rear panel of ROSbot.
- Turn on the robot and wait until it boots.
- Use
Ctrl+Alt+T
to open the terminal.
Just like in the installation step, you can connect to your Jetson using the display:
- Plug in a display with HDMI, mouse and keyboard into the USB port on the rear panel of ROSbot.
- Turn on the robot and wait until it boots.
- Use
Ctrl+Alt+T
to open the terminal.
Option 2: Using an Ethernet port
- Turn on the robot and wait until it boots.
- Plug one end of the Ethernet cable into your computer and the other end into the robot's Ethernet port.
If you don't have at least the *-2023-07-18
version of the ROS 2 Humble Husarion OS installed, first complete this step.
Set a static IP address on your computer for its Ethernet card in a 192.168.77.0/24
subnet, eg:
- IPv4:
192.168.77.27
- mask:
255.255.255.0
-
To connect to the ROSbot via SSH, type in your terminal:
user@mylaptop:/home/user$ssh husarion@192.168.77.2
The default password for the user
husarion
is alsohusarion
.
Connecting ROSbot XL to your Wi-Fi network
ROSbot XL 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 modify lines 22-23 by replacing "PLACE_YOUR_WIFI_SSID_HERE"
with your SSID (Wi-Fi network name) and "PLACE_YOUR_WIFI_PASSWORD_HERE"
with your Wi-Fi password:
- Intel NUC/Raspberry Pi
- Nvidia Jetson Nano
- Jetson Orin Nano
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
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"
See the Netplan configuration file
network:
version: 2
renderer: NetworkManager
ethernets:
eth0:
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"
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
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.
Remote access
OPTION 1: in a LAN network
While ROSbot is connected to a Wi-Fi network, you can access it by using its IPv4 address by SSH:
ssh husarion@ROSBOT_IP
OPTION 2: over the Internet (VPN)
If LAN access is not enough you can access the ROSbot over the Internet using Husarnet. You can find the full guide on how to do it here.
Launching the ROS driver
At this stage, your ROSbot should be up and running, with a remote (LAN or VPN) connection from your laptop.
Now let's start the ROS Driver that brings up the rosbot_xl_ros package and the Micro-ROS Agent (for interfacing with the firmware running on the STM32 Microcontroller).
You will find a ROS 2 API for the ROSbot XL here.
Flashing the firmware
Access your ROSbot's terminal and run:
- Utility script
- Docker way
~/flash_firmware.sh
docker compose pull
To flash the right firmware, open ROSbot's terminal and execute the following command:
docker stop rosbot-xl microros || true && \
docker run --rm -it --privileged \
--mount type=bind,source=/dev/ttyUSBDB,target=/dev/ttyUSBDB \
husarion/rosbot-xl:humble-0.8.2-20230913 \
flash-firmware.py -p /dev/ttyUSBDB
Starting the Driver
To launch basic ROSbot XL ROS 2 nodes, paste the following command in the ROSbot's terminal:
- Utility script
- Docker way
~/ros_driver_start.sh
docker compose up -d
To ensure that ROS topics are visible, restart the currently running ROS daemon:
ros2 daemon stop
At this point, ROS nodes from the containers are available at the level of the host operating system.
Check available ROS topics:
ros2 topic list
If you don't have ROS 2 Humble natively installed on your OS (e.g. if you're using Nvidia Jetson Nano), access the rosbot-xl
container:
docker exec -it rosbot-xl bash
Now you can run the following command to check the topics:
ros2 topic list
Manual ROSbot driving with teleop_twist_keyboard
- Intel NUC/Raspberry Pi
- Nvidia Jetson Nano
- Nvidia Jetson Orin Nano
Launch a teleop_twist_keyboard
ROS node for manual ROSbot control:
ros2 run teleop_twist_keyboard teleop_twist_keyboard
If you followed the previous step, you should already have a shell in the container. If not, run:
docker exec -it rosbot-xl bash
Launch a teleop_twist_keyboard
ROS node for manual ROSbot control:
ros2 run teleop_twist_keyboard teleop_twist_keyboard
Launch a teleop_twist_keyboard
ROS node for manual ROSbot control:
ros2 run teleop_twist_keyboard teleop_twist_keyboard
After running the command, you will see the usage instruction:
Reference projects
Now you know how to run core ROSbot XL ROS nodes.
Running ROS natively is fine for relatively small projects. For more complex ones, a full dockerized setup is a better approach.
If you're planning to try the next demos, make sure to stop the basic setup first by running the following command:
- Utility script
- Docker way
~/ros_driver_stop.sh
docker compose down
Find available projects below:
- Intel NUC
- Raspberry Pi
- Nvidia Jetson Nano
- Nvidia Jetson Orin Nano
link | description |
---|---|
rosbot-xl-gamepad | Control the robot manually using a Logitech F710 gamepad |
rosbot-xl-autonomy | Autonomous mapping & navigation demo for ROSbot XL. Using navigation2 and slam_toolbox |
rosbot-xl-manipulation | Using ROSbot XL with OpenMANIPULATOR-X. Read more about this project in the dedicated tutorial (including Gazebo simulation) |
rosbot-xl-telepresence | Controlling ROSbot XL over the Internet with a live video feed |
link | description |
---|---|
rosbot-xl-gamepad | Control the robot manually using a Logitech F710 gamepad |
rosbot-xl-mapping | Create a map of the unknown environment using slam_toolbox with ROSbot controlled in LAN or over the Internet |
rosbot-xl-navigation | Autonomous navigation (using navigation2) on a map created with the rosbot-xl-mapping demo linked above. |
link | description |
---|---|
rosbot-xl-mapping | Create a map of the unknown environment using slam_toolbox with ROSbot controlled in LAN or over the Internet |
rosbot-xl-navigation | Autonomous navigation (using navigation2) on a map created with the rosbot-xl-mapping demo linked above. |
link | description |
---|---|
rosbot-xl-gamepad | Control the robot manually using a Logitech F710 gamepad |
rosbot-xl-autonomy | Autonomous mapping & navigation demo for ROSbot XL. Using navigation2 and slam_toolbox |
Here is an example of a map generated with the rosbot-xl-mapping project, which can be used in the rosbot-xl-navigation.
ROS 2 Tutorials
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.