HEXFELLOW Robotics Utilities
Project description
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hex_util_ros-0.0.1a4.tar.gz.
File metadata
- Download URL: hex_util_ros-0.0.1a4.tar.gz
- Upload date:
- Size: 24.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
946a820d8c5300b99a65838641294ad4e03cdc83be0011201848f0ec9de1e695
|
|
| MD5 |
971e2769e1f14dab1cdeb00759c613d8
|
|
| BLAKE2b-256 |
614a255d93d7a1be5e93f9cbb154e413304e61cf0e54984a0fbe7a68bd6d0f89
|
File details
Details for the file hex_util_ros-0.0.1a4-py3-none-any.whl.
File metadata
- Download URL: hex_util_ros-0.0.1a4-py3-none-any.whl
- Upload date:
- Size: 23.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ce90e0f20bec6b5bde1ced29bb548b3edaf2741d40899868ff1d1bac2a5a8b9
|
|
| MD5 |
5d7086a78867f8e8e0fd89de5d7b5fdd
|
|
| BLAKE2b-256 |
a0561116f0cc6e77253bf17232f4be2a443cd8815b5640115123349e0c724cca
|