Ejemplo n.º 1
0
 def __init__(self, feas, width, height):
     self.feas = feas
     # 创建模型占用地图
     self.map = Map2D(width, height)
     # 默认角度设定为0
     self.angle = 0
     self.__initFeasOnMap()
Ejemplo n.º 2
0
def __TestModelDrawFunc():
    # 创建一个大地图
    map = Map2D(1500, 1000)
    # 引入模型类以及模型
    from map.objModel import ObjModel
    from map.objModel import Models
    # 获取汽车模型
    mdl = ObjModel(Models.carModel, 170, 375)
    # 创建两个角度不同的汽车
    m_car1 = mdl.getRotateModel(103)
    m_car2 = mdl.getRotateModel(87)
    # 将车加入地图中
    map.addSubMap(m_car1, 0, 0)
    map.addSubMap(m_car2, 597, -20)
    # 创建画板
    fig = MapFigure(map)
    # 使用栅格绘制模型图
    fig.drawMapByGrids()  # This one is slow
    fig.setXYLim(0, 1500, 0, 1000)
    fig.setAspect()
    # 获取传感器数据
    from sensor.radar2D import Radar2D
    radar = Radar2D([0, math.pi], 510, 800, 1, 5)
    radar_pos = [600, 200, 0]
    radar_data = radar.getMeasureData(map, radar_pos)
    # 解析数据
    xs = [x[0] for x in radar_data]
    ys = [x[1] for x in radar_data]
    # 画在图上
    for dat in radar_data:
        print dat[0], dat[1]
    fig.drawRadarPoints(xs, ys, 'r.')
    # 展示模型图
    fig.showFigure()
Ejemplo n.º 3
0
def __TestBasicDrawFunc():
    # 首先创建一个200x200地图
    map = Map2D(200, 200)
    # 地图中添加一个矩形
    map.addFeature(Map2D.Feature(Map2D.Feature.rectangle, [50, 50, 10, 20]))
    # 创建一个50x50的另一个地图
    map2 = Map2D(50, 50)
    # 添加椭圆特征
    map2.addFeature(Map2D.Feature(Map2D.Feature.ellipse, [25, 25, 40, 30, 0]))
    # map融合map2,把map2放到0,0位置
    map.addSubMap(map2, 0, 0)
    # 以下是画图部分
    fig = MapFigure(map)
    fig.drawMapByGrids()  # This one is slow
    fig.setXYLim(0, 200, 0, 200)
    fig.showFigure()
Ejemplo n.º 4
0
def drawSensorLocErr():
    fig = MapFigure(Map2D(200, 200))
    l1 = fig.drawErrorBar(x, yLaser, eLaser, 'm-s')
    l2 = fig.drawErrorBar(x, ySonic, eSonic, 'b--o')
    fig.setXYLabel(u'栅格单元/cm', u'平均定位误差/cm')
    fig.setXYLim(0, 70, 0, 35)
    plt.legend([l1, l2], [u'LaserRad', u'SonicSen'], loc='upper right')
    fig.showFigure()
Ejemplo n.º 5
0
def drawPNum():
    fig = MapFigure(Map2D(200, 200))
    l1 = fig.drawRadarPoints(n_x, n_fix1, 'm-s')
    l2 = fig.drawRadarPoints(n_x, n_fix2, 'b--*')
    l3 = fig.drawRadarPoints(n_x, n_ada, 'g:o', 1.5)
    plt.legend([l1, l2, l3], [u'FIX1', u'FIX2', 'ADA'], loc='upper right')
    fig.setXYLabel(u'数据编号', u'粒子数/个')
    fig.showFigure()
Ejemplo n.º 6
0
def sim1(init_val):
    num = 60
    sam = 60
    seqX = PFSim.getSeqX(init_val, num)
    seqO = PFSim.getSeqO(seqX)

    rans = PFSim.genNormalRan(num, sam)

    # SIS
    seqR = [init_val]
    timeSIS = time.clock()
    pset = ParticleSet(np.linspace(-10, 10, 400))
    for i in range(1, len(seqX)):
        pset.samplingSIS(sam)
        pset.predictSeq(i, rans[i])
        pset.updateSeq(seqO[i])
        seqR.append(pset.getCurrentVal())
    timeSIS = time.clock() - timeSIS

    # LVS
    seqLVS = [init_val]
    timeLVS = time.clock()
    pset = ParticleSet(np.linspace(-10, 10, 400))
    for i in range(1, len(seqX)):
        pset.samplingLVS(sam)
        pset.predictSeq(i, rans[i])
        pset.updateSeq(seqO[i])
        seqLVS.append(pset.getCurrentVal())
    timeLVS = time.clock() - timeLVS

    # VIS
    seqVIS = [init_val]
    timeVIS = time.clock()
    pset = ParticleSet(np.linspace(-10, 10, 400))
    for i in range(1, len(seqX)):
        pset.samplingVIS(sam)
        pset.predictSeq(i, rans[i])
        pset.updateSeq(seqO[i])
        seqVIS.append(pset.getCurrentVal())
    timeVIS = time.clock() - timeVIS

    fig = MapFigure(Map2D(200, 200))
    index = np.arange(0, num, 1)
    print len(index), len(seqX)
    print PFSim.getRMSE(seqX, seqR)
    print PFSim.getRMSE(seqX, seqLVS)
    print PFSim.getRMSE(seqX, seqVIS)
    print timeSIS, timeLVS, timeVIS

    l1 = fig.drawRadarPoints(index, seqX, 'ro-')
    l2 = fig.drawRadarPoints(index, seqR, 'm<:', 1.5)
    l3 = fig.drawRadarPoints(index, seqLVS, 'c<:', 1.5)
    l4 = fig.drawRadarPoints(index, seqVIS, 'g*--', 1.5)
    plt.legend([l1, l2, l3, l4], [u'True', u'SIS', 'LVS', 'VIS'],
               loc='upper right')
    fig.setXYLabel(u'数据编号', u'距离/mm')
    #print seqR
    fig.showFigure()
Ejemplo n.º 7
0
def __TestRadarDrawFunc():
    # 创建一个大地图
    map = Map2D(2000, 2000)
    # 添加两个矩形障碍物
    map.addFeature(
        Map2D.Feature(Map2D.Feature.rectangle, [100, 500, 500, 1400]))
    map.addFeature(
        Map2D.Feature(Map2D.Feature.rectangle, [1400, 600, 600, 1200]))
    # 创建雷达类&&获取位置点
    radar = Radar2D([0, math.pi], 510, 5600, 1, 5)
    radar_pos = radar.getMeasureData(map, [1000, 0, 0])
    # 绘制地图
    fig = MapFigure(map)
    fig.drawMapByFeatures()
    fig.drawRadarPoints([x[0] for x in radar_pos], [x[1] for x in radar_pos],
                        'r.')
    fig.setXYLim(0, 2000, 0, 2000)
    fig.showFigure()
Ejemplo n.º 8
0
def drawParticleSize():
    y = []
    for i in range(len(x)):
        y.append(PFSim.genKLDNum(6400 / x[i]))
    fig = MapFigure(Map2D(200, 200))
    l = fig.drawRadarPoints(x, y, 'bo-')
    fig.setXYLabel(u'栅格单元/cm', u'平均采样数/个')
    #plt.legend([l], [u'KLD'], loc = 'upper right')
    fig.showFigure()
Ejemplo n.º 9
0
 def getRotateModel(self, angle):
     w, h = self.map.m_width, self.map.m_height
     #print w, h
     l = max(w, h) + 100
     l2 = 2 * l
     n_map = Map2D(l2, l2)
     for i in range(0, w):
         for j in range(0, h):
             dis = math.sqrt(i**2 + j**2)
             ang = 0
             if dis != 0:
                 ang = math.acos(i / dis) + angle / 180.0 * math.pi
             nx = dis * math.cos(ang)
             ny = dis * math.sin(ang)
             #print nx, ny
             n_map.setValInMap(
                 l + nx, l + ny,
                 self.map.s_grid[i][j])  #self.map.s_grid[i][j]
     return n_map
Ejemplo n.º 10
0
def sim2(init_val):
    num = 20
    sam = 60
    seqX = PFSim.getSeqX(init_val, num)
    seqO = PFSim.getSeqO(seqX)

    rans = PFSim.genNormalRan(num, sam)

    # SIS-KLD-FIX
    seqFIX1 = [init_val]
    timeSIS = time.clock()
    nums1 = []
    pset = ParticleSet(np.linspace(-20, 20, 4000))
    for i in range(1, len(seqX)):
        toSam = PFSim.genKLDNum(max(1, pset.getOccRoom() / 80))
        nums1.append(toSam)
        pset.samplingSIS(toSam)
        pset.predictSeq(i, rans[i])
        pset.updateSeq(seqO[i])
        seqFIX1.append(pset.getCurrentVal())
    timeSIS = time.clock() - timeSIS

    # SIS-KLD-FIX
    seqFIX2 = [init_val]
    timeFIX2 = time.clock()
    nums2 = []
    pset = ParticleSet(np.linspace(-20, 20, 4000))
    for i in range(1, len(seqX)):
        toSam = PFSim.genKLDNum(max(1, pset.getOccRoom() / 240))
        nums2.append(toSam)
        pset.samplingSIS(toSam)
        pset.predictSeq(i, rans[i])
        pset.updateSeq(seqO[i])
        seqFIX2.append(pset.getCurrentVal())
    timeFIX2 = time.clock() - timeFIX2

    # SIS-KLD-ADA
    seqADA = [init_val]
    timeADA = time.clock()
    nums3 = []
    pset = ParticleSet(np.linspace(-20, 20, 4000))
    for i in range(1, len(seqX)):
        ori = pset.getOccRoom() / 200
        toSam = PFSim.genKLDNum(min(7, ori))
        nums3.append(toSam)
        pset.samplingSIS(toSam)
        pset.predictSeq(i, rans[i])
        pset.updateSeq(seqO[i])
        seqADA.append(pset.getCurrentVal())
    timeADA = time.clock() - timeADA

    fig = MapFigure(Map2D(200, 200))
    index = np.arange(0, num, 1)
    print len(index), len(seqX)
    print nums1
    print nums2
    print nums3
    print timeSIS, PFSim.getRMSE(seqX, seqFIX1)
    print timeFIX2, PFSim.getRMSE(seqX, seqFIX2)
    print timeADA, PFSim.getRMSE(seqX, seqADA)

    l1 = fig.drawRadarPoints(index, seqX, 'ro-')
    l2 = fig.drawRadarPoints(index, seqFIX1, 'm<:', 1.5)
    l3 = fig.drawRadarPoints(index, seqFIX2, 'bd:', 1.5)
    l4 = fig.drawRadarPoints(index, seqADA, 'g*--', 1.5)
    plt.legend([l1, l2, l3, l4], [u'True', u'FIX1', 'FIX2', 'ADA'],
               loc='upper right')
    fig.setXYLabel(u'数据编号', u'距离/mm')
    #print seqR
    fig.showFigure()
Ejemplo n.º 11
0
class Models:
    carModel = [
        Map2D.Feature(Map2D.Feature.ellipse, [20, 20, 40, 40, 0]),  # 车尾
        Map2D.Feature(Map2D.Feature.rectangle, [20, 0, 130, 20, 0]),
        Map2D.Feature(Map2D.Feature.ellipse, [150, 20, 40, 40, 0]),
        Map2D.Feature(Map2D.Feature.rectangle, [0, 20, 170, 25, 0]),
        Map2D.Feature(Map2D.Feature.ellipse, [45, 338, 90, 74, 0]),  #车头
        Map2D.Feature(Map2D.Feature.ellipse, [125, 338, 90, 74, 0]),
        Map2D.Feature(Map2D.Feature.rectangle, [45, 338, 80, 37, 0]),
        Map2D.Feature(Map2D.Feature.erase, [0, 280, 170, 58, 0]),
        Map2D.Feature(Map2D.Feature.rectangle, [0, 320, 170, 18, 0]),
        Map2D.Feature(Map2D.Feature.rectangle, [0, 85, 20, 195, 0]),  # 中间
        Map2D.Feature(Map2D.Feature.rectangle, [150, 85, 20, 195, 0]),
        Map2D.Feature(Map2D.Feature.rectangle, [10, 45, 10, 40, 0]),  #车轮
        Map2D.Feature(Map2D.Feature.rectangle, [150, 45, 10, 40, 0]),
        Map2D.Feature(Map2D.Feature.rectangle, [20, 65, 130, 4, 0]),
        Map2D.Feature(Map2D.Feature.rectangle, [10, 280, 10, 40, 0]),
        Map2D.Feature(Map2D.Feature.rectangle, [150, 280, 10, 40, 0]),
        Map2D.Feature(Map2D.Feature.rectangle, [20, 300, 130, 4, 0]),
    ]
Ejemplo n.º 12
0
        if radar_data[bps[len(bps) - 1]][2] != 0:
            ret_range.append([bps[len(bps) - 1][2], len(radar_data)])
        return ret_range


# test break point method
if __name__ == '__main__':
    # import files
    import sys
    sys.path.append('..')
    from figure.mapFigure import MapFigure
    from map.map2D import Map2D
    from sensor.radar2D import Radar2D
    from split import Split
    #
    map = Map2D(2000, 2000)
    map.addFeature(
        Map2D.Feature(Map2D.Feature.rectangle, [100, 500, 500, 1400]))
    map.addFeature(
        Map2D.Feature(Map2D.Feature.rectangle, [1400, 600, 600, 1200]))

    radar = Radar2D([0, math.pi], 510, 5600, 1, 5)
    radar_pos = [1000, 0, 0]
    radar_data = radar.getMeasureData(map, radar_pos)

    bps = DBSCAN.getBreakPoints(radar_data, radar_pos)
    rag = DBSCAN.getFeatureRange(radar_data, radar_pos)
    for i in range(len(radar_data)):
        print i, radar_data[i]
    print bps
    print rag
Ejemplo n.º 13
0
 def getBasicMap(width=3000, height=3000, feature=Feas.fea1):
     map = Map2D(width, height)
     for i in range(len(feature)):
         map.addFeature(Map2D.Feature(Map2D.Feature.rectangle, feature[i]))
     return map