The Butlerbot project aims to develop a robotic butler designed to operate in a café environment. The robot will autonomously deliver food from the kitchen to customers at their tables, optimizing efficiency and reducing the need for human staff during busy hours.
-
When an order is received with the table number, the robot should move from its home position to the kitchen and move to the table for the food delivery. After completion of that task the robot should return to the home position. (No confirmation is required either from the kitchen or customer table. Getting input from the table or kitchen is your choice.). [view demonstration video]
-
When an order is received with the table number, the robot should move from home to start its task. If no one attends the robot, it will wait for Confirmation (either in kitchen or table), the robot should return home after timeout. [view demonstration video]
-
When an order is received with the table number, the robot should move from home to start its task. We need to handle the following scenario.
- It will reach the kitchen for the food and if no confirmation is given to the robot it should move to the home position after timeout. [view demonstration video]
- If the food is received from the kitchen, it reaches the table. No one is giving confirmation to the robot from the table, then the robot will move to the kitchen first before going to the home position. [view demonstration video]
-
When an order is received with the table number, the robot should move from home to start its task. If a task is canceled while going to the table, the robot returns to the kitchen and then to home and if canceled while going to the kitchen, the robot will return to home. [view demonstration video]
-
When multiple orders are received with the table numbers, the robot should move from home position to kitchen to collect the orders and move to multiple tables for the food delivery. After completion of that task (delivery of all the tables) the robot should return to the home position. [view demonstration video for senario 5]
-
When multiple orders are received with the table numbers (let us assume table1, table2, table3), the robot should move from home position to kitchen to collect the orders and move to multiple tables for the food delivery. When no one confirms in table1 the robot should move to the next tables (table2, table3) for delivery. After finishing the delivery of the final table, the robot goes to the kitchen before going to the home position.[view demonstration video for senario 6]
-
When multiple orders are received with the table numbers (let us assume table1, table2, table3), the robot should move from home position to kitchen to collect the orders and move to multiple tables for the food delivery. The order of the particular table (table2) is canceled, the robot should skip that table (table2) and deliver to the other tables (table1, table3). After finishing the delivery of the final table, the robot goes to the kitchen before going to the home position. [view demonstration video for senario 7]
This project uses a Dockerized VSCode devcontainer environment for development, based on the devcontainer_for_ros template. This setup ensures a consistent development environment across different systems and simplifies the setup process.
You can also choose to develop using a normal ROS host machine with ROS 2 Humble installed if you prefer. However, the Dockerized environment provides additional convenience and consistency for development across various platforms.
- use vscode tasks shortcut
Ctrl+Shift+B
and choose:Install Dependencies
- use vscode tasks shortcut
Ctrl+Shift+B
and choose:Build RelWithDebInfo
- source the workspace (it is a alias for sourcing the default workspace in this setup)
sourcews
- Create a workspace directory with src in it.
mkdir -p butlerbot_ws/src
- Clone this repo into src
cd butlerbot_ws
git clone https://github.com/manojm-dev/butlerbot.git src
- Install Dependencies
rosdep install --from-path src --ignore-src -y
- Building
colon build --symlink-install
- Launch the gazebo simulation
ros2 launch butlerbot_rmf_gazebo simulation.launch.py
- Launch the navigation stack
ros2 launch butlerbot_navigation navigation.launch.py
- Launch the food delivery system action server
ros2 run butlerbot_tasks task.py
- Run the action client to order the food
ros2 run butlerbot_tasks give_goal.py table_<table_number> # <table_numbler> = 1 or 2 or 3
# example
ros2 run butlerbot_tasks give_goal.py table2
Steps to run this
- Launch the gazebo simulation environment
ros2 launch butlerbot_rmf_gazebo simulation.launch.py
- Launch the slam process
- You can choose to use async or sync method by setting
sync:=
true or flase - You have to modes in
slam_toolbox
eithermapping
orlocalization
, you can change between them here by settinglocalization:=
true or false.
ros2 launch butlerbot_localization slam_online_sync.launch.py sync:=true localization:=false
Steps to run this
- Launch the gazebo simulation environment
ros2 launch butlerbot_rmf_gazebo simulation.launch.py
- Launch the slam process
- You can choose to use async or sync method by setting
sync:=
true or flase - You have to modes in
slam_toolbox
eithermapping
orlocalization
, you can change between them here by settinglocalization:=
true or false.
ros2 launch butlerbot_localization slam_online_sync.launch.py sync:=true localization:=true