Integrating OpenRMF with Qualcomm Robotics RB5 and TurtleBot3 for Fleet Management
This project seamlessly integrates a robot fleet management system using the OpenRMF middleware framework with the TurtleBot3, presented via a web interface through the ROS bridge server. Highlighting OpenRMF’ S capabilities in robotics platforms, especially with the navigation stack, the project emphasizes practical implementation in a Qualcomm® Robotics RB5 driven TurtleBot3. Notably, users can teleoperate the robots from a web interface, effortlessly directing them to predefined target positions. This highlights the synergy between OpenRMF, Qualcomm Robotics RB5, TurtleBot3, and web-based robotics control in a compact and user-friendly manner.
Objective
This project is motivated by the aspiration to seamlessly integrate a robot fleet management system using the OpenRMF middleware framework with the TurtleBot3. The inspiration lies in highlighting the remarkable capabilities of OpenRMF in the context of robotics platforms, particularly when coupled with the navigation stack. The desired outcome is to practically illustrate the extensive features offered by OpenRMF in a TurtleBot3. Moreover, the project aims to provide users with the ability to teleoperate the robots from a web interface, allowing effortless navigation and precise control of the robots to predefined target positions.
| Equipment | Description |
| Qualcomm Robotics RB5 development kit |
Qualcomm Technologies’ Robotics platform |
| USB A to Micro USB cable USB A to USB Type C cable |
For serial console interface For connecting the USB3.0 Type C port to the board and flashing images |
| Ubuntu 18.04 host | To flash images to Qualcomm Robotics RB5, to run few ROS commands |
| Turtlebot Burger (TurtleBot3) | Off the shelf robot platform from Robotis |
Source Code: GitHub Link for source of Object detection project
Qualcomm Robotics RB5 Development Kit bring up
| Acronyms: | |
| ROS | Robot Operating System |
Introduction:
This project seamlessly integrates a robot fleet management system using the OpenRMF middleware framework with the TurtleBot3, presented via a web interface through the ROS bridge server. Highlighting OpenRMF’ S capabilities in robotics platforms, especially with the navigation stack, the project emphasizes practical implementation in a TurtleBot3. Notably, users can teleoperate the robots from the web interface, effortlessly directing them to predefined target positions. This highlights the synergy between OpenRMF, TurtleBot3, and web-based robotics control in a compact and user-friendly manner.
Prerequisites:
Before you begin, make sure you have all the prerequisites set up on an Ubuntu host machine and on Qualcomm Robotics RB5
On Ubuntu 20.04 host -
- Install Android Platform tools (ADB, Fastboot)
- Install python version 3.8
- Install ROS1 – Noetic
- Install ROS2 – Galactic
- Install Node.js - v14.x or later
- Install npm - v7.X or later
- Install non-ROS prerequisite packages using the command –
sudo apt update && sudo apt install \
git wget qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools \
python3-rosdep \
python3-vcstool \
python3-colcon-common-extensions \
# maven default-jdk
8.Install rosbridge packages
sudo apt install ros-noetic-rosbridge-serverOn Qualcomm Robotics RB5 –
- Flash Qualcomm Robotics RB5 with a firmware image
- Setup Wi-Fi
- Install python 3.6
- Install Docker on RB5
- Install ROS Noetic
- Install dependent ROS packages
$ sudo apt-get install ros-noetic-joy ros-noetic-teleop-twist-joy \ ros-noetic-teleop-twist-keyboard ros-noetic-laser-proc ros-noetic-rgbd-launch ros-noetic-rosserial-arduino \ ros-noetic-rosserial-python ros-noetic-rosserial-client \ros-noetic-rosserial-msgs ros-noetic-amcl ros-noetic-map-server \ ros-noetic-move-base ros-noetic-xacro \ ros-noetic-compressed-image-transport ros-noetic-rqr* ros-noetic-rviz \ ros-noetic-gmapping ros-noetic-navigation ros-noetic-interactive-markers
Make sure the Qualcomm Robotics RB5 is well mounted on the Turtlebot3 and then continue with the next 2 steps -
7. Install turtlebot3 packages
$ sudo apt install ros-noetic-dynamic-sdk
$ sudo apt install ros-noetic-turtlebot3-msgs
$ sudo apt install ros-noetic-turtlebot3
Set up the workspace on Ubuntu Host and Qualcomm Robotics RB5 –
On Ubuntu 20.04 host -
Client in ROS 1
- Start a new ROS 1 workspace, and pull in the necessary repositories,
$ mkdir -p ~/ff_ros1_ws/src
$ cd ~/ff_ros1_ws/src
$ git clone https://github.com/open-rmf/free_fleet -b main
$ git clone https://github.com/eclipse-cyclonedds/cyclonedds -b release/0.7x
2. Install all the dependencies through rosdep
$ cd ~/ff_ros1_ws
$ rosdep install --from-paths src --ignore-src --rosdistro noetic -yr
3. Source ROS 1 and build
$ cd ~/ff_ros1_ws
# Run below command, if sourcing of noetic has not taken care in ~/.bashrc
$ source /opt/ros/noetic/setup.bash
$ colcon build
Client and Server in ROS 2 –
1. Start a new ROS 2 workspace, and pull in the necessary repositories
$ mkdir -p ~/ff_ros2_ws/src
$ cd ~/ff_ros2_ws/src
$ git clone https://github.com/open-rmf/free_fleet -b main
$ git clone https://github.com/open-rmf/rmf_internal_msgs -b main
2. Install all the dependencies through rosdep
$ cd ~/ff_ros2_ws
$ rosdep install --from-paths src --ignore-src --rosdistro galactic -yr
3. Source ROS 2 and build
$ cd ~/ff_ros2_ws
# Run below command, if sourcing of galactic has not taken care in ~/.bashrc
$ source /opt/ros/galactic/setup.bash
$ colcon build
# Optionally use the command below to only build the relevant packages,
# colcon build –packages-up-to \
# free_fleet ff_examples_ros2 free_fleet_server_ros2 free_fleet_client_ros2
Run the Turtlebot3 Fleet server:
Run the commands below to launch a server on the Ubuntu host for a fleet of turtlebot3 robots.
$ source ~/ff_ros2_ws/install/setup.bash
$ ros2 launch ff_examples_ros2
turtlebot3_world_ff_server.launch.xml
At this point, the server should register any clients(turtlebots) running, if any of the client bots below are running. Leave this terminal open, we will observe the logs after the next few steps.
To detect a single turtlebot -
In the host terminal start a new ssh connection with the Qualcomm Robotics RB5 and set the ‘ROS_NAMESPACE’ environment variable
$ ssh root@<RB5_IP>
$ ROS_NAMESPACE=tb3_0 roslaunch turtlebot3_bringup turtlebot3_robot.launch multi_robot_name:="tb3_0" set_lidar_frame_id:="tb3_0/base_scan
After the environment variable is set on the Qualcomm Robotics RB5, switch to the Ubuntu host terminal and launch a single Turtlebot3, with a free fleet client attached to it, by sourcing the ROS 1 workspace and launching the provided example launch file
$ source ~/ff_ros1_ws/install/setup.bash
$ export TURTLEBOT3_MODEL = burger
$ roslaunch ff_examples_ros1 tb3_localization.launch
After launching RViz with the specified command, you can visualize the turtlebot in its real-world environment, enabling real-time monitoring and analysis of its spatial awareness and sensor data.
At this point, go back to the Ubuntu host terminal which has the server running already, it should display that a new robot has been registered.
An alternative method to verify that a new robot is recognized is to monitor the
/fleet_states topic by using the command - $ ros2 topic echo /fleet_states
To detect multiple Turtlebots -
In the Ubuntu host terminal that has the ssh connection with the Qualcomm Robotics RB5 , enter the following commands to set the environment variables for multiple turtlebots.
$ ROS_NAMESPACE=tb3_0 roslaunch turtlebot3_bringup
turtlebot3_robot.launch multi_robot_name:="tb3_0" set_lidar_frame_id:="tb3_0/base_scan
$ ROS_NAMESPACE=tb3_1 roslaunch turtlebot3_bringup
turtlebot3_robot.launch multi_robot_name:="tb3_1" set_lidar_frame_id:="tb3_1/base_scan"
$ ROS_NAMESPACE=tb3_2 roslaunch turtlebot3_bringup
turtlebot3_robot.launch multi_robot_name:="tb3_2" set_lidar_frame_id:="tb3_2/base_scan"
After the environment variables are set on the Qualcomm Robotics RB5, switch to the Ubuntu host terminal and run the commands below-
$ source ~/ff_ros1_ws/install/setup.bash
$ export TURTLEBOT3_MODEL = burger
$ roslaunch ff_examples_ros1 tb3_localization.launch
This example launches three Turtlebots and registers each robot as a client within a fleet controlled by free_fleet
The ubuntu host terminal which has the server running already, displays that multiple new robots have been registered.
Once you are able to visualize the three bots in the Rviz, you can command the turtlebots to navigate to various areas on the map by utilizing the tools and panels within the visualization interface. Choose the navigation goal using 2D Nav Goal, and the selected goal will be displayed on the panel. Finally, click on "Send Nav Goal" to initiate the navigation command.
Setup the Web UI to control the turtlebots using virtual joysticks :
The web application here is built with ReactJS, a widely-used JavaScript framework for front-end development. Through the web interface, users can take control of the robots, observe the navigation map, and track the robots’ position, orientation, and velocity. Additionally, the capability to visualize and monitor a fleet of three robots on the web using ros2djs is also incorporated.
1. In the Ubuntu host terminal, Navigate to project directory & run the commands below
$ cd ~/
$ git clone https://github.com/globaledgesoft/ROS1-OpenRMF-integration-with-Turtlebot3-for-Fleet-management-using-RB5-with-web-visualisation/tree/main
$cd <cloned repo>
$ npm start
This command will launch the development server, and the web application will be accessible at [http://localhost:3000](http://localhost:3000) in your web browser. The web browser has virtual joysticks as below to control the robots, but the robots are currently disconnected.
2. Open another terminal and run the following commands
$ source /opt/ros/noetic/setup.bash
$ roslaunch rosbridge_server rosbridge_websocket.launch
Rosbridge_websocket node has been started & the connection has been established. You should see in the terminal logs that connection to robots is successful.
The web page now shows that the robots are connected.
3. Ensure that the client bot launch file and the Turtlebot3 fleet server launch files are active to facilitate web visualization. If you have already initiated the client and server for multiple robots in the previous steps, you can skip the following commands. If not, run the commands to launch the client and server. Open a new terminal and run the following the commands:
$ source ~/ff_ros2_ws/install/setup.bash
$ ros2 launch ff_examples_ros2 turtlebot3_world_ff_server.launch.xml
Open another terminal and run the following the commands:
$ source ~/ff_ros1_ws/install/setup.bash
$ export TURTLEBOT3_MODEL = burger
$ roslaunch ff_examples_ros1 tb3_localization.launch
4. Refresh the URL "localhost:3000" once. You will be able to observe the three robots on the map along with their respective positions and velocities.
5. You can control the three robots using their respective buttons. Utilize the teleop joysticks to operate the robots and observe the path each robot takes to reach its final goal. Concurrently monitor the changes in both RViz and Gazebo. Please note that specific targets have been provided for the three robots..
Sign up for the Developer Newsletter.
Get software and hardware tool resources to help optimize your development delivered to your inbox weekly.
