This project enables real-time teleoperation of a simulated robotic arm using a haptic glove. The glove transmits spatial and finger position data over Wi-Fi, which is consumed by a ROS 2 node that controls a simulated robot arm in PyBullet. The architecture supports full simulation, testing on a single PC without ROS, or mocking the glove input.
- Seonbeom Kim
- Artem Bisliouk
- Yongkyoon Park
- Byeongkwan Jeon
haptic_glove_robot_arm/
βββ haptic_glove_robot_arm/ # ROS 2 package (main integration)
β βββ glove_publisher.py # ROS node: receives glove data via socket, publishes to /glove_data
β βββ arm_subscriber.py # ROS node: subscribes to /glove_data, simulates arm in PyBullet
β
βββ haptic_glove_robot_arm_mock/ # Standalone scripts (no ROS)
β βββ glove_arm_simulator_no_ros.py # Direct glove-to-arm simulation via serial
β βββ glove_publisher_mock.py # Mock publisher node for testing without hardware
β
βββ haptic_glove_setup/ # Setup scripts for glove device
β βββ glove_arduino_setup.ino # Arduino firmware for glove
β βββ glove_data_wifi_transition.py # Reads serial glove data, sends to ROS node over Wi-Fi
β
βββ test/ # Code quality tests
βββ demo/ # Folder with the banner of the project and a demo
βββ resource/, LICENSE, setup.py, etc.
-
PC 1 (USB-Glove connected):
- Flash glove with
glove_arduino_setup.ino - Run
glove_data_wifi_transition.pyto send glove data over Wi-Fi
- Flash glove with
-
PC 2 (ROS 2 system):
- Start
glove_publisher.pyto receive glove data over socket and publish to/glove_data - Start
arm_subscriber.pyto control the simulated robot arm via PyBullet
- Start
- Run
glove_arm_simulator_no_ros.py - Reads glove data from serial, directly controls simulated robot arm
- Replace glove input by launching:
glove_publisher_mock.py(simulates glove data)arm_subscriber.pyas usual
- Used for capturing finger flex and tilt orientation (pitch, roll)
- Connected via USB serial to the first PC (setup device)
- Flashed with
glove_arduino_setup.inoto stream data in structured format - Transmits data to another PC over Wi-Fi using
glove_data_wifi_transition.py
- Must support USB serial communication (e.g.,
/dev/ttyUSB0orCOM5) - Runs the glove setup and Wi-Fi forwarding script
- Sends sensor data to PC 2 over TCP/IP
- Must have ROS 2 (Humble) and PyBullet installed
- Receives data from PC 1 and publishes it via
glove_publisher.py - Subscribes and visualizes behavior via
arm_subscriber.pyusing the Franka Panda model in PyBullet
- If using
glove_arm_simulator_no_ros.py, only one PC is needed that supports USB serial input and runs PyBullet - Suitable for testing glove response without ROS
cd ~/ros2_ws/src
git clone <your_repo_url> haptic_glove_robot_armwhere ros2_ws is your set up ros2 workspace
sudo apt update
sudo apt install ros-humble-rclpy python3-pybullet python3-serial
pip install pybullet pyserialcd ~/ros2_ws
colcon build
source install/setup.bashPC 1 β Glove Serial to Wi-Fi
cd haptic_glove_setup
python3 glove_data_wifi_transition.pyPC 2 β ROS Receiver
# Terminal 1
ros2 run haptic_glove_robot_arm glove_publisher
# Terminal 2
ros2 run haptic_glove_robot_arm arm_subscriberpython3 haptic_glove_robot_arm_mock/glove_arm_simulator_no_ros.py# Terminal 1
ros2 run haptic_glove_robot_arm_mock glove_publisher_mock
# Terminal 2
ros2 run haptic_glove_robot_arm arm_subscriberglove_data_wifi_transition.pyreads serial β sends over TCP socketglove_publisher.pyaccepts socket β publishes/glove_dataarm_subscriber.pysubscribes β moves robot joints in PyBullet
ros2 topic echo /glove_data- Tune
grip_valandgaininarm_subscriber.pyfor desired responsiveness
- Ensure both PCs are on the same network
- Serial port (e.g.,
COM5) must match your system - You can extend to more fingers, gestures, or IMU feedback with minor edits
This project is licensed under the MIT License.
