首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

【机器人】复现SceneGrasp 同时支持多目标 3D物体重建、6DoF位姿估计、抓取预测

  • 25-02-18 21:00
  • 3804
  • 13966
blog.csdn.net

SceneGrasp 是机器人场景的多物体理解与抓取预测方法,通过单帧RGB-D 图像实现:

实时物体分类、三维重建、6D姿态估计和密集抓取预测,运行速度可达30FPS。

本文主要分享SceneGrasp的环境搭建,然后进行模型推理,看看效果。

论文地址:Real-time Simultaneous Multi-Object 3D Shape Reconstruction, 6DoF Pose Estimation and Dense Grasp Prediction

开源地址:https://github.com/SamsungLabs/SceneGrasp

 看看3D点云的效果(左侧),右侧是彩色图

再看看物体重建的效果、抓取估计(红色框)

1、创建Conda环境,安装PyTorch和CUDA

首先创建一个Conda环境,名字为SceneGrasp,python版本为3.8

然后进入SceneGrasp环境

  1. conda create -n SceneGrasp python=3.8
  2. conda activate SceneGrasp

然后需要安装pytorch1.8.2,cudatoolkit=11.1

conda install pytorch torchvision torchaudio cudatoolkit=11.1 -c pytorch-lts -c nvidia

pytorch1.8.2官网地址:Previous PyTorch Versions | PyTorch 

​

2、安装SceneGrasp相关依赖库

下载SceneGrasp代码,然后进行SceneGrasp-master目录中

 代码地址:https://github.com/SamsungLabs/SceneGrasp

编辑 requirements.txt,注释torch和torchvision等

  1. # pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
  2. numpy
  3. matplotlib
  4. open3d
  5. scipy
  6. # torch
  7. # torchvision
  8. opencv-contrib-python==4.6.0.66
  9. # centersnap
  10. shortuuid
  11. boto3
  12. zstandard
  13. colour
  14. pytorch_lightning==0.7.5
  15. fvcore
  16. pygifsicle
  17. wandb
  18. imageio
  19. trimesh[easy]
  20. scikit-image
  21. # scenegrasp
  22. pyrender
  23. dominate

 开始安装SceneGrasp相关依赖库

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

3、安装PyTorch3d

来到PyTorch3d的官网地址:https://anaconda.org/pytorch3d/pytorch3d/files?page=11

选择pytorch3d-0.7.0-py38_cu111_pyt181.tar.bz2,然后下载

​

然后使用conda install安装就好啦

conda install pytorch3d-0.7.0-py38_cu111_pyt181.tar.bz2

安装效果如下图所示:

​

4、指定版本安装numpy

这时如果直接进行模型推理,会报错的:

  1. AttributeError: module 'numpy' has no attribute 'object'.
  2. `np.object` was a deprecated alias for the builtin `object`. To avoid this error in existing code, use `object` by itself. Doing this will not modify any behavior and is safe.
  3. The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:
  4. https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations

这个小问题啦,指定numpy版本1.21.3就可以啦

pip install numpy==1.21.3 -i https://pypi.tuna.tsinghua.edu.cn/simple

然后执行:

  1. export PYTHONPATH=${PYTHONPATH}:${PWD}
  2. WANDB_MODE="disabled"

5、模型推理

首先下载预训练的模型权重,解压后放到SceneGrasp-master目录中

https://github.com/SamsungLabs/SceneGrasp/releases/download/v1.0/checkpoints.zip

然后执行命令进行推理(官方默认的demo)

python scripts/demo.py

下面是我添加了中文注释和修改了参数的demo

  1. import cv2
  2. import numpy as np
  3. import open3d as o3d
  4. from pathlib import Path
  5. import sys
  6. from common.utils.nocs_utils import load_depth
  7. from common.utils.misc_utils import (
  8. convert_realsense_rgb_depth_to_o3d_pcl, # 将RealSense的RGB和深度图转换为Open3D点云
  9. get_o3d_pcd_from_np, # 将NumPy数组转换为Open3D点云
  10. get_scene_grasp_model_params, # 获取场景抓取模型的参数
  11. )
  12. from common.utils.scene_grasp_utils import (
  13. SceneGraspModel, # 场景抓取模型
  14. get_final_grasps_from_predictions_np, # 从预测中获取最终抓取点
  15. get_grasp_vis, # 获取抓取可视化
  16. )
  17. def get_demo_data_generator(demo_data_path):
  18. """
  19. 数据生成器,从给定路径加载RGB图像、深度图和相机内参。
  20. :param demo_data_path: 示例数据的路径
  21. :yield: RGB图像、深度图和相机内参
  22. """
  23. camera_k = np.loadtxt(demo_data_path / "camera_k.txt") # 加载相机内参矩阵
  24. for color_img_path in demo_data_path.rglob("*_color.png"): # 遍历所有颜色图像
  25. depth_img_path = color_img_path.parent / (
  26. color_img_path.stem.split("_")[0] + "_depth.png"
  27. )
  28. color_img = cv2.imread(str(color_img_path)) # 加载RGB图像
  29. depth_img = load_depth(str(depth_img_path)) # 加载深度图
  30. yield color_img, depth_img, camera_k # 返回生成器结果
  31. def main(hparams):
  32. """
  33. 主函数,加载抓取模型并处理示例数据。
  34. :param hparams: 模型的超参数
  35. """
  36. TOP_K = 10 # 选择前200个抓取点,可以通过贪心NMS改进
  37. # 加载模型
  38. print("Loading model from checkpoint: ", hparams.checkpoint)
  39. scene_grasp_model = SceneGraspModel(hparams) # 初始化场景抓取模型
  40. # 加载演示数据
  41. demo_data_path = Path("outreach/demo_data")
  42. data_generator = get_demo_data_generator(demo_data_path)
  43. for rgb, depth, camera_k in data_generator:
  44. print("------- Showing results ------------")
  45. pred_dp = scene_grasp_model.get_predictions(rgb, depth, camera_k) # 获取预测结果
  46. if pred_dp is None:
  47. print("No objects found.") # 如果没有检测到物体
  48. continue
  49. all_gripper_vis = [] # 存储所有抓取的可视化结果
  50. for pred_idx in range(pred_dp.get_len()): # 遍历每个预测
  51. (
  52. pred_grasp_poses_cam_final, # 抓取点的最终相机坐标系姿态
  53. pred_grasp_widths, # 抓取点宽度
  54. _,
  55. ) = get_final_grasps_from_predictions_np(
  56. pred_dp.scale_matrices[pred_idx][0, 0], # 缩放矩阵
  57. pred_dp.endpoints, # 预测端点
  58. pred_idx, # 当前预测索引
  59. pred_dp.pose_matrices[pred_idx], # 姿态矩阵
  60. TOP_K=TOP_K, # 前K个抓取点
  61. )
  62. # 为抓取点设置颜色,红色表示抓取点
  63. grasp_colors = np.ones((len(pred_grasp_widths), 3)) * [1, 0, 0]
  64. all_gripper_vis += [
  65. get_grasp_vis(
  66. pred_grasp_poses_cam_final, pred_grasp_widths, grasp_colors
  67. )
  68. ]
  69. # 获取预测的点云
  70. pred_pcls = pred_dp.get_camera_frame_pcls()
  71. pred_pcls_o3d = []
  72. for pred_pcl in pred_pcls: # 转换为Open3D点云
  73. pred_pcls_o3d.append(get_o3d_pcd_from_np(pred_pcl))
  74. # 将RGB和深度图转换为Open3D点云
  75. o3d_pcl = convert_realsense_rgb_depth_to_o3d_pcl(rgb, depth / 1000, camera_k)
  76. # 显示预测的形状
  77. print(">Showing predicted shapes:")
  78. o3d.visualization.draw( # type:ignore
  79. [o3d_pcl] + pred_pcls_o3d
  80. )
  81. # 显示预测的抓取点
  82. print(">Showing predicted grasps:")
  83. o3d.visualization.draw( # type:ignore
  84. pred_pcls_o3d + all_gripper_vis
  85. )
  86. if __name__ == "__main__":
  87. # 如果有命令行参数,获取参数列表
  88. args_list = None
  89. if len(sys.argv) > 1:
  90. args_list = sys.argv[1:]
  91. # 获取抓取模型参数
  92. hparams = get_scene_grasp_model_params(args_list)
  93. # 调用主函数
  94. main(hparams)

看看3D点云的效果(左侧),右侧是彩色图

再看看物体重建的效果、抓取估计(红色框)

补充:解一下SceneGrasp

​

​​

​

相关文章推荐:

【机器人】Graspness 端到端抓取点估计 | 环境搭建 | 模型推理测试_graspness使用-CSDN博客

【机器人】Graspness 端到端 抓取点估计 | 论文解读_graspness discovery in clutters for fast and accur-CSDN博客

分享完成~

注:本文转载自blog.csdn.net的一颗小树x的文章"https://blog.csdn.net/qq_41204464/article/details/145083508"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top