Skip to main content

E-WheelChAIr

E-WheelChAIr

Smart Embedded System for Electric Wheelchairs

For all files see the github link : https://github.com/RenaudFookIng/E-WheelChAIr 

License ROS2


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

 

Front View Right View Rear View Left View

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
β”‚   β”‚
β”‚   └── Right_View.jpeg
β”‚
β”œβ”€β”€ 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

Launch File Description Components Launched
ewheelchair_all.launch.py Complete system with all sensors and processing 6 nodes
ewheelchair_joystick_servo.launch.py Control servo with joystick and Ultrasonic sensor 2 node
ewheelchair_arduino_vision.launch.py Control servo with joystick and Ultrasonic sensor and Wide-angle camera processing 3 node
ewheelchair_wyes_teleop.launch.py Control servo with joystick, Ultrasonic sensor and Wyes Glasses 3 node

ROS Packages

Package Description
arduino_bridge Receives data from Arduino sensors
custom_msgs Custom ROS message definitions
e_wheelchair_launch Launch files for the complete system
master_node Main control node for servo-controlled joystick
pc_vision_bridge Bridge between PC vision system and ROS
wyes_teleop Keyboard-based teleoperation interface

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/
  • 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).

Contact