Gamepad → ROS 2 /joy → Mapping Node /ur3_cmd → UR3Bridge → CoppeliaSim
Control a UR3 robot in CoppeliaSim using a Logitech F310 (XInput mode).
- Ubuntu 24.04
- ROS 2 Jazzy installed at
/opt/ros/jazzy - Python 3.12 venv at
~/ros2venv - CoppeliaSim 4.10 with ZMQ Remote API (default rpcPort=23000)
- Logitech F310 gamepad (XInput)
ur3_bridge/ # Python package (nodes)
resource/ # ament index resource (keep)
test/ # tests (optional)
scenes/ur3.ttt # sample CoppeliaSim scene
scripts/bringup.sh # env loader
package.xml, setup.py, setup.cfg, README.md, LICENSE, requirements.txt
Note: This repository is a package-level repo.
Users should clone it into their own workspacesrc/and build withcolcon.
mkdir -p ~/ros2_ws_1/src
cd ~/ros2_ws_1/src
git clone https://github.com/Navvy000/teleop-ur3.git ur3_bridge
cd ~/ros2_ws_1
colcon build
source install/setup.bashpython3 -m venv ~/ros2venv
source ~/ros2venv/bin/activate
pip install -r ~/ros2_ws_1/src/ur3_bridge/requirements.txtIn each terminal, first load environment:
cd ~/ros2_ws_1/src/ur3_bridge
source scripts/bringup.shTerminal A — UR3 Bridge (ROS → CoppeliaSim)
source ~/ros2venv/bin/activate
source /opt/ros/jazzy/setup.bash
export PYTHONPATH=$VIRTUAL_ENV/lib/python3.12/site-packages:/opt/ros/jazzy/lib/python3.12/site-packages:$PYTHONPATH
source ~/ros2_ws_1/install/setup.bash
ros2 run ur3_bridge bridge_nodeTerminal B — Gamepad → /joy
source ~/ros2venv/bin/activate
source /opt/ros/jazzy/setup.bash
export PYTHONPATH=$VIRTUAL_ENV/lib/python3.12/site-packages:/opt/ros/jazzy/lib/python3.12/site-packages:$PYTHONPATH
source ~/ros2_ws_1/install/setup.bash
ros2 run joy joy_node --ros-args -p dev:=/dev/input/by-id/usb-Logitech_Gamepad_F310-event-joystick -p deadzone:=0.05 -p autorepeat_rate:=50.0Terminal C — /joy → /ur3_cmd
source ~/ros2venv/bin/activate
source /opt/ros/jazzy/setup.bash
export PYTHONPATH=$VIRTUAL_ENV/lib/python3.12/site-packages:/opt/ros/jazzy/lib/python3.12/site-packages:$PYTHONPATH
source ~/ros2_ws_1/install/setup.bash
ros2 run ur3_bridge gamepad_to_ur3_cmdOpen CoppeliaSim and load scenes/ur3.ttt, press ▶ Run (ZMQ server message should appear).
- LB: enable (hold-to-run)
- B: E-Stop (latching)
- Start: reset E-Stop (if implemented)
- Y: home (set targets to zeros)
- Sticks map to 6 joints (axes indices & inversion set for F310 XInput).
If directions feel inverted, adjustaxes.*.invertparams.
PYTHONPATHis merged so both venv packages and ROS 2 Python libs are importable.- Do not add ROS 2 system packages to
requirements.txt. - If
/joyhas no output, check gamepad path under/dev/input/by-id/.
- Ubuntu 24.04, ROS 2 Jazzy, Python 3.12, CoppeliaSim 4.10, Logitech F310 (XInput)
Author: Zhenyu Yuan
Date: October 2025
Project: MSc Computer Science (AI) – University of Nottingham
License: Apache 2.0