예제 #1
0
파일: vo.py 프로젝트: Calm-wy/kwc-ros-pkg
 def handle_array(self, iar):
   if self.vo:
     t0 = time.time()
     self.intervals.append(t0)
     if (self.modulo % self.decimate) == 0:
       imgR = imgAdapted(iar.images[0])
       imgL = imgAdapted(iar.images[1])
       af = SparseStereoFrame(imgL, imgR)
       if 1:
         pose = self.vo.handle_frame(af)
       else:
         pose = Pose()
       #print self.vo.num_frames, pose.xform(0,0,0), pose.quaternion()
       p = VOPose()
       p.inliers = self.vo.inl
       # XXX - remove after camera sets frame_id
       p.header = rostools.msg.Header(0, iar.header.stamp, "stereo_link")
       p.pose = stdmsg.Pose(stdmsg.Point(*pose.xform(0,0,0)), stdmsg.Quaternion(*pose.quaternion()))
       self.pub_vo.publish(p)
     self.modulo += 1
     self.took.append(time.time() - t0)
     if (len(self.took) % 100) == 0:
       print len(self.took)
예제 #2
0
        imL, imR = imR, imL
        imL = imL.transpose(Image.FLIP_LEFT_RIGHT)
        imR = imR.transpose(Image.FLIP_LEFT_RIGHT)
    if 1:
        for j, vo in enumerate(vos):
            f = SparseStereoFrame(imgStereo(imL), imgStereo(imR))
            #f = MagicStereoFrame(imgStereo(imL), imgStereo(imR), imD, stereo_cam)

            #f = PhonyFrame(~desired_pose, stereo_cam)
            #vo.lock_handle_frame(f)
            vo.handle_frame(f)
            #visualize.viz(vo, f)
            (x, y, z) = vo.pose.xform(0, 0, 0)
            if 0:
                print vo.name(), (x, y, z)
                (ex, ey, ez) = desired_pose.xform(0, 0, 0)
                Ys[j].append(z - ez)
            else:
                trajectory[j].append((x, y, z))


def planar(x, y, z):
    from scipy import optimize

    def silly(sol, args):
        a, b, c = sol
        x, y, z = args
        return sum((y - (a * x + b * z + c))**2)

    sol = [1.0, 1.0, 1.0]
    sol = optimize.fmin(silly, sol, args=((x, y, z), ))
예제 #3
0
disparities = []

trajectory = [[] for i in vos]
ground_truth = []
for i in range(8):
    print i
    if 0:
        desired_pose = Pose(rotation(0, 0, 1, 0), (0, 0, 0.01 * i))
    else:
        theta = (i / 400.0) * math.pi * 2
        wobble = 0.25 * (sin(theta * 9.127) + cos(theta * 3.947))
        r = 4.0 + wobble
        desired_pose = Pose(
            rotation(theta, 0, 1,
                     0), (4.0 - r * math.cos(theta), 0, r * math.sin(theta)))
    ground_truth.append(desired_pose.xform(0, 0, 0))
    cam = ray_camera(desired_pose, stereo_cam)

    if 0:  # set to 1 for the first time to generate cache
        imL = Image.new("RGB", (640, 480))
        imR = Image.new("RGB", (640, 480))
        imD = [
            Image.new("F", (640, 480)),
            Image.new("F", (640, 480)),
            Image.new("F", (640, 480))
        ]

        def is_visible(p, pt):
            camx, camy, camz = (~p).xform(pt.x, pt.y, pt.z)
            if camz <= 0:
                return False
예제 #4
0
    xp = xs * cos(f) - ys * sin(f)
    yp = ys * cos(f) + xs * sin(f)
    pylab.plot(xp, yp, c=colors[i], label=vos[i].name())
    pylab.quiver(xp, yp, vo_u[i], vo_v[i],
                 color=colors[i])  #, label = '_nolegend_')
    #xk = [ x for j,x in enumerate(vo_x[i]) if j in vos[i].log_keyframes ]
    #yk = [ y for j,y in enumerate(vo_y[i]) if j in vos[i].log_keyframes ]
    #pylab.scatter(xk, yk, c = colors[i], label = '_nolegend_')

if vos[0].sba:
    CX = []
    CY = []
    for sbap in vos[0].posechain:
        p = Pose()
        p.fromlist(sbap.M)
        x, y, z = p.xform(0, 0, 0)
        CX.append(x)
        CY.append(z)

    xs = numpy.array(CX)
    ys = numpy.array(CY)
    xs -= 4.5 * 1e-3
    f = -0.06
    xp = xs * cos(f) - ys * sin(f)
    yp = ys * cos(f) + xs * sin(f)
    pylab.plot(xp, yp, c='magenta', label='with SBA')

pylab.plot(oe_x, oe_y, c='green', label='wheel + IMU odometry')
xlim = pylab.xlim()
ylim = pylab.ylim()
xrange = xlim[1] - xlim[0]