function sysCall_init -- do some initialization here camera = simgetObjectAssociatedWithScriptsimhandle_self sensor=simgetObjectHandleconveyorBelt_sensor#0 view = simfloatingViewAdd09 055
-- Initialization function function sysCall_init() -- Get camera object and sensor handle camera = sim.getObjectAssociatedWithScript(sim.handle_self) sensor=sim.getObjectHandle('conveyorBelt_sensor#0') -- Create floating view and adjust camera position view = sim.floatingViewAdd(0.9, 0.55, 0.2, 0.1, 0) sim.adjustView(view, camera ,64) -- Get camera resolution and position res = sim.getVisionSensorResolution(camera) cam_pos = sim.getObjectPosition(camera,-1) -- Set camera view angle width and height cam_x = 1 cam_y = 0.25 -- Initialize proximity sensor variables, tick counter, and boolean variable for proximity detection ProximitySensor=0 ProximitySensorprevious=0 tick=0 end
-- Actuation function function sysCall_actuation() -- No actuation code end
-- Vision function function sysCall_vision(inData) local data={} -- Get proximity sensor readings ProximitySensorprevious=ProximitySensor ProximitySensor=sim.readProximitySensor(sensor) local handler = inData.handle -- If proximity sensor detects an object if(ProximitySensorprevious<=0)and(ProximitySensor>0) then -- Convert sensor image to work image simVision.sensorImgToWorkImg(handler) -- Filter work image by selective color and add buffer simVision.selectiveColorOnWorkImg(inData.handle,{1.00,0.29,0.21},{0.15,0.15,0.15},true,false,true) simVision.selectiveColorOnWorkImg(inData.handle,{0.28,1,0.21},{0.15,0.15,0.15},true,true,false) simVision.addBuffer1ToWorkImg(inData.handle) -- Perform blob detection on work image local _, ans=simVision.blobDetectionOnWorkImg(handler,0.1,0,false) packet = sim.unpackFloatTable(ans) local blobCount=packet[1] local dataSizePerBlob=packet[2] -- For each detected blob for i=1,blobCount,1 do -- Get blob size, orientation, relative position, and color local blobRelativeSize=packet[2+(i-1)*dataSizePerBlob+1] local blobOrientation=packet[2+(i-1)*dataSizePerBlob+2] local blobRelativePos={packet[2+(i-1)*dataSizePerBlob+3],packet[2+(i-1)dataSizePerBlob+4]} local realposX=cam_pos[1]+cam_x/2-cam_xpacket[2+(i-1)dataSizePerBlob+3]-0.012 local realposY=cam_pos[2]+cam_y/2-cam_ypacket[2+(i-1)*dataSizePerBlob+4] local blobBoxRelativeDimensions={packet[2+(i-1)*dataSizePerBlob+5],packet[2+(i-1)*dataSizePerBlob+6]} local blobCol=sim.getVisionSensorImage(camera,res[1]*blobRelativePos[1],res[2]*blobRelativePos[2],1,1,0) if (blobCol[1]>blobCol[2])and(blobCol[1]>blobCol[3]) then colorCode="red" end if (blobCol[2]>blobCol[1])and(blobCol[2]>blobCol[3]) then colorCode="green" end -- Add blob position and color to data array data[i]={realposX,realposY,colorCode} end -- Sort data array by X position for i=1,#data-1,1 do for j=1,#data-i,1 do if(data[j][1]>data[j+1][1]) then local relay={} relay=data[j] data[j]=data[j+1] data[j+1]=relay end end end -- Write data array to custom data block and set signal to retrieve data sim.writeCustomDataBlock(handler, 'data3', sim.packTable(data)) sim.setIntegerSignal('getdata', 1) -- Convert work image back to sensor image simVision.workImgToSensorImg(handler) end -- If signal to finish retrieving data is received if(sim.getIntegerSignal('finishDone')==1) then -- Clear data array and custom data block data={} sim.writeCustomDataBlock(handler, 'data3', sim.packTable(data)) -- Clear signal sim.clearIntegerSignal('finishDone') end en
原文地址: http://www.cveoy.top/t/topic/hum4 著作权归作者所有。请勿转载和采集!