# jackaaron01/anygrasp_xarm6 architecture

> Architecture diagram of the GitHub repository jackaaron01/anygrasp_xarm6, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/jackaaron01/anygrasp_xarm6
- Repository: https://github.com/jackaaron01/anygrasp_xarm6

## Overview

This repository implements RGB-D-guided tabletop picking with an xArm6. The principal workflow captures aligned RealSense frames, builds a filtered point cloud, selects an AnyGrasp pose, transforms it using hand-eye calibration, and commands the arm to grasp. Separate entry points add repeated-pick recovery and detector-guided local grasping; README also documents visualization and a 197-configuration variant. The main entry point and grasp loop are sampled; some executor and recovery details are documented but not sampled, so uncertain internal wiring is omitted.

Main entry points: [`auto_pick_detect.py`](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/auto_pick_detect.py) (Target-guided entry), [`main.py`](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/main.py) (Continuous entry), [`grasp/grasp_loop.py`](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/grasp/grasp_loop.py) (Single grasp inference), [`auto_pick.py`](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/auto_pick.py) (Recovery loop)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_capture["Camera and geometry"]
  node_realsense["Frame capture<br/>[realsense_utils.py]"]
  node_pointcloud["Point cloud conversion"]
  node_camera_config["Camera calibration<br/>[camera_params.py]"]
  node_calibration["197 calibration"]
  node_variant_config["197 camera parameters"]
end

subgraph group_perception["Grasp perception"]
  node_grasp_loop["Single grasp inference<br/>[grasp_loop.py]"]
  node_detector["Object detection<br/>[detector_utils.py]"]
  node_detect_local["Local grasp selection"]
end

subgraph group_control["Robot control"]
  node_pose["Pose transformation<br/>[grasp_pose.py]"]
  node_executor["Grasp execution<br/>[grasp_executor.py]"]
  node_move_utils["TCP movement<br/>[move_utils.py]"]
  node_arm_init["Arm initialization<br/>[xarm_utils.py]"]
  node_cycle["Pick-and-place cycle<br/>[grasp_cycle.py]"]
end

subgraph group_modes["Picking modes"]
  node_main["Continuous entry<br/>[main.py]"]
  node_detect_entry["Target-guided entry"]
  node_auto_pick["Recovery loop<br/>[auto_pick.py]"]
  node_visualization["Grasp visualization<br/>[test_gui.py]"]
  node_variant["197 entry<br/>[main_197.py]"]
end

node_operator(("Operator"))
node_camera["RealSense camera"]
node_arm_device["xArm6"]
node_anygrasp["AnyGrasp SDK"]

node_operator -->|"starts"| node_main
node_operator -->|"starts"| node_auto_pick
node_operator -->|"starts"| node_detect_entry
node_operator -->|"starts"| node_visualization
node_operator -->|"starts"| node_variant
node_main -->|"loads model"| node_anygrasp
node_main -->|"starts camera"| node_realsense
node_main -->|"initializes arm"| node_arm_init
node_main -->|"requests grasp"| node_grasp_loop
node_grasp_loop -->|"captures frames"| node_realsense
node_grasp_loop -->|"converts RGB-D"| node_pointcloud
node_grasp_loop -->|"reads intrinsics"| node_camera_config
node_grasp_loop -->|"predicts grasps"| node_anygrasp
node_realsense -->|"reads frames"| node_camera
node_main -->|"transforms grasp"| node_pose
node_main -->|"reads transform"| node_camera_config
node_main -->|"executes grasp"| node_executor
node_main -->|"passes movement helper"| node_move_utils
node_main -->|"commands"| node_arm_device
node_arm_init -->|"connects"| node_arm_device
node_detect_entry -->|"captures frames"| node_realsense
node_detect_entry -->|"detects targets"| node_detector
node_detect_entry -->|"selects target region"| node_detect_local
node_detect_local -->|"builds local cloud"| node_pointcloud
node_detect_entry -->|"predicts local grasps"| node_anygrasp
node_detect_entry -->|"transforms grasp"| node_pose
node_detect_entry -->|"reads calibration"| node_camera_config
node_detect_entry -->|"initializes arm"| node_arm_init
node_detect_entry -.->|"uses when available"| node_cycle
node_detect_entry -.->|"fallback execution"| node_executor
node_detect_entry -->|"passes movement helper"| node_move_utils
node_detect_entry -->|"commands"| node_arm_device
node_auto_pick -->|"repeats detection"| node_grasp_loop
node_auto_pick -->|"initializes arm"| node_arm_init
node_auto_pick -->|"executes grasps"| node_executor
node_auto_pick -->|"commands"| node_arm_device
node_visualization -->|"visualizes results"| node_grasp_loop
node_variant -->|"reads parameters"| node_variant_config
node_variant -->|"requests grasp"| node_grasp_loop

click node_main "https://github.com/jackaaron01/anygrasp_xarm6/blob/main/main.py"
click node_realsense "https://github.com/jackaaron01/anygrasp_xarm6/blob/main/camera/realsense_utils.py"
click node_pointcloud "https://github.com/jackaaron01/anygrasp_xarm6/blob/main/camera/pointcloud_utils.py"
click node_camera_config "https://github.com/jackaaron01/anygrasp_xarm6/blob/main/config/camera_params.py"
click node_grasp_loop "https://github.com/jackaaron01/anygrasp_xarm6/blob/main/grasp/grasp_loop.py"
click node_pose "https://github.com/jackaaron01/anygrasp_xarm6/blob/main/grasp/grasp_pose.py"
click node_calibration "https://github.com/jackaaron01/anygrasp_xarm6/blob/main/config/calibration_result.py"
click node_executor "https://github.com/jackaaron01/anygrasp_xarm6/blob/main/grasp/grasp_executor.py"
click node_move_utils "https://github.com/jackaaron01/anygrasp_xarm6/blob/main/grasp/move_utils.py"
click node_arm_init "https://github.com/jackaaron01/anygrasp_xarm6/blob/main/robot/xarm_utils.py"
click node_detect_entry "https://github.com/jackaaron01/anygrasp_xarm6/blob/main/auto_pick_detect.py"
click node_detector "https://github.com/jackaaron01/anygrasp_xarm6/blob/main/vision/detector_utils.py"
click node_detect_local "https://github.com/jackaaron01/anygrasp_xarm6/blob/main/auto_pick_detect.py"
click node_auto_pick "https://github.com/jackaaron01/anygrasp_xarm6/blob/main/auto_pick.py"
click node_cycle "https://github.com/jackaaron01/anygrasp_xarm6/blob/main/grasp/grasp_cycle.py"
click node_visualization "https://github.com/jackaaron01/anygrasp_xarm6/blob/main/test_gui.py"
click node_variant "https://github.com/jackaaron01/anygrasp_xarm6/blob/main/main_197.py"
click node_variant_config "https://github.com/jackaaron01/anygrasp_xarm6/blob/main/config/camera_params_197.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_realsense,node_pointcloud,node_camera_config,node_calibration,node_variant_config toneBlue
class node_grasp_loop,node_detector,node_detect_local toneAmber
class node_pose,node_executor,node_move_utils,node_arm_init,node_cycle toneMint
class node_main,node_detect_entry,node_auto_pick,node_visualization,node_variant toneRose
class node_operator,node_camera,node_arm_device,node_anygrasp toneIndigo
```

## Components

### Camera and geometry

- [Frame capture](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/camera/realsense_utils.py): `camera/realsense_utils.py`
- [Point cloud conversion](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/camera/pointcloud_utils.py): `camera/pointcloud_utils.py`
- [Camera calibration](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/config/camera_params.py): `config/camera_params.py`
- [197 calibration](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/config/calibration_result.py): `config/calibration_result.py`
- [197 camera parameters](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/config/camera_params_197.py): `config/camera_params_197.py`

### Grasp perception

- [Single grasp inference](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/grasp/grasp_loop.py): `grasp/grasp_loop.py`
- [Object detection](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/vision/detector_utils.py): `vision/detector_utils.py`
- [Local grasp selection](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/auto_pick_detect.py): `auto_pick_detect.py`

### Robot control

- [Pose transformation](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/grasp/grasp_pose.py): `grasp/grasp_pose.py`
- [Grasp execution](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/grasp/grasp_executor.py): `grasp/grasp_executor.py`
- [TCP movement](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/grasp/move_utils.py): `grasp/move_utils.py`
- [Arm initialization](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/robot/xarm_utils.py): `robot/xarm_utils.py`
- [Pick-and-place cycle](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/grasp/grasp_cycle.py): `grasp/grasp_cycle.py`

### Picking modes

- [Continuous entry](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/main.py): `main.py`
- [Target-guided entry](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/auto_pick_detect.py): `auto_pick_detect.py`
- [Recovery loop](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/auto_pick.py): `auto_pick.py`
- [Grasp visualization](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/test_gui.py): `test_gui.py`
- [197 entry](https://github.com/jackaaron01/anygrasp_xarm6/blob/main/main_197.py): `main_197.py`

### Other components

- **Operator**
- **RealSense camera**
- **xArm6**
- **AnyGrasp SDK**

## Connections

- Operator → Continuous entry: starts
- Operator → Recovery loop: starts
- Operator → Target-guided entry: starts
- Operator → Grasp visualization: starts
- Operator → 197 entry: starts
- Continuous entry → AnyGrasp SDK: loads model
- Continuous entry → Frame capture: starts camera
- Continuous entry → Arm initialization: initializes arm
- Continuous entry → Single grasp inference: requests grasp
- Single grasp inference → Frame capture: captures frames
- Single grasp inference → Point cloud conversion: converts RGB-D
- Single grasp inference → Camera calibration: reads intrinsics
- Single grasp inference → AnyGrasp SDK: predicts grasps
- Frame capture → RealSense camera: reads frames
- Continuous entry → Pose transformation: transforms grasp
- Continuous entry → Camera calibration: reads transform
- Continuous entry → Grasp execution: executes grasp
- Continuous entry → TCP movement: passes movement helper
- Continuous entry → xArm6: commands
- Arm initialization → xArm6: connects
- Target-guided entry → Frame capture: captures frames
- Target-guided entry → Object detection: detects targets
- Target-guided entry → Local grasp selection: selects target region
- Local grasp selection → Point cloud conversion: builds local cloud
- Target-guided entry → AnyGrasp SDK: predicts local grasps
- Target-guided entry → Pose transformation: transforms grasp
- Target-guided entry → Camera calibration: reads calibration
- Target-guided entry → Arm initialization: initializes arm
- Target-guided entry → Pick-and-place cycle: uses when available
- Target-guided entry → Grasp execution: fallback execution
- Target-guided entry → TCP movement: passes movement helper
- Target-guided entry → xArm6: commands
- Recovery loop → Single grasp inference: repeats detection
- Recovery loop → Arm initialization: initializes arm
- Recovery loop → Grasp execution: executes grasps
- Recovery loop → xArm6: commands
- Grasp visualization → Single grasp inference: visualizes results
- 197 entry → 197 camera parameters: reads parameters
- 197 entry → Single grasp inference: requests grasp
