def setUp(self):
        #np.random.seed(6)
        self.res = 0.04

        self.vmap = mapper.VoxelMap(self.res, levels=3)
        pc = get_PC(0)[0]
        self.vmap.add_points(pc, pc.pose)
	def match_all(self, current_pc, current_centroid=[], name_list = []):

		vmap = mapper.VoxelMap(self.res, levels = self.mrolLevels)	
		pose_zero = poseutil.Pose3D()
		pose_zero.set((0,0,0,0,0,0))
		poseList = []
		costList = []
		centroid_input = 0
		current_centroid_local = np.zeros(3)
		
		if current_centroid==[]:
			centroid_input = 1

		if centroid_input==[]:
			current_centroid = np.mean(current_pc, axis=0)			

		current_pc -= current_centroid
		current_pc_vox = pointcloud.PointCloud(current_pc)
		rad = .2
		current_pc_vox.boxfilter(xmin=-rad, xmax=rad, ymin=-rad, ymax=rad, zmin=-rad, zmax=rad)
		
		if centroid_input:
			current_centroid_local = np.mean(current_pc_vox.points, axis=0)
			current_pc_vox -= current_centroid_local
			
		vmap.add_points(current_pc_vox, pose_zero)
		
		for i in range(self.modelCount):
			#Check to see if 
			for j in range(len(name_list)):
#				print self.all_names[i]
#				print name_list[j]
#				print self.all_names[i]==name_list[j]
				if (name_list == [] and j == 0) or self.all_names[i] == name_list[j]:

					pc_ground_vox = self.models_vox[i]
					
					bestPose, maxCost = vmap.align_points(pc_ground_vox, pose_zero)
		#			print "Pose: ", bestPose
		#			print "Max cost: ", maxCost
					bestPose_inv = poseutil.inverse(bestPose.get())
					bestPose_inv = poseutil.Pose3D(bestPose_inv)

					modelPose_T = current_centroid + current_centroid_local + bestPose_inv.get()[0:3]
					modelPose = np.reshape([modelPose_T, bestPose_inv.get()[3:]], 6)
					poseList.append(modelPose)
					costList.append(maxCost)
			
		#			mat = poseutil.Pose3D()
		#			mat.set(bestPose.get())

					if 0:
						xyzs = poseutil.transformPoints(pc_ground_vox.points, bestPose.getMatrix())
						pc = pointcloud.PointCloud(xyzs)
						pdb.set_trace()


		return costList, poseList
 def OFFtest_Zmapbuild_6DOF_feature(self):
     # "Z" prepended to run this last cos it is slow
     print "test_mapbuild_6DOF_feature"
     #vmap = self.vmap
     vmap = mapper.VoxelMap(self.res, levels=5)
     pc, di = get_PC(0)
     di_disconts = depth_image.depth_discont_sobel(di)
     pc_disconts = depth_image.image_to_points(di_disconts)
     vmap.add_points(pc_disconts, pc.pose)
     guessPose = vmap.trajectory[0]
     #guessPose = get_PC(0)[0].pose
     if visualise:
         import mrol_mapping.visualiser.robotvisualiser as robotvisualiser
         vmap.display()
         import pylab
         pylab.ion()
         pylab.imshow(di_disconts)
         pylab.draw()
         PC_vis = robotvisualiser.Visualiser(title='points')
         PC_vis.setautominmax()
         PC_vis.addmappts(pc_disconts.points)
         #import pdb;pdb.set_trace()
     start = time.time()
     for i in range(1, 16):
         print 'Aligning scan', i
         pc, di = get_PC(i)
         print "extracting feature set"
         di_disconts = depth_image.depth_discont_sobel(di)
         pc_disconts = depth_image.image_to_points(di_disconts)
         if visualise:
             pylab.imshow(di_disconts)
             pylab.draw()
             PC_vis.clear()
             PC_vis.addmappts(pc_disconts.points)
             #import pdb;pdb.set_trace()
         print "performing alignment"
         bestpose, maxcost = vmap.align_points(pc_disconts,
                                               guessPose,
                                               full_data=True)
         #bestpose = pc.pose # use the true value
         print 'Bestpose:', bestpose
         #vmap.add_points(pc, bestpose)
         vmap.add_points(pc_disconts, bestpose)
         self.check_localise(bestpose, pc.pose)
         guessPose = bestpose
         #import pdb;pdb.set_trace()
     taken = time.time() - start
     print 'Mapbuild time:', taken, 'seconds'
     print 'Map size (voxels):', len(vmap)
     import pdb
     pdb.set_trace()
     print 'Perfect map has 19812 voxels, press "c" to continue.'
    def test_Amapper_raytrace(
            self):  # "A" prepended to run this first cos it is quick
        print "test_Amapper_raytrace"
        res = 0.04
        vm = mapper.VoxelMap(res, levels=3)
        xyzs = np.zeros([4, 3])
        xyzs[:, 1] = np.cumsum(np.ones(4)) * res
        xyzs[3, :] = [0.5, 0.5, 0.5]  # this one isn't ray traced out
        pc = pointcloud.PointCloud(xyzs)
        vm.add_points(pc, None)
        pose = (0, 0, 0, 0, 0, np.pi / 2.)
        ray_occs_pc = vm.ray_trace(pose, 50 * res)
        self.assertEqual(
            ray_occs_pc,
            pointcloud.PointCloud(
                occupiedlist.pointstovoxels(xyzs[:3], res, vm.lattice)))
        ray_occs_pc = vm.ray_trace_pts(xyzs[0, :], xyzs[2, :])
        self.assertEqual(
            ray_occs_pc,
            pointcloud.PointCloud(
                occupiedlist.pointstovoxels(xyzs[:3], res, vm.lattice)))
        ray_occs_pc = vm.ray_trace_pts(np.array([0, 0, 0]), xyzs[3, :])
        self.assertEqual(
            ray_occs_pc,
            pointcloud.PointCloud(
                occupiedlist.pointstovoxels(xyzs[3, :], res, vm.lattice)))
        ray_occs_pc = vm.ray_trace_pts(xyzs[2, :], xyzs[0, :])
        self.assertEqual(
            ray_occs_pc,
            pointcloud.PointCloud(
                occupiedlist.pointstovoxels(xyzs[:3], res, vm.lattice)))
        # TODO ray check perpendicular to a plane

        # test the free-space tracing
        pc_555 = pointcloud.PointCloud(xyzs[3, :])
        free_555_pc = vm.free_space_ray_trace(pc_555,
                                              np.asarray([0, 0, 0]),
                                              resolution=res)
        xyzs_free_555 = np.array([[0., 0., 0.], [0.04, 0.04, 0.04],
                                  [0.08, 0.08, 0.08], [0.12, 0.12, 0.12],
                                  [0.16, 0.16, 0.16], [0.2, 0.2, 0.2],
                                  [0.24, 0.24, 0.24], [0.28, 0.28, 0.28],
                                  [0.32, 0.32, 0.32], [0.36, 0.36, 0.36],
                                  [0.4, 0.4, 0.4], [0.44, 0.44, 0.44]])
        expected_555_pc = pointcloud.PointCloud(xyzs_free_555)
        self.assertEqual(expected_555_pc, free_555_pc)
示例#5
0
    def __init__(self, objectName, poses, boxFilter=[-.08, .08,-.08, .08, 0.012, .4] , \
     mrolLevels = 4, res = .002, transThresh=.04, rotThresh=55.0, viz = 0):

        self.objectName = objectName
        self.boxFilter = boxFilter  #[-x, x, -y, y, -z, z] for boxFilter
        self.mrolLevels = mrolLevels  #number of self.resolution layers for MROL
        self.res = res  #self.resolution in meters
        self.transThresh = transThresh  # Threshold for merging PCs -- in meters
        self.rotThresh = rotThresh  # Threshold for merging PCs -- in degrees

        #		self.baseDir = 'data/'+objectName+'/'
        self.baseDir = sys.argv[0][0:sys.argv[0].rfind('/') +
                                   1] + 'data/' + objectName + '/'

        self.pose_list = []

        #		if poses == []:
        #			self.truth_T = truth.getTransformations()

        #			for i in range(self.truth_T.shape[2]):
        #				P =  poseutil.Pose3D()
        #				P.setMatrix(self.truth_T[:,:,i])
        #				self.pose_list.append(P)
        #		else:
        self.pose_list = poses

        print self.pose_list
        P = poseutil.Pose3D()
        point_clouds = {}
        PCs = []
        self.vmap = mapper.VoxelMap(self.res, levels=self.mrolLevels)

        if viz:
            self.vmap.display(npts=4e5)

        self.run()
示例#6
0
        
    

if __name__ == '__main__':
    try:
        datadir = sys.argv[1]
        outfname = sys.argv[2]+".map"
        fnames = os.listdir(datadir)
        fnames.sort()
        fnames = [datadir + '/' + fname for fname in fnames if fname.endswith('.png')]
    except:
        print 'Need to specify a valid directory for input and file name for output'
        sys.exit()

    # variable initialisation
    iros_map = mapper.VoxelMap(res,levels=5)
    iros_free_map = mapper.VoxelMap(res,levels=1)
    bestpose = poseutil.Pose3D()
    pc = get_pointcloud(fnames.pop(0))
    iros_map.add_points(pc, bestpose)
    if visualise:
        iros_map.display(changes=True)
    if make_free:
        freepts = get_freespace(pc.points, bestpose, iros_map)
        pcfree = pointcloud.PointCloud(freepts)
        iros_free_map.add_points(pcfree,None)
        if visualise:
            iros_free_map.display(npts=1000000)

    for fname in fnames:
        print fname, 
示例#7
0
import mrol_mapping.mapper as mapper
import mrol_mapping.mrol as mrol
import mrol_mapping.poseutil as poseutil
import mrol_mapping.pointcloud as pointcloud
import time

import pdb

res = .002
n_levels = 4

if len(sys.argv) > 1:
    input_file = sys.argv[1]
else:
    input_file = '/home/colin/repo/perception_repo/data/obj16_best.npy'

vmap = mapper.VoxelMap(res, levels=n_levels)
#vmap.display(npts=4e5)

input_pc = np.load(input_file)

pc = pointcloud.PointCloud(input_pc)
vmap.add_points(pc, poseutil.Pose3D())

point1 = np.array([-.2, 0, 0])
point2 = np.array([0, 0, 0])

tmp = vmap.ray_trace_pts(point1, point2, return_extras=False)

pdb.set_trace()
示例#8
0
            if fname.startswith('mrolpc')
        ]
    else:
        fnames = [
            datadir + '/' + fname for fname in fnames if fname.endswith('.png')
        ]
except:
    print 'Need to specify a valid directory for input'
    sys.exit()
visualise = True
long_term = False

bestpose = poseutil.Pose3D(X=(0, 0, 0, 0, 0, 0))
pc_xform = poseutil.Pose3D(X=(0, 0, 0, -np.pi / 2., 0, -np.pi / 2.))
res = 0.01
segment_map = mapper.VoxelMap(res, levels=3)
pc = pointcloud.load(fnames.pop(0))
#pc = pointcloud.PointCloud(pc)
pc = pointcloud.PointCloud(pc_xform.transformPoints(pc))
segment_map.add_points(pc, bestpose)
object_map = mapper.VoxelMap(res / 4., levels=1)

#freespace_ol = segment_map.generate_freespace2(resolution = res*2, minR=0.4, maxR=3)
#freespace_ol = segment_map.generate_freespace(res, minR=0.25, maxR=0.75) # *4 for speed during testing, should just be res

free_space_res = res

pc_vox = occupiedlist.pointstovoxels(pc.points, free_space_res)
pc_vox = quantizer.uniquerows(pc_vox, 0)
pc_pts = occupiedlist.voxelstopoints(pc_vox, free_space_res)
pc_regular = pointcloud.PointCloud(pc_pts)
    # Initialize CSV file

    time_ = time.gmtime()
    #	saveDir = current_dir[0:current_dir.rfind('/')] + '/data/'
    outputName = 'RUN' + '%04i' % int(
        runNumber) + "_" + teamName + "_" + '%4i%02i%02i' % (
            time_[0], time_[1], time_[2]) + "_" + '%02i' % time_[
                3] + ':' + '%02i' % time_[5] + ':' + '%02i' % time_[6] + '.csv'
    print baseDir + outputName
    output = write_csv.write2csv(baseDir + outputName, runNumber)

    # Initialize MROL for visusalization
    #	P =  poseutil.Pose3D()
    if viz:
        vmap = mapper.VoxelMap(mrol_res, levels=mrol_levels)
        vmap.display(npts=4e5)

    # Look through data
    if bagName == []:
        print "Error: No bag name"
    else:
        bag = bag2model(bagName)

        # Get Camera info once
        if cameraInfo != []:
            msg_camera = bag.bag.read_messages(topics=cameraInfo)
            bag.camera_info(msg_camera)

        if pose != None:
            msg_pose = bag.bag.read_messages(topics=pose)