Metadata-Version: 2.4
Name: synriard
Version: 1.0.3rc1
Summary: URDF and MJCF robot description files for Synria robotic platforms.
Author-email: Synria Robotics <support@synriarobotics.ai>
License: GPL-3.0
Project-URL: Homepage, https://github.com/Synria-Robotics/Synria-robot-descriptions
Keywords: robotics,urdf,mjcf,robot-description
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Classifier: Topic :: Scientific/Engineering
Requires-Python: >=3.7
Description-Content-Type: text/markdown
Requires-Dist: coacd
Requires-Dist: trimesh

# SynriaRD: Synria Robot Descriptions

English | [中文](README_CN.md)

This repository contains URDF (Unified Robot Description Format) and MJCF (MuJoCo Modeling Format) models for Synria robotic platforms.

## Repository Structure

```
├── synriard
│   ├── meshes
│   │   ├── Alicia_D_v5_6
│   │   └── Bessica_D_v1_1
│   ├── mjcf
│   │   ├── Alicia_D_v5_6
│   │   └── Bessica_D_v1_1
│   └── urdf
│       ├── Alicia_D_v5_6
│       └── Bessica_D_v1_1
```

## Naming Convention

All model files follow a unified naming format: `{name}_{version}_{variant}.{ext}`

- **name**: Robot name (e.g., `Alicia_D`, `Bessica_D`)
- **version**: Version number (e.g., `v5_6`, `v1_1`)
- **variant**: Variant identifier
  - For robots with grippers (Alicia_D): `gripper_{size}` (e.g., `gripper_50mm`, `gripper_100mm`)
  - For other variants (Bessica_D): Direct variant name (e.g., `skeleton`, `skeleton_interactive`)
- **ext**: File extension (`.urdf` or `.xml`)

### Examples

- `Alicia_D_v5_6_gripper_50mm.urdf` - Alicia_D v5.6 version with 50mm gripper
- `Alicia_D_v5_6_gripper_100mm.urdf` - Alicia_D v5.6 version with 100mm gripper
- `Bessica_D_v1_1_skeleton.urdf` - Bessica_D v1.1 version, skeleton variant
- `Bessica_D_v1_1_skeleton_interactive.xml` - Bessica_D v1.1 version, skeleton interactive variant (MJCF)

### Usage API

```python
from synriard import get_model_path, list_available_models

# Get model path
urdf_path = get_model_path("Alicia_D", version="v5_6", variant="gripper_50mm")
mjcf_path = get_model_path("Alicia_D", version="v5_6", variant="gripper_50mm", model_format="mjcf")

# List all available models
print(list_available_models(model_format="urdf"))
print(list_available_models(model_format="urdf", show_path=True))
```

## Products

### Alicia-D 
- **Description**: Agile manipulation arm
- **DOF**: 6
- **Gripper Configurations**: 50mm and 100mm
- **Variants**: 
  - `gripper_50mm` - 50mm gripper configuration
  - `gripper_100mm` - 100mm gripper configuration
  - `leader` - Leader arm configuration
  - `vertical_50mm` - Vertical 50mm configuration
- **Location**: [`Alicia_D_v5_6`](synriard/urdf/Alicia_D_v5_6)

### Bessica-D 
- **Description**: Dual-arm humanoid robot
- **DOF**: 14 (Dual 7-DOF arms)
- **Appearance**: Skeleton version

#### Skeleton Version
- **URDF**: [`Bessica_D_v1_1_skeleton.urdf`](synriard/urdf/Bessica_D_v1_1/Bessica_D_v1_1_skeleton.urdf)
- **MuJoCo XML**: [`Bessica_D_v1_1_skeleton.xml`](synriard/mjcf/Bessica_D_v1_1/Bessica_D_v1_1_skeleton.xml)
- **MuJoCo XML (Interactive)**: [`Bessica_D_v1_1_skeleton_interactive.xml`](synriard/mjcf/Bessica_D_v1_1/Bessica_D_v1_1_skeleton_interactive.xml)

## Adding New Robot Models

After adding new robot models, run the automation script to automatically generate the required `__init__.py` files:

```bash
# 1. Add model files to the corresponding directory
mkdir -p synriard/mjcf/RobotName_v1_0
cp RobotName_v1_0_gripper_100mm.xml synriard/mjcf/RobotName_v1_0/

# 2. Run the automation script
python3 auto_generate_init.py

# The script will automatically:
# - Generate __init__.py for each robot directory
# - Update parent directory __init__.py to register all robots
```

Script options:
- `--format mjcf|urdf|all`: Specify the format to process (default: all)
- `--synriard-path PATH`: Specify the synriard directory path (default: auto-detect)

## Supported Simulation Environments

- ROS/ROS2 (via URDF)
- MuJoCo (via MJCF)
- Gazebo (via URDF)
- PyBullet (via URDF)
- Isaac Sim (via URDF/MJCF)
