A comprehensive ROS2-based autonomous mobile robot system combining real-time hardware control, multi-sensor fusion, computer vision, and a modern web-based monitoring dashboard.
ESIBOT is an autonomous mobile robot system developed at ESI (École Supérieure d'Informatique). The platform integrates:
- Real-time Hardware Control: Direct serial communication with robot motors and actuators
- Multi-Sensor Fusion: IMU (MPU-6050), Ultrasonic Radar (360°), and encoder odometry
- Camera Integration: Raspberry Pi camera stream processing with OpenCV
- Navigation & Localization: TF2-based coordinate frame management and odometry calculation
- Modern Dashboard: React-based web UI for real-time robot monitoring and control
- ROS2 Ecosystem: Built on ROS2 Humble for reliability and modularity
The full technical report and presentation poster are available in docs/:
- ESIBOT Project Report — architecture, implementation, and results
- ESIBOT Poster
┌─────────────────────────────────────────────────────────┐
│ Web Dashboard (React) │
│ (Real-time monitoring & control) │
└──────────────────────┬──────────────────────────────────┘
│
┌──────────────┼──────────────┐
│ │ │
┌────▼─────┐ ┌────▼────┐ ┌─────▼──────┐
│ROS Bridge│ │ROS Nodes│ │Launch Files│
│(WebSock) │ │(Python) │ │ │
└────┬─────┘ └────┬────┘ └─────┬──────┘
│ │ │
┌────▼─────────────▼──────────────▼────┐
│ ROS2 Middleware (DDS) │
└────┬─────────────┬──────────────┬────┘
│ │ │
┌────▼──┐ ┌──────▼──────┐ ┌───▼────┐
│Sensors│ │Hardware Ctrl│ │Camera │
│ │ │ │ │ │
├──────┤ ├─────────────┤ ├────────┤
│IMU │ │Motor Driver │ │RPi Cam │
│Radar │ │Serial Link │ │OpenCV │
│Encode│ │GPIO │ │Stream │
└──────┘ └─────────────┘ └────────┘
esibot_ws/src/
├── esibot_bringup/
│ ├── esibot_driver.py # Main hardware interface & odometry
│ ├── launch/
│ │ └── esibot_driver.launch.py
│ └── Publishes: /odom, /tf, /battery
│
├── esibot_camera/
│ ├── esircam_node.py # Raspberry Pi camera stream bridge
│ ├── launch/
│ │ └── esibot_camera.launch.py
│ ├── config/
│ │ └── camera_params.yaml
│ └── Publishes: /camera/image_raw, /camera/compressed
│
├── esibot_sensor/
│ ├── mpu_node.py # MPU-6050 IMU (Accel + Gyro)
│ ├── encoder_node.py # Wheel encoder odometry
│ ├── radar_node.py # 360° Ultrasonic radar
│ ├── radar_node_360.py # Multi-sensor radar variant
│ ├── mpu_odom.py # IMU-based odometry fusion
│ ├── launch/
│ │ └── radar.launch.py # Integrated sensor launch with RViz
│ ├── config/
│ │ ├── esibot_sensor.yaml
│ │ ├── radar_params.yaml
│ │ ├── config.rviz
│ │ └── radar.rviz
│ └── Publishes: /imu, /radar, /odom
│
├── esibot_description/
│ ├── urdf/
│ │ └── esibot.urdf.xacro # Robot kinematic model
│ ├── launch/
│ │ └── rsp.launch.py # Robot state publisher
│ └── Publishes: /tf, /joint_states
│
├── esibot_ui/
│ └── dashboard_node.py # Backend dashboard service (WIP)
│
└── esibot_vision/
└── vision_node.py # Computer vision pipeline (WIP)
| Component | Specification | Purpose |
|---|---|---|
| Main Controller | Raspberry Pi 4 Model B (4/8GB) | Main computing unit running ROS 2 (Ubuntu 22.04) |
| Motor Driver | L298N | Controls direction and speed of the DC motors |
| Drive Motors | DC Motor (×2) | Wheel drive |
| Caster Wheel | Passive caster wheel | Chassis support and balance |
| Servo Motor | MG946R (positional) | Controls rotation of the ultrasonic sensor array |
| Sensors | MPU-6050 | 6-axis IMU — linear acceleration and angular velocity |
| Sensors | Ultrasonic Distance Sensor V2 (×4) | Measures distance to obstacles (pseudo-LiDAR array) |
| Sensors | Optical Encoders (×2) | Measures wheel rotation for odometry |
| Camera | Raspberry Pi Camera Module V2 | Live video stream for vision and monitoring |
| Power Source | 3.7V battery cells (×6) | 2 sets of 3 cells in series, sets in parallel → 12V |
| Voltage Regulation | DC-DC Buck Converter, 12V → 5/6V (×2) | One rail powers the servo, one powers the Pi/encoders/ultrasonics |
| Voltage Regulation | Capacitor, 4700μF/25V | Stabilizes voltage and reduces noise |
| Serial Link | USB/UART | Hardware communication |
- OS: Ubuntu 22.04+ (ROS2 Humble compatible)
- ROS2: Humble distribution
- Python: 3.10+
- Node.js: 18+ (for dashboard)
# https://docs.ros.org/en/humble/Installation.html
sudo apt update
sudo apt upgrade
# [Follow official ROS2 Humble installation guide]sudo apt install -y \
build-essential \
cmake \
git \
colcon \
python3-dev \
python3-pipsudo apt install -y \
python3-serial \
python3-pip \
rviz2 \
ros-humble-tf2-ros
pip3 install \
opencv-python \
numpy \
requests \
mpu6050-raspberrypi \
RPi.GPIOcd dashboard/esibot-ui
npm installgit clone <repository-url> ~/esibot_project
cd ~/esibot_project# Add to ~/.bashrc or ~/.zshrc
export ROS_DOMAIN_ID=10
export ROS_DISTRO=humble
# Source ROS setup
source /opt/ros/humble/setup.bashcd esibot_ws
source /opt/ros/humble/setup.bashcd esibot_ws
export ROS_DOMAIN_ID=10
colcon build
source install/setup.bash# Example: Build only bringup package
colcon build --packages-select esibot_bringup
# Build with verbose output
colcon build --packages-select esibot_sensor --verboserm -rf build install log
colcon buildcd ~/esibot_project/esibot_ws
source /opt/ros/humble/setup.bash
export ROS_DOMAIN_ID=10
source install/setup.bashros2 launch esibot_bringup esibot_driver.launch.py# With RViz (recommended for development)
ros2 launch esibot_sensor radar.launch.py
# Headless (without RViz)
ros2 launch esibot_sensor radar.launch.py use_rviz:=falseros2 launch esibot_camera esibot_camera.launch.pyros2 launch esibot_description rsp.launch.pycd dashboard/esibot-ui
npm run dev -- --host
# Dashboard available at http://localhost:5173- Frontend Framework: React 19+
- Build Tool: Vite
- Styling: TailwindCSS
- ROS Integration: ROSlib (WebSocket bridge)
- Authentication: Supabase Email/Password + Google OAuth
- Visualization: ROS2D, EaselJS
- Routing: React Router v7
ESIBOT was developed by a team of Computer Science students (Computer Systems track) at the École Nationale Supérieure d'Informatique (ESI):
BADAOUI Ikram · SAIDI Selma · HIMEUR Idris · DIAR Adem · CHATTAH Salsabila · MARMOUZE Nor Elhouda · BERKAT Cheraz