P_ingL 2023-06-04 22:20 采纳率: 100%
浏览 57
已结题

请问coppliasim eduUR5视觉抓取怎么实现仿真,

请问coppliasim eduUR5 用深度相机怎么进行视觉颜色抓取 怎么实现仿真,抓去红色草莓,绿色不要。

img

  • 写回答

3条回答 默认 最新

  • 神秘玩家40 2023-06-05 05:43
    关注

    实现步骤如下:

    1. 添加深度相机

    在场景中添加一个深度相机,点击菜单栏中的 Add -> Sensors -> Vision Sensor。选择相应的模型并将其拖到场景中即可。

    1. 设置深度相机参数

    选中添加的深度相机对象,在属性面板中进行设置,包括相机位置、朝向、分辨率等参数。

    以深度相机对象为例,常规设置如下:

    • 模式:Sensor.
    • 传感器类型: 视觉.
    • FoV vertical : 视角范围(垂直方向).
    • 开始远离和结束(Near/Far Clip Plane) - 确定视野的开始和结束物体距离.
    1. 修改草莓颜色标记

    通过模型编辑工具对草莓所在区域进行特殊颜色标识。这个过程需要借助于 CoppeliaSim 中的 Modeling 操作工具完成,并可以使用匹配颜色些工具来帮助设定区域的颜色标记。首先在模型操作工具栏中找到勾画多边形的工具,然后用该工具勾画红色圆球等待后续处理。

    1. 编写 Lua 脚本

    CoppeliaSim 中可以使用 Lua 脚本编写程序,从而使模拟场景内的对象(机械臂,相机等)运动和互动。在本例中,我们需要对深度相机进行颜色检测并控制机械臂进行草莓抓取。

    function color_detection()
        -- 获取深度相机的句柄
        local camera = sim.getObjectHandle('Vision_sensor')
        -- 定义标记颜色的 RGB 值(红色)
        local strawberry_color = {255, 0, 0}
        -- 访问深度图像数据 
        local img_buffer=sim.getVisionSensorCharImage(camera)
        
        -- 将二维数组转化为单一纬度
        function flatten(t)
            local res={}
            for i=1,#t do
                for j=1,#t[i] do
                    table.insert(res,t[i][j])
                end
            end
            return res
        end
        
        -- 转换图像数据格式 
        local img_data=flatten(img_buffer)
    
        -- 定义处理矩阵大小参数 
        local w,h,xRes,yRes=0,0,0,0
    
        -- 检查是否获取到正确的图像数据
        if (sim.handleVisionSensor(camera) and (type(img_data)=='table') and (#img_data>0)) then
            -- 获取图像分辨率
            w = sim.getVisionSensorResolution(camera)[1]
            h = sim.getVisionSensorResolution(camera)[2]
            xRes = w/(sim.getVisionSensorBayscale(camera)*math.tan(sim.getVisionSensorFov(camera,1)/2))
            yRes = h/(sim.getVisionSensorBayscale(camera)*math.tan(sim.getVisionSensorFov(camera,2)/2))
    
            -- 创建 OpenCV 单通道 Mat 对象
            local img_mat = cv.Mat(h,w,cv.CV_8UC1)
            
            -- 转换 RGB -> HSV 颜色空间 
            local hsv_img=cv.cvtColor(img_mat, cv.COLOR_RGB2HSV)
    
            -- 定义掩模图像
            local mask = cv.inRange(hsv_img, cv.Scalar(strawberry_color[1]-20,
                                           strawberry_color[2]-20,strawberry_color[3]-20),
                cv.Scalar(strawberry_color[1]+20,strawberry_color[2]+20,strawberry_color[3]+20));
      
            -- 在掩模中查找最大连通区域
            local contours = cv.findContours(mask):
            
            if #contours>0 then
                for i=1,#contours do                
                    local area=cv.contourArea(contours[i]):     
                    local moments=cv.moments(contours[i])
                    local cx = moments["m10"]/moments["m00"]
                    local cy = moments["m01"]/moments["m00"]                
              
                    sim.addStatusbarMessage("Found object at position :("..cx..','..cy..')')
                    
                    -- 待完成机械臂抓取草莓部分操作...
                    ...
                end
            else 
              sim.addStatusbarMessage('No objects found...')
            end
            
        else
            sim.addStatusbarMessage('Failed acquiring image.')
        end
    end
    
    1. 与机械臂进行对接

    建议你可以在CoppeliaSim 给 UR5添加力传感器(控制机械臂找到正确的草莓位置和旋转)后进行控制, 在该模拟环境中添加路径规划,PID闭环等方式来对机械臂运动进行更为精细化的调整。本例中实现只是提供一个基础示例,你需要自己根据具体需求来进行深度学习标记,识别及定位等功能的补充。

    希望这些步骤能够解决问题,如有疑问,请随时回复。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月14日
  • 已采纳回答 6月6日
  • 创建了问题 6月4日

悬赏问题

  • ¥15 Qt4代码实现下面的界面
  • ¥15 prism提示我reinstall prism 如何解决
  • ¥15 asp.core 权限控制怎么做,需要控制到每个方法
  • ¥20 while循环中OLED显示中断中的数据不正确
  • ¥15 这个视频里的stm32f4代码是怎么写的
  • ¥15 JNA调用DLL报堆栈溢出错误(0xC00000FD)
  • ¥15 请教SGeMs软件的使用
  • ¥15 自己用vb.net编写了一个dll文件,如何只给授权的用户使用这个dll文件进行打包编译,未授权用户不能进行打包编译操作?
  • ¥50 深度学习运行代码直接中断
  • ¥20 需要完整的共散射点成像代码