コード例 #1
0
ファイル: test_env.py プロジェクト: oak-bay/sim
    def test_step_event(self):
        """ 测试运行事件. """
        env = Environment()

        evt = MockEvent()
        env.step_events.append(evt)

        env.run()
        self.assertAlmostEqual(evt.time_records[0], 0.0)
        self.assertAlmostEqual(evt.time_records[-1], 10.0)
コード例 #2
0
ファイル: test_env.py プロジェクト: oak-bay/sim
    def test_access(self):
        env = Environment()

        obj1 = env.add(MockEntity())
        obj2 = env.add(MockEntity())

        env.run()

        self.assertAlmostEqual(obj1.value, 101.0 / 2)
        self.assertAlmostEqual(obj2.value, 101.0 / 2)
コード例 #3
0
    def test_scheduler_fix(self):
        env = Environment()
        counter = Counter()
        env.step_events.append(EventScheduler(evt=counter, dt=0.1))
        env.run()
        self.assertTrue(counter.value == 101)

        counter2 = Counter()
        env.step_events.append(EventScheduler(evt=counter2, dt=0.2))
        env.run()
        self.assertTrue(counter2.value == 51)
コード例 #4
0
def print_uav_value(env: Environment, uav: Uav):
    t, _ = env.time_info
    if uav.is_alive():
        print(
            f'{t:.2f} : Uav-{uav.id} - {uav.control.state} {uav.position} {uav.velocity}'
        )


def print_radar_value(env: Environment, radar: Radar):
    t, _ = env.time_info
    if radar.current_results:
        print(f'{t:.2f} : Radar-{radar.id} - {radar.current_results}')


if __name__ == '__main__':
    env = Environment()
    env.step_events.append(print_time)

    uav = env.add(Uav(track=[[0, 100, 10], [100, 100, 10]], speed=2.5))
    env.step_events.append(partial(print_uav_value, uav=uav))

    # uav2 = env.add(Uav(track=[[0, 0, 10], [10, 10, 10]], speed=2.5))
    # env.step_events.append(partial(print_uav_value, uav=uav2))

    radar = env.add(Radar(pos=[0, 0, 0], out='ar', rate=2, r_range=[None,
                                                                    150]))
    env.step_events.append(partial(print_radar_value, radar=radar))

    env.run(stop=40)
コード例 #5
0
ファイル: multi_body.py プロジェクト: oak-bay/sim
G = 1.0e3


class GravityPolicy(MovePolicy):
    """ 引力策略. """

    def access(self, others):
        assert self.parent
        f0 = vec([0, 0])
        _, dt = self.parent.env.time_info
        for obj in others:
            r = dist(self.parent.pos, obj.pos)
            f = unit(obj.pos - self.parent.pos) * G * obj.m / (r ** 2)
            f0 = f0 + f
        self.parent.vel += f0 * dt


if __name__ == '__main__':
    env = Environment()

    recorder = PropRecorder(prop_name='pos')
    env.step_events.append(recorder)

    earth = env.add(MoveEntity(props={'m': 2}, pos=[-100, 0], vel=[0, -1], policy=GravityPolicy()))
    moon = env.add(MoveEntity(props={'m': 1}, pos=[100, 0], vel=[0, 1], policy=GravityPolicy()))

    env.run(stop=2000.)

    plot.plot_xy_dict(recorder.records)
コード例 #6
0
ファイル: uav_and_jam.py プロジェクト: oak-bay/sim
    else:
        print(f'{t:.2f} :')


def power_switch(env: Environment, jammer, on=None):
    t, _ = env.time_info
    if on is None:
        jammer.power_on = not jammer.power_on
    else:
        jammer.power_on = on
    print(f'{t:.2f} : jammer {jammer.power_on}')


if __name__ == "__main__":
    env = Environment()
    uav = env.add(Uav(track=[[1, 1], [11, 1], [11, 11]], speed=2.5))
    jammer1 = env.add(Jammer())
    jammer2 = env.add(Jammer(kind='gps'))

    uav_print = partial(print_uav_value, uav=uav)
    env.step_events.append(uav_print)

    # jammer1_switch = partial(power_switch, jammer=jammer1, on=None)
    # env.step_events.append(EventScheduler(evt=jammer1_switch, times=[2, 4]))

    jammer2_switch = partial(power_switch, jammer=jammer2, on=None)
    env.step_events.append(EventScheduler(evt=jammer2_switch, times=[3, 5]))

    env.run(stop=20)
    pass
コード例 #7
0
 def test_scheduler_rand(self):
     env = Environment()
     counter = Counter()
     env.step_events.append(EventScheduler(evt=counter, rand=[0.1, 1]))
     env.run()
     self.assertTrue(counter.value > 10)
コード例 #8
0
 def test_scheduler_times(self):
     env = Environment()
     counter = Counter()
     env.step_events.append(EventScheduler(evt=counter, times=[1, 2, 5, 11]))
     env.run()
     self.assertTrue(counter.value == 3)
コード例 #9
0
ファイル: test_env.py プロジェクト: oak-bay/sim
    def test_run(self):
        """ 测试运行. """
        env = Environment()

        env.run(stop=20.0)
        self.assertAlmostEqual(env.time_info[0], 20.0)
        env.run(stop=30.0)
        self.assertAlmostEqual(env.time_info[0], 30.0)
        env.run()
        self.assertAlmostEqual(env.time_info[0], 30.0)

        obj = env.add(MockEntity())
        env.run(stop=10.0)
        self.assertTrue(obj.value == 101)

        env.run(stop=10.0, step=1.0)
        self.assertTrue(obj.value == 11)

        env.run(start=5.0, stop=10.0, step=0.1)
        self.assertTrue(obj.value == 51)
コード例 #10
0
class TrackPolicy(MovePolicy):
    """ 跟踪策略. """
    def __init__(self, target=None):
        super().__init__()
        self.target = target

    def access(self, others):
        assert self.parent
        for obj in others:
            if self.target == obj.id:
                speed = dist(self.parent.vel)
                self.parent.vel = unit(obj.pos - self.parent.pos) * speed
                break


if __name__ == '__main__':
    env = Environment()

    recorder = PropRecorder(prop_name='pos', show=True)
    env.step_events.append(recorder)

    plane = env.add(MoveEntity(pos=[0, 0], vel=[1, 0]))
    missile = env.add(
        MoveEntity(pos=[0, -10],
                   vel=[0, 2],
                   policy=TrackPolicy(target=plane.id)))

    env.run()

    plot_xy_dict(recorder.records, '*')