7dof-pendant
A pip-installable teach pendant GUI for the 7-DOF robotic arm.
The app opens a PyQt6 pendant (joint jog, Cartesian jog, presets, drawing, live status, E-stop) and drives the ROS 2 backend (Gazebo + ros2_control + the custom IK/FK and drawing nodes).
Install
ROS 2 Humble must already be installed (see Requirements), then install the pendant one of two ways:
From PyPI (recommended for users):
pip install --user 7dof-pendant
7dof-pendant # ensure ~/.local/bin is on PATH
The published package is self-contained (GUI + bundled robot source). Project page: https://pypi.org/project/7dof-pendant/.
From source (for development):
cd teach_pendant
pip install .
7dof-pendant
The wheel ships only the GUI + robot source — it does not contain ROS. Install the system ROS dependencies first with
./install.sh(see below).
Uninstall
pip uninstall 7dof-pendant
This removes the package and the 7dof-pendant command, but not two
things:
-
Colcon build artifacts. On first launch the pendant runs
colcon buildinside its bundled workspace, creatingbuild/,install/, andlog/directories that pip never recorded — sopip uninstallleaves them behind. Remove them too:WS=$(python3 -c "import pendant7dof, os; print(os.path.join(os.path.dirname(pendant7dof.__file__), 'workspace'))") pip uninstall -y 7dof-pendant rm -rf "$WS"
(Run the
WS=…line before uninstalling — once the package is gone the import fails. If you already uninstalled, the leftovers live under~/.local/lib/python*/site-packages/pendant7dof/.) -
Dependencies. PyQt6 is left installed. Remove it only if nothing else uses it:
pip uninstall -y PyQt6 PyQt6-Qt6 PyQt6-sip.
ROS 2 itself (/opt/ros/...) was installed via apt/install.sh, not pip, so
it is unaffected.
Requirements
ROS 2 Humble must be installed on the machine. The pendant cannot bring
ROS along inside the wheel — rclpy, MoveIt and ros2_control come from the
system install. The pendant does bundle the robot's ROS 2 source and builds it
for you on first launch.
One-shot setup (install.sh)
./install.sh (run from teach_pendant/) installs every ROS dependency the
pendant needs to build and run via rosdep, plus the undeclared Python deps
(numpy, scipy, urdf_parser_py), then installs the pendant editable and
builds the workspace. It requires ROS 2 already installed under /opt/ros.
Use ./install.sh --no-build to skip the colcon build.
It supports real-hardware control and the moveit (RViz fake-hardware)
simulation — RViz and MoveIt are installed. It deliberately skips
Gazebo/Ignition, so the gazebo physics-sim backend is not available; use
moveit mode (Settings → mode) for RViz-based testing.
How it works
7dof-pendantchecks whether the ROS 2 environment is sourced. If not, it re-execs itself under a shell with/opt/ros/<distro>/setup.bashand the workspace'sinstall/setup.bashsourced — so you can launch from a plain terminal.- It locates the colcon workspace (
$PENDANT7DOF_WS, a bundled copy, or your~/7dof_ws). On first run itcolcon builds it once. - It opens the GUI. Use the Settings tab's Launch Gazebo Simulation
button to bring up the backend (
ros2 launch arm_bot pendant_backend.launch.py) as a managed child process — this is how you test the pendant end to end. Untick "Also open RViz" to skip RViz. The simulation is torn down when you close the app.
Commands
7dof-pendant # launch the pendant (default)
7dof-pendant launch --no-backend # attach to an already-running backend
7dof-pendant build # colcon-build the workspace and exit
7dof-pendant bundle # copy the dev workspace source into the package
7dof-pendant release # build a shippable self-contained wheel
7dof-pendant doctor # print environment diagnostics
Building a self-contained wheel
By default the package finds your ~/7dof_ws at runtime (no 49 MB of meshes
duplicated into git). To ship a wheel that carries the workspace inside it, run:
7dof-pendant release # bundle + build + clean up, in one step
This bundles the backend source, builds the wheel without pip build
isolation (so it uses your vetted setuptools>=61, not an arbitrary cached
one), then removes the bundle so your dev launches keep using the live
~/7dof_ws. The wheel lands in dist/7dof_pendant-<version>-py3-none-any.whl.
Do not use
python -m buildhere: pip's build isolation can pull an ancientsetuptoolsthat ignores the PEP 621[project]table and silently produces a brokenUNKNOWN-0.0.0wheel.7dof-pendant releaseavoids that trap (and checks yoursetuptools/wheelversions first).
Flags: --no-bundle builds a GUI-only wheel (bring your own backend);
--keep-bundle leaves the bundled workspace in place after building.
Metadata
Release files for 7dof-pendant 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 7dof_pendant-0.1.4-py3-none-any.whl | Python 3 | none | any | Details for 7dof_pendant-0.1.4-py3-none-any.whl |
Release files / 7dof_pendant-0.1.4-py3-none-any.whl
| Download URL | 7dof_pendant-0.1.4-py3-none-any.whl |
|---|---|
| Size | 21.1 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
012b24c6c67cd266400adf48e1e8ff0fa369e3107d9e22bdf99bd8811055661e
|
|
BLAKE2b-256 checksum How to use checksums |
e19f414043544eecd9f1971eb45fe865f3a63aa306286c443a3e79f430171555
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.12
|
Security for 7dof-pendant 0.1.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.