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.
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 and choose:
Install Dependencies
- use vscode tasks shortcut and choose:
Build RelWithDebInfo
- create a workspace
mkdir -p butlerbot_ws/src
- Clone this repo in src
cd butlerbot_ws
git clone https://github.com/manojm-dev/butlerbot.git src
- Install Dependencies
rosdep install --from-path src --ignore-src
- Building
colon build --sysmlink-install
- Download gazebo models
git clone https://github.com/osrf/gazebo_models.git /home/$USERNAME/.gazebo/models
-
Sourcing the workspace
a) In normal ros installation
cd workspace source install/setup.bash
b) In above devcontianer installtion
- type
sourcews
in terminal for sourcing the workspace or close the terminal and open a new terminal(sourced in .bashrc)
- type
1) Complete Launch Setup #TODO
The project is organized into several ROS2 packages, each handling different aspects of the robot's functionality:
- butlerbot_description: Contains the robot's URDF/XACRO files and launch files, enabling visualization and simulation of Butlerbot in various environments.
- butlerbot_gazebo: Includes configurations and launch files for simulating Butlerbot in the Gazebo environment, allowing for realistic physics and sensor simulation.
- butlerbot_localization: Manages the robot's localization using SLAM or other localization techniques, ensuring accurate positioning within the café environment.
- butlerbot_navigation: Implements the ROS2 Navigation stack (Nav2) for path planning, obstacle avoidance, and autonomous movement of Butlerbot throughout the café.
The butlerbot_description package provides the URDF/XACRO files and launch configurations for visualizing Butlerbot robot. It includes files to manage robot state publishing, visualization in RViz, and other related tools.
-
display.launch.py: Launches the robot state publisher, joint state publisher, joint state publisher GUI, RViz, and Rqt. The default parameters are :
use_sim_time:=true
,use_jsp:=true
,jsp_gui:=false
,urdf_model:=defalt_location
,use_rviz:=true
anduse_rqt:=false
. -
rsp.launch.py: Launches the robot state publisher node with configuration parameters. The default parameters are:
urdf_model:=default_location
,use_sim_time:=true
and future scope parametersuse_gazebo:=true
,use_gzsim:=false
. -
visualize.launch.py: Launches RViz and Rqt visualization tools with configurable parameters. The default parameters are:
use_sim_time:=true
,use_rviz:=true
anduse_rqt:=false
The butlerbot_gazebo package is responsible for simulating the Butlerbot robot in a Gazebo environment. It includes the necessary configurations to launch the robot within a simulated cafe environment.
- gazebo.launch.py: Launches the Gazebo simulator with the cafe environment and spawns the Butlerbot robot at its home position
The butlerbot_localization package is responsible for managing the robot's localization using techniques such as SLAM (Simultaneous Localization and Mapping) and EKF (Extended Kalman Filter). This package ensures accurate positioning of Butlerbot within the café environment, enabling it to navigate and perform tasks reliably.
-
ekf.yaml: Configuration for the EKF node, which fuses sensor data to estimate the robot's pose in the environment.
-
localization.yaml: General localization parameters for Butlerbot.
-
mapper_params_online_async.yaml: Configuration parameters for the asynchronous SLAM algorithm
-
mapper_params_online_sync.yaml: Configuration parameters for the synchronous SLAM algorithm.
-
ekf.launch.py**: Launches the EKF node using the parameters defined in ekf.yaml.
-
slam_online_async.launch.py****: Launches the asynchronous SLAM algorithm using parameters from mapper_params_online_async.yaml.
-
slam_online_sync.launch.py: Launches the synchronous SLAM algorithm using parameters from mapper_params_online_sync.yaml.
-
amcl.launch.py: Launches the Adaptive Monte Carlo Localization (AMCL) node for probabilistic localization of Butlerbot within a known map.
The butlerbot_navigation package implements the Navigation2 stack for Butlerbot, providing capabilities such as path planning, obstacle avoidance, and autonomous movement within the café environment. This package is critical for enabling Butlerbot to navigate from its starting position to specific locations like tables and back to the home position.
- **nav2_params.yaml: Configuration file for the Navigation2 stack, defining parameters for the planner, controller, recovery behaviors, and other navigation components.
- navigation.launch.py: Launches the Navigation2 stack using the parameters defined in nav2_params.yaml.