← Quay lại Blog
manipulationgraspingmanipulationdeep-learningpoint-cloud

Robot Grasping 101: Analytical đến learning-based

Từ force closure truyền thống đến deep learning grasp detection -- tổng quan các phương pháp grasping hiện đại và cách chọn đúng cho project.

Nguyen Anh Tuan6 tháng 2, 20269 phút đọc
Robot Grasping 101: Analytical đến learning-based

Vì sao Grasping là bài toán khó nhất của Manipulation?

Với con người, việc cầm một chiếc cốc cà phê là hành động vô thức -- mắt nhìn, tay vươn, ngón tay khép lại. Nhưng với robot, đây là bài toán kết hợp perception, planning, và control cực kỳ phức tạp.

Một robot arm cần trả lời 3 câu hỏi trước khi grasping: (1) ở đâu trên vật thể nên tiếp xúc? (2) hướng nào của gripper là ổn định? (3) lực bao nhiêu là đủ để giữ mà không làm vỡ? Mỗi câu hỏi là một bài toán riêng, và các phương pháp giải đã tiến hóa từ analytical (tính toán hình học + vật lý) sang learning-based (học từ data) trong 2 thập kỷ qua.

Bài này là Part 1 của series Robot Manipulation Masterclass -- mình sẽ đi từ lý thuyết cổ điển đến các model deep learning mới nhất, với comparison table để bạn chọn đúng approach cho project của mình.

Robot gripper tiếp xúc với vật thể -- bài toán cơ bản của manipulation

Analytical Grasping: Nền tảng vật lý

Force Closure -- Điều kiện cần và đủ

Khái niệm quan trọng nhất của analytical grasping là force closure: một grasp được gọi là force closure khi các contact forces có thể chống lại bất kỳ external wrench nào (lực + moment) tác động lên vật thể.

Hình dung đơn giản: khi bạn cầm một quả bóng bằng 2 ngón tay (thumb và index finger), friction tại 2 điểm tiếp xúc tạo ra một wrench space đủ lớn để giữ quả bóng không trượt, không xoay, dù bạn nghiêng tay hay ai đẩy nhẹ.

Điều kiện toán học cho force closure:

Một grasp G với n contact points là force closure khi và chỉ khi:
convex hull của các primitive wrenches bao quanh gốc tọa độ (origin)
trong không gian wrench 6D (3 force + 3 torque).

Các bước tính:

  1. Xác định contact model: point contact with friction (PCWF), soft finger, hay rigid body
  2. Tính friction cone: tại mỗi contact point, tạo cone các lực cho phép dựa trên hệ số ma sát (coefficient of friction mu)
  3. Map sang wrench space: mỗi contact force -> wrench = [force; torque] qua cross product với contact position
  4. Kiểm tra force closure: convex hull của tất cả wrenches có chứa origin không?

GraspIt! -- Simulator cổ điển

GraspIt! là grasp planning simulator được phát triển tại Columbia University từ năm 2004, và vẫn được dùng rộng rãi cho analytical grasping research.

GraspIt! cho phép:

# Cài GraspIt! (Ubuntu)
sudo apt-get install libqt5-dev libsoqt520-dev libcoin-dev
git clone https://github.com/graspit-simulator/graspit.git
cd graspit && mkdir build && cd build
cmake .. && make -j$(nproc)

Hạn chế của analytical approach: cần 3D model chính xác của vật thể, friction coefficient chính xác, và không scale tốt với unknown objects. Đây là lý do learning-based methods ra đời.

Learning-Based Grasping: Học từ Data

PointNetGPD -- Point cloud trực tiếp

PointNetGPD (Liang et al., 2018) là một trong những paper đầu tiên dùng PointNet để evaluate grasp quality trực tiếp từ point cloud.

Ý tưởng cốt lõi: thay vì phân tích hình học phức tạp, hãy cho neural network học từ 350K grasp samples trên YCB object set. Input là point cloud bên trong gripper, output là grasp score.

# PointNetGPD inference pipeline (simplified)
import torch
from pointnet_gpd import PointNetGPD

model = PointNetGPD(num_classes=2)
model.load_state_dict(torch.load("pointnetgpd_weights.pth"))

# 1. Sample grasp candidates từ point cloud
grasp_candidates = sample_antipodal_grasps(point_cloud, num_samples=200)

# 2. Với mỗi candidate, crop point cloud trong gripper volume
for grasp in grasp_candidates:
    local_points = crop_points_in_gripper(point_cloud, grasp)
    # 3. PointNet predict quality score
    score = model(local_points)
    grasp.quality = score

# 4. Chọn grasp có score cao nhất
best_grasp = max(grasp_candidates, key=lambda g: g.quality)

Ưu điểm: nhanh (real-time), không cần object model, generalize tốt đến unseen objects.

Nhược điểm: chỉ hỗ trợ parallel-jaw gripper, không xét scene context (occlusion, clutter).

Contact-GraspNet -- 6-DoF trong clutter

Contact-GraspNet (Sundermeyer et al., 2021) giải quyết hạn chế của PointNetGPD bằng cách generate 6-DoF grasps trực tiếp từ scene point cloud, có xét đến clutter.

Deep learning cho robot grasping -- từ point cloud đến grasp pose

Điểm đột phá:

# Contact-GraspNet inference (simplified)
from contact_graspnet import ContactGraspNet

model = ContactGraspNet.load_pretrained()

# Input: single-view depth image -> point cloud
point_cloud = depth_to_pointcloud(depth_image, camera_intrinsics)

# Output: set of 6-DoF grasps with confidence scores
grasps, scores, contact_points = model.predict(
    point_cloud,
    forward_passes=5  # multiple passes for uncertainty
)

# Filter và rank
valid_grasps = grasps[scores > 0.5]
best_grasp = valid_grasps[scores.argmax()]

So sánh các phương pháp

Tiêu chí Analytical (GraspIt!) PointNetGPD Contact-GraspNet
Input 3D mesh + friction Point cloud (local) Point cloud (scene)
Output Grasp + quality metric Grasp score 6-DoF grasps + scores
Unknown objects Không (cần mesh)
Clutter handling Không Hạn chế Tốt
Speed Chậm (optimization) Real-time ~0.5s/scene
Gripper Multi-finger Parallel-jaw Parallel-jaw
Training data Không cần 350K grasps 17M grasps
Success rate (real) ~70-80% (known objects) ~85% >90%
Best use case Research, multi-finger Quick prototype Production clutter

Grasp Quality Metrics

Dù dùng phương pháp nào, bạn cần đo lường chất lượng của grasp. Đây là các metrics phổ biến:

Epsilon Metric (Force Closure Quality)

Epsilon metric là bán kính của largest inscribed ball trong wrench space convex hull. Epsilon > 0 nghĩa là force closure. Epsilon càng lớn, grasp càng robust với external disturbances.

# Tính epsilon metric
from scipy.spatial import ConvexHull
import numpy as np

def epsilon_metric(wrenches):
    """
    wrenches: (N, 6) array of primitive wrenches
    Returns: epsilon value (>0 = force closure)
    """
    hull = ConvexHull(wrenches)
    # Khoảng cách ngắn nhất từ origin đến mỗi facet
    distances = []
    for eq in hull.equations:
        normal = eq[:-1]
        offset = eq[-1]
        dist = abs(offset) / np.linalg.norm(normal)
        distances.append(dist)
    return min(distances)

Grasp Success Rate (Thực nghiệm)

Metric thực tế nhất: chạy N lần grasp, đếm số lần thành công. Một grasp "thành công" khi robot nhặt được vật thể, nâng lên 10cm, giữ 3 giây mà không rơi.

Diversity và Coverage

Ngoài quality, diversity cũng quan trọng: một grasp planner tốt cần tạo ra nhiều grasp candidates từ nhiều hướng khác nhau, để robot có fallback options khi grasp ưu tiên bị block bởi obstacles.

Từ Analytical đến Learning: Khi nào dùng gì?

Chọn Analytical khi:

Chọn Learning-based khi:

Hybrid approach

Xu hướng 2025-2026 là kết hợp: dùng learning model để generate grasp candidates nhanh, sau đó dùng analytical metrics để verify và rank. Đây là cách Google DeepMind và UC Berkeley đang làm trong các hệ thống mới nhất.

Robot arm thực hiện grasping trong môi trường clutter

Hands-on: Chạy Contact-GraspNet

Nếu bạn muốn thử ngay, đây là cách setup nhanh nhất:

# Clone repo
git clone https://github.com/NVlabs/contact_graspnet.git
cd contact_graspnet

# Cài dependencies (Python 3.8+, CUDA 11.x)
pip install -r requirements.txt

# Download pre-trained weights
bash download_weights.sh

# Chạy inference trên sample depth image
python contact_graspnet/inference.py \
    --np_path=test_data/scene_0.npy \
    --forward_passes=5 \
    --z_range=[0.2,1.2]

Output là một set 6-DoF grasps visualize trên point cloud. Từ đây, bạn có thể integrate với robot arm qua ROS 2 hoặc trực tiếp qua inverse kinematics.

Resources

Tiếp theo trong series

Đây là Part 1 của series Robot Manipulation Masterclass. Trong các bài tiếp theo:


Bài viết liên quan

Bài viết liên quan

TutorialLeRobot Ecosystem: Hướng dẫn toàn diện 2026
ai-perceptionmanipulationtutorial

LeRobot Ecosystem: Hướng dẫn toàn diện 2026

Tổng quan LeRobot của Hugging Face -- models, datasets, hardware support và cách bắt đầu với $100.

22/3/20269 phút đọc
Deep DiveDiffusion Policy: Cách mạng robot manipulation
ai-perceptiondiffusion-policymanipulationPhần 4

Diffusion Policy: Cách mạng robot manipulation

Tại sao diffusion models là breakthrough cho robotics — multimodal distributions, high-dim actions và stability.

14/3/202610 phút đọc
Deep DiveAction Chunking Transformers (ACT): Kiến trúc chi tiết
ai-perceptionmanipulationresearchPhần 3

Action Chunking Transformers (ACT): Kiến trúc chi tiết

Phân tích ACT — tại sao predict nhiều actions cùng lúc tốt hơn, CVAE encoder và temporal ensembling.

11/3/202611 phút đọc