π An end-to-end ROS2 autonomous mobile robot for hospital logistics
Medibot is designed to simulate real-world hospital delivery tasks where a robot can autonomously navigate from a pharmacy to patient rooms using modern robotics algorithms.
π₯ Complete Robotics Pipeline: Simulation β SLAM Mapping β Localization β Autonomous Navigation
Gazebo β SLAM β Map β AMCL β Nav2 β Goal Navigation
| Stage | Description |
|---|---|
| π§ Simulation | Robot spawned in Gazebo hospital environment |
| πΊοΈ SLAM | Builds map of unknown environment |
| πΎ Map Saving | Stores occupancy grid |
| π Localization | AMCL estimates robot pose |
| π§ Planning | Nav2 computes optimal path |
| π Execution | Robot navigates autonomously |
- π€ Custom differential drive robot (URDF/Xacro)
- π₯ Hospital simulation environment (Gazebo)
- π§ Autonomous navigation using Nav2
- πΊοΈ SLAM-based mapping (SLAM Toolbox)
- π AMCL-based localization
- π― Goal-based navigation (RViz + CLI)
| Category | Tools |
|---|---|
| Framework | ROS2 Humble |
| Simulation | Gazebo |
| Navigation | Nav2 |
| Mapping | SLAM Toolbox |
| Language | Python |
medibot_ws/
βββ src/
βββ medibot_description/
βββ medibot_gazebo/
βββ medibot_navigation/
βββ aws-robomaker-hospital-world/sudo apt update
sudo apt install \
ros-humble-gazebo-ros-pkgs \
ros-humble-navigation2 \
ros-humble-nav2-bringup \
ros-humble-slam-toolbox
β οΈ Open 5 terminals and run commands in order.
source /opt/ros/humble/setup.bash
source ~/medibot_ws/install/setup.bash
export GAZEBO_MODEL_PATH=~/medibot_ws/src/aws-robomaker-hospital-world/models
ros2 launch medibot_gazebo sim.launch.pysource /opt/ros/humble/setup.bash
source ~/medibot_ws/install/setup.bash
ros2 launch nav2_bringup slam_launch.py use_sim_time:=truesource /opt/ros/humble/setup.bash
rviz2Set:
Fixed Frame β map
Add:
- TF
- LaserScan β
/scan - Map β
/map
source /opt/ros/humble/setup.bash
source ~/medibot_ws/install/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboardControl Keys:
i β forward
k β stop
j β left
l β right
After exploring environment:
ros2 run nav2_map_server map_saver_cli -f ~/medibot_mapStop SLAM first, then run:
source /opt/ros/humble/setup.bash
source ~/medibot_ws/install/setup.bash
ros2 launch nav2_bringup navigation_launch.py \
use_sim_time:=true \
map:=~/medibot_map.yaml- Click 2D Pose Estimate
- Set robot pose
- Click Nav2 Goal
- Select destination
Robot will autonomously navigate to target location.
ros2 topic echo /scanros2 topic echo /odomros2 run tf2_tools view_frames/scan
/odom
/map
/tf
/cmd_velros2 launch nav2_bringup slam_launch.py use_sim_time:=trueSave map:
ros2 run nav2_map_server map_saver_cli -f ~/medibot_mapros2 topic pub --once /goal_pose geometry_msgs/msg/PoseStamped "
header:
frame_id: 'map'
pose:
position:
x: 7.0
y: -7.0
orientation:
w: 1.0"| Task | From | To |
|---|---|---|
| π Pharmacy β Room 1 | (-7, -7) | (7, -7) |
| π Pharmacy β Room 2 | (-7, -7) | (7, 7) |
- Differential drive mobile robot
- 360Β° LiDAR (0.1m β 12m range)
- Max speed: 0.26 m/s
- Angular velocity: 1.0 rad/s
- Global Planner β NavFn
- Local Planner β DWB Controller
- Localization β AMCL
- Recovery β Spin, Backup
- Demonstrates full robotics autonomy pipeline
- Combines perception, localization, and planning
- Real-world hospital automation use-case
- Strong portfolio project for robotics roles
- Camera + YOLO integration π€
- Multi-goal scheduling
- Multi-robot coordination
- Dynamic obstacle handling
- Real robot deployment
Give it a β on GitHub β it helps a lot!
Apache License 2.0
- ROS2 Nav2
- SLAM Toolbox
- Gazebo