# models_combination_for_grasping **Repository Path**: chenxin852/models_combination_for_grasping ## Basic Information - **Project Name**: models_combination_for_grasping - **Description**: [models]: YOLO+SAM+GraspNet+IK+Trajectory Planning [robot]: SO-101 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-10-20 - **Last Updated**: 2025-11-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 集成基础模型与经典算法的机器人自主抓取系统 [![Python](https://img.shields.io/badge/Python-3.10-blue.svg)](https://www.python.org/downloads/release/python-310/) [![框架](https://img.shields.io/badge/框架-YOLOv8%20|%20SAM%20|%20GraspNet-orange.svg)](https://github.com/ultralytics/ultralytics) [![许可](https://img.shields.io/badge/许可-MIT-green.svg)](LICENSE) 本项目呈现了一套精密的机器人抓取系统,该系统深度集成了前沿的基础模型与稳健的经典算法。通过融合 **YOLOv8-World**(开放词汇目标检测)、**Segment Anything Model (SAM)**(精准分割)、**GraspNet**(抓取位姿估计)以及 **LeRobot**(策略学习与控制)的优势,本系统为“检测-分割-抓取”任务提供了一套完整的端到端解决方案。 ![系统架构图](./docs/images/01.jpg) --- ## 📋 目录 1. [核心依赖库](#-核心依赖库) 2. [硬件与系统配置](#-硬件与系统配置) - [步骤一:机器人与相机端口配置](#步骤一机器人与相机端口配置) - [步骤二:相机外参标定](#步骤二相机外参标定) - [步骤三:手眼标定(相机到基坐标系变换)](#步骤三手眼标定相机到基坐标系变换) 3. [快速启动:运行项目](#-快速启动运行项目) 4. [高级配置与注意事项](#-高级配置与注意事项) - [英特尔实感(Intel RealSense)相机设置](#英特尔实感intel-realsense相机设置) - [Segment Anything Model (SAM) 模型权重](#segment-anything-model-sam-模型权重) - [GraspNet 集成开关](#graspnet-集成开关) - [系统设计亮点:多线程架构](#系统设计亮点多线程架构) - [机械臂标定](#机械臂标定) --- ## 🧩 核心依赖库 本项目基于以下几个关键库构建。在开始之前,请确保您的Python 3.10环境中已正确安装这些依赖: - **[YOLOv8-World](https://github.com/ultralytics/ultralytics)**: 用于开放词汇的目标检测。 - **[Segment Anything (SAM)](https://github.com/facebookresearch/segment-anything)**: 用于高质量的物体分割。 - **[GraspNet Baseline](https://github.com/graspnet/graspnet-baseline)**: 用于六自由度的抓取位姿估计。 - **[LeRobot-Stable](https://huggingface.co/docs/lerobot/index)**: 用于机器人控制、数据采集和策略学习。 *本指南默认您已成功安装 `graspnet-baseline`, `lerobot-stable`, 和 `segment-anything`。* ## 🛠️ 硬件与系统配置 为确保系统正常运行,需要进行一次性的硬件配置和相机标定。 ### 步骤一:机器人与相机端口配置 - **操作要求**: 修改机器人手臂和相机的端口配置。 - **目标文件**: `lerobot/common/robot_devices/robots/configs.py` - **详细说明**: 根据您具体的硬件连接情况,更新文件中的串口号和设备ID。 ### 步骤二:相机外参标定 此步骤用于标定相机的内外参数及畸变系数。 1. **采集图像**: 运行 `camera_image_save.py` 脚本,从不同角度和位置拍摄30-50张标定板(如棋盘格)的照片。 2. **运行标定**: 运行 `camera_calibration.py` 脚本处理采集到的图像,以计算相机的外参矩阵。 3. **更新代码**: 标定脚本会输出一个旋转矩阵和一个平移向量。请将这些值手动更新到代码中: - **目标文件**: `lerobot/common/robot_devices/control_utils.py` - **代码行**: `469-471` - **更新指南**: - 将旋转矩阵的前两行分别填入 `n_wc` 和 `o_wc`。 - 将平移向量填入 `t_wc`。 ### 步骤三:手眼标定(相机到基坐标系变换) 此步骤用于确定相机坐标系与机器人基坐标系之间的静态变换矩阵 `T_cam_to_base`。 1. **场景布置**: 打印一张ArUco码贴纸,并将其放置在工作区中,确保其坐标轴与机器人基坐标系的坐标轴对齐。 2. **采集图像**: 运行 `realsense_image_save.py` 脚本,保存一张包含ArUco码的图片。 3. **计算变换矩阵**: 运行 `get_aruco.py` 脚本,处理图像以计算出变换矩阵 `T_cam_to_base`。 4. **更新代码**: 将计算出的变换矩阵手动更新到代码中的两个位置: - **目标文件**: `lerobot/common/robot_devices/control_utils.py` - **代码行 444 及 472**: 更新 `T_bc` 变量的值。 ## 🚀 快速启动:运行项目 完成所有配置和标定后,即可启动系统。项目的主要入口是 `lerobot` 库中的 `control_robot.py` 脚本。您可以通过向该脚本传递不同的命令行参数,来启动数据采集、策略推理等不同的工作模式。例如可以用以下方式启动。 ```bash python lerobot/scripts/control_robot.py \ --robot.type=so101 \ --control.type=record \ --control.fps=30 \ --control.single_task="test" \ --control.repo_id=data_record/test_record \ --control.num_episodes=1 ``` ## ⚙️ 高级配置与注意事项 ### 英特尔实感(Intel RealSense)相机设置 - **相机预热时间**: 若需调整相机在数据流开始前的预热时长,请修改 `lerobot/common/robot_devices/cameras/intelrealsense.py` 文件中的 **第365行**。 - **相机配置文件**: 若需更改相机的启动配置(如分辨率、帧率),请修改同一文件中的 **第313行** 所指向的JSON配置文件路径。 - **查看相机信息**: - **序列号**: 打开 `Intel Realsense Viewer` 工具,在相机窗口的右上角点击“Info”(i)按钮即可查看。 - **内参**: 直接运行 `realsense_test.py` 脚本,即可将相机的内参打印到控制台。 ### Segment Anything Model (SAM) 模型权重 - **依赖**: SAM模型需要加载预训练权重才能工作。 - **下载**: 请从官方链接 `https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth` 下载`ViT-B`模型的权重文件。 - **操作**: 将下载好的文件重命名为 `sam_b.pt`,并放置到项目的根目录下。 ### GraspNet 集成开关 您可以方便地启用或禁用GraspNet模块来进行抓取位姿估计。 - **目标文件**: `lerobot/common/robot_devices/control_utils.py` - **禁用 GraspNet**: - 注释掉 **第429行**。 - 取消注释其后一行的 `gg = None`。 - 注释 **第300行** 的 `grasp_points = None` 。 - **启用 GraspNet**: - 取消注释 **第429行**。 - 注释掉其后一行的 `gg = None`。 - 同时确保 **第300行** 的 `grasp_points = None` 处于启用状态。 ### 系统设计亮点:多线程架构 - 本系统采用多线程设计(需手动启用),将相机图像处理与机械臂控制解耦,以提升系统的实时响应性能。 - **核心实现**: 具体实现细节请参阅 `lerobot/common/robot_devices/control_utils.py` 文件中的 `camera_process()` 和 `arm_process()` 函数。 ### 机械臂标定 - 机械臂的标定文件已预先生成并存放于 `.cache/calibration` 目录下,通常无需额外操作。 ## 🤝 贡献 欢迎任何形式的贡献!如果您有任何问题或建议,请随时提交Issue或Pull Request。