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.py
to send glove data over Wi-Fi
- Flash glove with
-
PC 2 (ROS 2 system):
- Start
glove_publisher.py
to receive glove data over socket and publish to/glove_data
- Start
arm_subscriber.py
to 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.py
as 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.ino
to 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/ttyUSB0
orCOM5
) - 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.py
using 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_arm
where ros2_ws
is your set up ros2 workspace
sudo apt update
sudo apt install ros-humble-rclpy python3-pybullet python3-serial
pip install pybullet pyserial
cd ~/ros2_ws
colcon build
source install/setup.bash
PC 1 β Glove Serial to Wi-Fi
cd haptic_glove_setup
python3 glove_data_wifi_transition.py
PC 2 β ROS Receiver
# Terminal 1
ros2 run haptic_glove_robot_arm glove_publisher
# Terminal 2
ros2 run haptic_glove_robot_arm arm_subscriber
python3 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_subscriber
glove_data_wifi_transition.py
reads serial β sends over TCP socketglove_publisher.py
accepts socket β publishes/glove_data
arm_subscriber.py
subscribes β moves robot joints in PyBullet
ros2 topic echo /glove_data
- Tune
grip_val
andgain
inarm_subscriber.py
for 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.