悉灵杯”课题研究进展(一)通过海康RGB-D相机获取带RGB信息的点云
本课题在Windows11平台进行开发,以鞋底、水果、快递箱为实验对象,使用海康3D相机产品获取视野中多个无序摆放的物料,将其转换为点云数据,利用算法对其行处理,获取物料的坐标与姿态,通过socket建立上位机与机械臂的通信,通过6轴协作机械臂对物料进行分拣。

一. 课题背景

机械臂引导:3D视觉引导机械臂方案被越来越多的行业认可,如:快递分拣供包、汽车配件上下料、仓储拆码垛、仓配货品拣选。通过使用3D视觉系统,可以实时获取目标物体的三维位置和姿态信息。这使得机械臂能够准确地定位和操作目标物体,实现高精度的任务执行。相比于传统的2D视觉系统,3D视觉能够提供更全面和准确的信息,提高了机械臂的定位精度。3D视觉系统可以同时获取多个视角的数据,从而提供更全面的物体信息。通过融合多个视角的数据,可以得到更准确的物体形状和表面信息,提高机械臂对目标物体的感知能力。这对于复杂形状的物体或需要多角度操作的任务非常有用。此外3D视觉系统对光照、阴影和遮挡等环境因素具有较强的鲁棒性。相比于2D视觉系统,3D视觉可以更好地应对复杂的工作环境,提供更可靠的目标检测和定位结果。这使得机械臂在不同的工作场景下都能够保持高效和稳定的操作。

    本课题以鞋底、水果、快递箱为实验对象,使用海康3D相机产品获取视野中多个无序摆放的物料,通过6轴协作机械臂对其进行分拣,本篇文章主要介绍将RGB图与深度图转换为带RGB信息的点云。

二. 环境介绍

1.Visual Studio 2019

2.PCL

3.QT

4.Open CV

5。VTK 8.2

三. 深度图与RGB图转化为带RGB信息点云

    RGB-D相机相比于3D线扫相机在获得物体深度图的同时还能够获取RGB图,将RGB图与深度图对齐后,可以将RGB图与深度图转换为转换为带颜色信息的三维点云。
    通过设置颜色阈值或使用颜色特征来筛选点云,可以去除不需要的点,从而提高数据质量和减少处理的复杂性。通过使用RGB信息,可以将点云中的不同目标进行分割与分类,使得进一步的处理和分析更加容易和准确。

    首先解析RGB图的数据,并通过Qt的label控件将图片显示出来,解析过程如下所示:

    g_pRgbData = (unsigned char*)malloc(stFrameData.stImageData[1].nDataLen);
	 memset(g_pRgbData, 0, stFrameData.stImageData[1].nDataLen);
     ConvertRGB8Planner2BGR8Packed(stFrameData.stImageData[1].pData, stFrameData.stImageData[1].nWidth, stFrameData.stImageData[1].nHeight, g_pRgbData);
	 cv::Mat  mCvmat = cv::Mat(stFrameData.stImageData[1].nHeight, stFrameData.stImageData[1].nWidth, CV_8UC3, g_pRgbData);
	 cv::Mat bgrImage;
	 cvtColor(mCvmat, bgrImage,cv::COLOR_RGB2BGR);
	 QImage Qmtemp = QImage((const unsigned char*)(bgrImage.data), bgrImage.cols, bgrImage.rows, bgrImage.step, QImage::Format_RGB888);
	 Qmtemp = Qmtemp.scaled(ui.label_2->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
	 ui.label_2->setPixmap(QPixmap::fromImage(Qmtemp));
	 ui.label_2->resize(Qmtemp.size());
	 ui.label_2->show();

接下来解析深度图,并通过QT的label控件进行显示:

	  MV3D_RGBD_MapDepthToPointCloud(handle, &stFrameData.stImageData[0], &imgCloud);
	  cv::Mat  temp = cv::Mat(stFrameData.stImageData[0].nHeight, stFrameData.stImageData[0].nWidth, CV_16UC1, stFrameData.stImageData[0].pData);
	  cv::Mat depthImage8Bit;
	  temp.convertTo(depthImage8Bit, CV_8U, 255.0 / 1000.0); 
	  QImage Qtemp = QImage((const unsigned char*)(depthImage8Bit.data), depthImage8Bit.cols, depthImage8Bit.rows, depthImage8Bit.step, QImage::Format_Indexed8);
	  Qtemp = Qtemp.scaled(ui.label->width(), ui.label->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
	  ui.label->setPixmap(QPixmap::fromImage(Qtemp));
	  ui.label->resize(Qtemp.size());
	  ui.label->show();

将RGB与深度图转换为带RGB信息的点云,在QT中通过VTK显示:

 <span style="font-family: monospace, monospace; font-size: 1em;">  int nPointNum = imgCloud.nDataLen / (sizeof(float) * 3);</span>	  float* pSrcValue = (float*)imgCloud.pData;
	  uchar* rgbvalue = (uchar*)mCvmat.data;
	  PointCloud::Ptr cloud(new PointCloud);
	  PointCloudA::Ptr cloudA(new PointCloudA);
	  for (int nPntIndex = 0; nPntIndex < nPointNum;++nPntIndex)
	  {
		  PointT p;
		  p.x = pSrcValue[nPntIndex*3+0];
		  p.y = pSrcValue[nPntIndex * 3 + 1];
		  p.z = pSrcValue[nPntIndex * 3 + 2];
		  p.r = rgbvalue[nPntIndex * 3 + 2];
		  p.g = rgbvalue[nPntIndex * 3 + 1];
		  p.b = rgbvalue[nPntIndex * 3 + 0];
		  cloud->points.push_back(p);
		  cloudA->points.push_back(p1);
	  }
	  cloud->height = 1;
	  cloud->width = cloud->points.size();
	  cloudA->height = 1;
	  cloudA->width = cloudA->points.size();
	  pcl::io::savePCDFile("D:\\QtProject\\HK_Robot_Materials_Sorting\\HK_Robot_Materials_Sorting\\point\\a.pcd", *cloud);
	  cloudRGB = cloud;	  viewer->removeAllPointClouds();
         viewer->removeAllShapes();
	  pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud);
	  viewer->addPointCloud<pcl::PointXYZRGB>(cloud, rgb, "point_cloud");
	  viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "point_cloud");
	  ui.qvtkWidget->update();
	 cloud->points.clear();
<br/>








版权声明:本文为V社区用户原创内容,转载时必须标注文章的来源(V社区),文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:v-club@hikrobotics.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
上一篇

每日分享|光源选型之尺寸和安装位置计算---同轴光源!!

下一篇

悉灵杯”课题研究进展(二)RGB-D相机引导机械臂分拣物料

评论请先登录 登录
全部评论 1

图文并茂,讲解超级详细

2023-08-25 17:14:42 浙江省
回复
  • 1
Lv.0
0
关注
7
粉丝
5
创作
57
获赞
所属专题
  • 使用3D相机MV-EB435i基于OpenCV的客流检测与异常识别的实现
  • 悉灵杯”课题研究进展(一)通过海康RGB-D相机获取带RGB信息的点云
  • “悉灵杯”课题研究-基于RGB_D相机的物品位置计算
  • “悉灵杯”课题研究-对RGB_D相机采集的三维点云处理
  • “悉灵杯”课题研究-RGB_D相机SDK集成及Open3d点云基本处理
  • “悉灵杯”课题研究-集成RGB_D相机SDK的Open3d点云可视化
  • “悉灵杯”课题研究-集成RGB_D相机SDK的Open3d点云功能UI项目开发(项目demo)
  • “悉灵杯”课题研究-RGB_D相机SDK三维点云存储
  • “悉灵杯”课题研究-OpenNI集成及示例代码开发
  • 悉灵杯”课题研究-MV-EB435i立体相机基于opencv图像处理使用yolov5的物体识别
  • “悉灵杯”课题研究-基于opecv的集成RGB_D相机SDK的基础小样物品颜色检测及人脸识别
  • OpenCV中利用knn进行数字(0-9)识别--RGB-D相机采集
  • “悉灵杯”课题研究-基于MV-EB435i的落差边缘检测算法开发记录
  • 悉灵杯”课题研究-LabVIEW集成及示例代码开发
  • “悉灵杯”课题研究-MV-EB435i立体相机集成Apriltags发布相机位姿
  • “悉灵杯”课题研究-MV-EB435i立体相机图像处理UI界面开发
  • “悉灵杯”课题研究-基于ROS1的RGB-D相机SDK集成及示例代码开发
  • 第二届“悉灵杯”课题移动机器人感知研究进展
  • “悉灵杯”课题研究—手眼标定方案
  • 第二届“悉灵杯”课题研究-基于RGB_D相机的室内环境建模
  • 悉灵杯”课题研究进展(二)-基于三维模型/场景点云的虚拟仿真数据生成
  • 悉灵杯”课题研究进展(一)-实例分割网络模型搭建与实验场景介绍
  • “悉灵杯”课题研究报告-基于RGB-D相机的2D和3D抓取定位方案研究
  • “悉灵杯”课题研究-基于点云配准算法GICP的3D抓取方案研究
  • “悉灵杯”课题研究-基于YOLO和GGCNN的物品平面抓取方案研究
  • 动态手势控制音频播放器-成果物
  • 第二届“悉灵杯”课题研究报告-动态手势控制音频播放器设计
  • 动态手势控制音频播放器(五)动态手势控制音频播放器exe
  • 动态手势控制音频播放器(四)动态手势识别系统的设计
  • 动态手势控制音频播放器(三)音频播放器设计
  • 动态手势控制音频播放器(二)动态手势识别系统的设计
  • 动态手势控制音频播放器(一)总体方案设计
  • 悉灵杯”课题研究进展(四)RGB-D相机引导机械臂分拣物料
  • 悉灵杯”课题研究进展(三)RGB-D相机引导机械臂分拣物料
  • 悉灵杯”课题研究进展(二)RGB-D相机引导机械臂分拣物料
  • ”悉灵杯”课题研究报告-基于RGB-D相机的机械臂物料分拣系统研究
  • 悉灵杯”课题研究报告-基于深度学习方法和虚拟仿真数据的机械臂引导方案
  • 第二届“悉灵杯”课题研究机械臂引导研究报告
  • 第二届“悉灵杯”课题研究机械臂引导研究进展(二)
  • 第二届“悉灵杯”课题研究机械臂引导研究进展(一)
相关阅读
  • VM4.4更新亮点
    2024-04-12 浏览 0
  • 探寻机器视觉新星|第二届“启智杯”机器视觉设计大赛获奖名单公布
    2024-04-08 浏览 0
  • 第二届启智杯—光伏电池片质检视觉方案设计
    2024-04-15 浏览 0
  • 第二届启智杯-锂电外壳外观检测3D视觉方案设计
    2024-04-15 浏览 0
  • 第二届启智杯-无监督异常检测算法
    2024-04-16 浏览 0

请升级浏览器版本

您正在使用的浏览器版本过低,请升级最新版本以获得更好的体验。

推荐使用以下浏览器