# MU5EBB12



# E-WheelChAIr

**Smart Embedded System for Electric Wheelchairs**

**For all files see the github link : [https://github.com/RenaudFookIng/E-WheelChAIr](https://github.com/RenaudFookIng/E-WheelChAIr)**

[![License](https://camo.githubusercontent.com/a549a7a30bacba7bfceebdc207a8e86c3f2c02995a2527640dca30048fd2b64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d417061636865253230322e302d626c75652e737667)](https://github.com/RenaudFookIng/E-WheelChAIr/blob/main/LICENSE) [![ROS2](https://camo.githubusercontent.com/72324aa3f13e92b070a6d56ee6ad1884549a163eb6c1c3f52f1883a436a2a0ab/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f524f53322d4a617a7a792d3232333134453f6c6f676f3d726f73)](https://docs.ros.org/en/jazzy/)

---

## Origin of the project :

\- Occupational therapist and Medical Doctor couldn’t prescribe a Power Wheelchair if the user driving it could injure themselves or others.  
\- In consequence, the user with massive motor impairment and cognitive or visual impairment don’t have power wheelchair and they depend of the other to move in their home and the city.

## Description

E-WheelChAIr is an open-source project designed to enhance autonomy and accessibility for electric wheelchairs. It integrates:

- A **ROS2-based architecture** for real-time control and sensor fusion.
- **3D-printed mechanical parts** (sensor mounts, joystick adapters).
- **Modular design** for easy customization and collaboration with partners like Sorbonne University.

---

## 📸 Visual Overview

### Wheelchair Views


<div align="center" dir="auto" id="bkmrk--3">[![Front View](https://github.com/RenaudFookIng/E-WheelChAIr/raw/main/front_view.jpeg)](https://github.com/RenaudFookIng/E-WheelChAIr/blob/main/front_view.jpeg) [![Right View](https://github.com/RenaudFookIng/E-WheelChAIr/raw/main/right_view.jpeg)](https://github.com/RenaudFookIng/E-WheelChAIr/blob/main/right_view.jpeg) [![Rear View](https://github.com/RenaudFookIng/E-WheelChAIr/raw/main/rear_view.jpeg)](https://github.com/RenaudFookIng/E-WheelChAIr/blob/main/rear_view.jpeg) [![Left View](https://github.com/RenaudFookIng/E-WheelChAIr/raw/main/left_view.jpeg)](https://github.com/RenaudFookIng/E-WheelChAIr/blob/main/left_view.jpeg)</div>---

## Project Structure

**Note:** All ROS launch files are centralized in the `e_wheelchair_launch` package for easier management.

```
E-WheelChAIr/
├── hardware
│   ├── 3d_models
│   │   ├── BackRest_Fixation/
│   │   │   ├── Fixation_BackRest.iges
│   │   │   ├── Fixation_backrest_part1.stl
│   │   │   └── Fixation_backrest_part2.stl
│   │   ├── Camera_Module/
│   │   │   ├── Camera_module.iges
│   │   │   ├── Fixation_camera.stl
│   │   │   ├── Fixation_camera_up.stl
│   │   │   └── Support_camera.stl
│   │   ├── ServoControl_Joystick/
│   │   │   ├── BasePart.stl
│   │   │   ├── FourchetteAxeX.stl
│   │   │   ├── FourchetteAxeY.stl
│   │   │   ├── Servo_controller_Joystick.iges
│   │   │   ├── Support_servo_joystick.stl
│   │   │   └── Visuel_Joystick_servomoteur_support.png
│   │   └── Ultrasonic_Module/
│   │
│   ├── arduino/
│   │   ├── ewheelchair_controller/
│   │   │   ├── ewheelchair_controller.ino
│   │   │   └── lecture_arduino.py
│   │   ├── ARDUINO_GUIDE.md
│   │   ├── FILES_SUMMARY.md
│   │   ├── README.md
│   │   └── test_arduino.py
│   │
│   └── Image_processing/
│       ├── cmd.txt
│       ├── ROS.txt
│       ├── vision_config_gpu.py
│       ├── vision_config_mac.py
│       ├── vision_system_gpu.py
│       ├── vision_system_mac.py
│       ├── yolo11n.pt
│       └── yolov8n.pt
│
├── resources
│   ├── docs
│   └── utils
|
├── src
|   ├── arduino_bridge/
|   │   ├── arduino_bridge
|   │   │   ├── __init__.py
|   │   │   └── arduino_bridge_node.py
|   │   ├── resource
|   │   │   └── arduino_bridge
|   │   ├── test
|   │   │   ├── test_copyright.py
|   │   │   ├── test_flake8.py
|   │   │   └── test_pep257.py
|   │   ├── package.xml
|   │   ├── setup.cfg
|   │   └── setup.py
|   ├── custom_msgs/
|   │   ├── msg/
|   │   │   ├── EmergencyData.msg
|   │   │   ├── Joystick.msg
|   │   │   ├── ObstacleDetection.msg
|   │   │   ├── ServoCommand.msg
|   │   │   ├── UltrasonicArray.msg
|   │   │   ├── VisionObstacle.msg
|   │   │   └── WyesIntent.msg
|   │   ├── CMakeLists.txt
|   │   ├── package.xml
|   │   └── setup.py
|   ├── e_wheelchair_launch/
|   │   ├── e_wheelchair_launch
|   │   │   ├── __init__.py
|   │   │   └── launch/
|   │   ├── resource/
|   │   │   └── e_wheelchair_launch
|   │   ├── package.xml
|   │   ├── setup.cfg
|   │   └── setup.py
|   ├── master_node/
|   │   ├── config/
|   │   │   ├── master_config.yaml
|   │   │   └── servo_config.yaml
|   │   ├── master_node/
|   │   │   ├── __init__.py
|   │   │   ├── master_node.py
|   │   │   └── master_node_bis.py
|   │   ├── package.xml
|   │   ├── setup.cfg
|   │   └── setup.py
|   ├── pc_vision_bridge/
|   │   ├── pc_vision_bridge
|   │   │   ├── __init__.py
|   │   │   └── pc_vision_bridge_node.py
|   │   ├── resource
|   │   │   └── pc_vision_bridge
|   │   ├── test
|   │   │   ├── test_copyright.py
|   │   │   ├── test_flake8.py
|   │   │   └── test_pep257.py
|   │   ├── package.xml
|   │   ├── setup.cfg
|   │   └── setup.py
|   └── wyes_teleop/
|       ├── resource
|       │   └── wyes_teleop
|       ├── test
|       │   ├── test_copyright.py
|       │   ├── test_flake8.py
|       │   └── test_pep257.py
|       ├── wyes_teleop
|       │   ├── __init__.py
|       │   └── wyes_teleop_node.py
|       ├── package.xml
|       ├── setup.cfg
|       └── setup.py
|
├── .gitignore
├── CABLAGE_SCHEMA.md
├── E-WheelChAIr.mp4
├── LICENSE
├── parametrage_raspberry_hotspot.txt
├── README.md
├── TESTING_GUIDE.md
└── yolov8n.pt

```

---

## Prerequisites

### Hardware

- Electric wheelchair with servo-controlled joystick (using Miuzei MZ996 servos).
- Sensors: Intel Realsense (depth camera), HC-SR04 (ultrasonic), Arduino (I/O interface).
- Joystick or alternative control input device.

### Software

- ROS2 Jazzy.
- colcon (build tool for ROS2).
- OnShape (for 3D modeling).
- Git LFS (for versioning large 3D files).
- Python 3.9+ with pyserial and pyyaml packages.

---

## Installation and Setup On your computer

### 1. Clone the Repository

```
git clone https://github.com/RenaudFookIng/E-WheelChAIr.git
cd E-WheelChAIr
```

### 2. Build the ROS Workspace

```
colcon build --symlink-install
source install/setup.bash
```

### 3. Launch the System

```
ros2 launch e_wheelchair_launch ewheelchair_all.launch.py
```

## Installation and Setup On your Raspberry PI

### 1. Cloner le dépôt en mode "sparse-checkout"

```
git clone --filter=blob:none --no-checkout https://github.com/RenaudFookIng/E-WheelChAIr.git
cd E-WheelChAIr
```

### 2. Active le mode sparse-checkout et exclut le dossier 'hardware'

```
git sparse-checkout init --cone
git sparse-checkout set --no-cone /* !/hardware/
```

### 3. Extrait les fichiers (sauf 'hardware')

```
git checkout main
```

## Build the ROS Workspace

```
colcon build --symlink-install
source install/setup.bash
```

---

## ROS Launch Files Centralization

All ROS launch files have been centralized in the `e_wheelchair_launch` package to provide:

- **Simplified Management**: Single location for all launch configurations
- **Easier Maintenance**: No duplication across packages
- **Consistent Structure**: Uniform approach to system launching
- **Better Organization**: Clear separation between nodes and launch configurations

### Available Launch Files

<table id="bkmrk-launch-file-descript"><thead><tr><th>Launch File</th><th>Description</th><th>Components Launched</th></tr></thead><tbody><tr><td>`ewheelchair_all.launch.py`</td><td>Complete system with all sensors and processing</td><td>6 nodes</td></tr><tr><td>`ewheelchair_joystick_servo.launch.py`</td><td>Control servo with joystick and Ultrasonic sensor</td><td>2 node</td></tr><tr><td>`ewheelchair_arduino_vision.launch.py`</td><td>Control servo with joystick and Ultrasonic sensor and Wide-angle camera processing</td><td>3 node</td></tr><tr><td>`ewheelchair_wyes_teleop.launch.py`</td><td>Control servo with joystick, Ultrasonic sensor and Wyes Glasses</td><td>3 node</td></tr></tbody></table>

## ROS Packages

<table id="bkmrk-package-description-"><thead><tr><th>Package</th><th>Description</th></tr></thead><tbody><tr><td>`arduino_bridge`</td><td>Receives data from Arduino sensors</td></tr><tr><td>`custom_msgs`</td><td>Custom ROS message definitions</td></tr><tr><td>`e_wheelchair_launch`</td><td>Launch files for the complete system</td></tr><tr><td>`master_node`</td><td>Main control node for servo-controlled joystick</td></tr><tr><td>`pc_vision_bridge`</td><td>Bridge between PC vision system and ROS</td></tr><tr><td>`wyes_teleop`</td><td>Keyboard-based teleoperation interface</td></tr></tbody></table>

---

Pour se connecter au Hotspot WiFi :

- Nom du Hotspot : E-Wheelchair
- Mot de passe : EWheelChair2025

Pour se connecter à la plateforme : Nom de la plateforme : ewheelchair2

```
ssh ewheelchair2@192.168.4.1
```

mdp : ewheelchair

---

## 3D Models

- **Location**: [`3d_models/`](https://github.com/RenaudFookIng/E-WheelChAIr/blob/main/3d_models)
- **Formats**: STL and STEP files for 3D printing and simulation.
- **Tools**: Designed in OnShape.
- **Note**: Use `git lfs pull` after cloning to retrieve 3D files.

---

## Recent Changes

### Version 0.2.0 (Current)

- **Major Architecture Change**: Replaced Sabertooth motor controller with Miuzei MZ996 servo-based joystick control
- **New Package**: `arduino_bridge` for Arduino-based servo management
- **Updated**: `master_node` now publishes joystick commands instead of motor commands
- **Updated**: `visualization` package removed motor speed plotting
- **Improved**: Safety features with neutral position on emergency stop

### Version 0.1.0

- Initial release with Sabertooth motor controller
- Basic sensor integration (ultrasonic, camera)
- ROS2 Jazzy compatibility

## Collaboration

- **University of Milan**: Partner for accessibility validation.
- **Contributions**: Pull requests and issues are welcome!
- **License**: Apache 2.0 (see [LICENSE](https://github.com/RenaudFookIng/E-WheelChAIr/blob/main/LICENSE)).

---

## Contact

- **Maintainer**: Renaud JANET (<renaud.janet@etu.sorbonne-universite.fr> or <renaud.janet@proton.me>)
- **Github link** : [https://github.com/RenaudFookIng/E-WheelChAIr](https://github.com/RenaudFookIng/E-WheelChAIr)