Pre-release
This release is a pre-release and may not be stable for production use.
HEXFELLOW ROBOTICS UTILITIES
📖 Overview
What is hex_util_ros
hex_util_ros is a lightweight Python utility library providing reusable robotic primitives for kinematics, dynamics, control, state estimation, motion planning, and more. It is part of the HEXFELLOW ecosystem and serves as the algorithmic middleware layer for robot system development.
| Module | Primary Purpose | Key Components |
|---|---|---|
| math_utils | 3D rotation & transformation (SO(3), SE(3), quaternion, Euler angles) | hat, rot2quat, euler2rot, trans_inv, quat_slerp |
| dyn_util | Rigid-body dynamics (forward/inverse kinematics, ID, Coriolis) | HexDynUtil, HexDynUtilY6 |
| ctrl_util | Joint-level and workspace-level controllers (MIT, PID, integral) | HexCtrlUtilMitJoint, HexCtrlUtilPidJoint, HexCtrlUtilIntJoint, HexCtrlUtilMitWork, HexCtrlUtilIntWork |
| intx_util | Interaction utilities (mirroring, friction, feedback) | HexMirrorUtil, HexFricUtil, HexFeedbackUtil |
| cam_util | Camera & depth-image utilities | depth_to_cmap |
| basic_util | General-purpose numeric helpers | deadzone, remap, time_interp, time_nearest |
| robot_util | Robot-specific utility functions | interp_joint, arm_pos_limit, grip_pos_limit, state_interp |
What problem it solves
- Unified math library: Provide a consistent, well-tested set of functions for SO(3), SE(3), quaternion, and Euler angle conversions, all with batched (vectorized) support and uniform input/output conventions.
- Robot dynamics abstraction: Wrap
hex_dynamic(Pinocchio-based) behind a clean API that handles flange-to-end-effector transforms, analytical IK for Y6 arms, and Coriolis/gravity compensation. - Reusable interaction primitives: Mirroring, tanh-based friction modeling, and PD feedback control as callable objects — ready to plug into any robot control loop.
Target users
- Robotics engineers building low-level control loops for manipulators.
- Developers working with the HEXFELLOW ecosystem (
hex_util_runtime,hex_driver_mujoco, etc.). - Researchers prototyping kinematics, dynamics, and motion planning algorithms.
- Anyone needing a clean, vectorized math library for 3D rotations and transformations.
Project structure
hex_util_ros/
├── hex_util_ros/
│ ├── __init__.py # Public exports (__all__)
│ ├── math_utils.py # 3D math: quaternion, rotation, pose, Euler angles
│ ├── dyn_util.py # Rigid-body dynamics: HexDynUtil, HexDynUtilY6
│ ├── ctrl_util.py # Control utilities: joint/work controllers (MIT, PID, integral)
│ ├── intx_util.py # Interaction utilities: HexMirrorUtil, HexFricUtil, HexFeedbackUtil
│ ├── cam_util.py # Camera utilities: depth-to-colormap
│ ├── basic_util.py # Basic utilities: deadzone, remap, time interpolation
│ └── robot_util.py # Robot helpers: joint interpolation, position limits
├── test/
│ └── test_math_utils.py # Unit tests for math_utils
├── docs/
│ └── api.md # Full API reference
└── pyproject.toml # Project metadata & build configuration
📦 Installation
Requirements
- Python ≥ 3.8
- OS: Linux
- Dependencies:
hex_dynamic ≥ 0.1.3numpy ≥ 1.17.4opencv-python ≥ 4.2
Install from PyPI
pip install hex_util_ros
Install from Source
We use uv to manage the Python environment. Please install it first.
- Clone and install in editable mode:
git clone https://github.com/hexfellow/hex_util_robot.git
cd hex_util_robot
./venv.sh
- Activate before using:
source .venv/bin/activate
⚡ Quick Start
import numpy as np
from hex_util_ros import hat, rot2quat, quat_slerp, trans_inv
from hex_util_ros import euler2rot, angle_norm
# SO(3) hat operator
omega = np.array([0.1, 0.2, 0.3])
omega_hat = hat(omega) # 3x3 skew-symmetric matrix
# Rotation matrix to quaternion
rot = euler2rot(np.array([0.1, 0.2, 0.3]), format='xyz')
quat = rot2quat(rot) # [w, x, y, z]
# Quaternion slerp
q1 = np.array([1.0, 0.0, 0.0, 0.0])
q2 = np.array([0.707, 0.707, 0.0, 0.0])
q_interp = quat_slerp(q1, q2, 0.5) # halfway quaternion
# Transform inverse
T = np.eye(4)
T[:3, 3] = [1.0, 2.0, 3.0]
T_inv = trans_inv(T)
# Normalise angle to [-pi, pi]
theta = angle_norm(3.5) # -2.783 rad
# Joint-level MIT controller
from hex_util_ros import HexCtrlUtilMitJoint
ctrl = HexCtrlUtilMitJoint(ctrl_limit=np.array([1.0] * 6))
tau = ctrl(kp=10.0, kd=0.5, q_tar=np.zeros(6), dq_tar=np.zeros(6),
q_cur=np.array([0.1]*6), dq_cur=np.zeros(6), tau_comp=np.zeros(6))
# Depth-to-colormap for visualization
from hex_util_ros import depth_to_cmap
import cv2
depth = np.random.rand(480, 640).astype(np.float32) * 5000
depth_color = depth_to_cmap(depth, depth_range=(70, 1000))
📑 Documentation
- API Reference — Detailed documentation of all classes and functions.
📄 License
Apache License 2.0. See LICENSE.
👥 Authors & Maintainers
| Role | Name | |
|---|---|---|
| Author | Dong Zhaorui | dzr159@gmail.com |
| Maintainer | jecjune (Chen Zejun) | zejun.chen@hexfellow.com |
| Maintainer | Dong Zhaorui | dzr159@gmail.com |
🌟 Star History
👥 Contributors
Metadata
Release files for hex-util-ros 0.0.1a5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hex_util_ros-0.0.1a5.tar.gz | 25.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hex_util_ros-0.0.1a5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 48.1 kB
Release files / hex_util_ros-0.0.1a5.tar.gz
| Download URL | hex_util_ros-0.0.1a5.tar.gz |
|---|---|
| Size | 25.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8276b1cba2a7665754198e5f9f0269b73251dd448553aaff392e5ab9dfaff029
|
|
BLAKE2b-256 checksum How to use checksums |
1e1785fad5ea9d097aa59501b1ccae2649081b06d456fe21b312bad5bfcd91d4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.12
|
Release files / hex_util_ros-0.0.1a5-py3-none-any.whl
| Download URL | hex_util_ros-0.0.1a5-py3-none-any.whl |
|---|---|
| Size | 23.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3150fe64625770e42c8bcd10cc1c7c86cfab0024c2482a6e1c22620f286d32d4
|
|
BLAKE2b-256 checksum How to use checksums |
df0a636153024ab39430685b21797c911b9d67dca43bd38f8b3d1b07319afa8d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.12
|