Пример #1
0
def main():
    rob = Pyroborobo.create("config/boids.properties",
                            world_observer_class=CreateObjectWorldObserver,
                            override_conf_dict={"gInitialNumberOfRobots": "2"})
    rob.start()
    rob.update(1000)
    rob.close()
Пример #2
0
def main():
    rob = Pyroborobo.create("config/unique_meet.properties",
                            controller_class=CounterController,
                            world_observer_class=CounterWorldObserver,
                            override_conf_dict={"gInitialNumberOfRobots": 30})
    rob.start()
    rob.update(3000)
    rob.close()
Пример #3
0
def main():
    rob: Pyroborobo = Pyroborobo.create("config/ball.properties",
                            controller_class=HungryController,
                            object_class_dict={"ball": BallObject})
    # Do not forget to set gMovableObjects in properties
    rob.start()
    print(rob.objects)
    rob.update(10000)
    rob.close()
Пример #4
0
def main():
    rob = Pyroborobo.create("config/moving_objects.properties",
                            object_class_dict={
                                "slowmove": SlowMoveObject,
                                "uwall": UWallObject
                            })
    rob.start()
    rob.update(10000)
    rob.close()
def main():
    print(pyroborobo.__file__)

    pyrob = Pyroborobo.create(
        "config/boids.properties",
        controller_class=TeleportingController,
        override_conf_dict={"gInitialNumberOfRobots": "2"})
    pyrob.start()
    pyrob.update(1000)
    pyrob.close()
Пример #6
0
def main():
    rob = Pyroborobo.create("config/trap.properties",
                            controller_class=SimpleController,
                            object_class_dict={'gate': GateObject, 'switch': SwitchObject})
    rob.start()
    rob.update(1)
    # test for screen shots
    #screen = rob.get_screen()
    #print(np.array(screen, copy=False))
    rob.close()
Пример #7
0
def main():
    global rob

    rob = Pyroborobo.create(
        "config/paintwars.properties",
        controller_class=MyController,
        world_observer_class=MyWorldObserver,
        #        world_model_class=PyWorldModel,
        agent_observer_class=MyAgentObserver,
        object_class_dict={},
        override_conf_dict={"gDisplayMode":
                            simulation_mode}  # defined in paintwars_config
    )

    rob.start()

    print("# ___________________________ #")
    print("#                             #")
    print("#    Welcome to Paint Wars    #")
    print("# ___________________________ #")
    print("#")
    print("#")
    print("# Team RED :", get_name_red_team())
    print("# Team BLUE:", get_name_blue_team())
    print("#")
    print("#")

    rob.update(2001)
    rob.close()

    print("\n=-=-=-=-=-=-=-=-=\n= FINAL RESULTS =\n=-=-=-=-=-=-=-=-=\n")
    #print(scores)
    print("Team Red  :", scores["Team Red"])
    print("Team Blue :", scores["Team Blue"])
    print("tiles left:", scores["nobody"])
    print("")

    s = ""
    if scores["Team Red"] > scores["Team Blue"]:
        s += "# Team RED won! Congratulations " + get_name_red_team() + " ! #"
    elif scores["Team Red"] < scores["Team Blue"]:
        s += "# Team BLUE won! Congratulations " + get_name_blue_team(
        ) + " ! #"
    else:
        s += "Draw! (no winner)"

    print(len(s) * "#")
    print(s)
    print(len(s) * "#")
    print("")
Пример #8
0
def main():
    rob = Pyroborobo.create("config/talking_robots.properties",
                            controller_class=TalkingController,
                            object_class_dict={'_default': ResourceObject, 'select': SelectObject}
                            )
    rob.start()
    rob.update(1)
    print("Hello, welcome to demo 1")
    print("Press P to pause the simulation")
    print("Click on a robot to know more info about him")
    print("The orange object can only be activated by the robot #9")
    print("have fun")
    should_quit = rob.update(1000)
    rob.close()
Пример #9
0
def main():
    global rob

    rob = Pyroborobo.create(
        "config/pacman.properties",
        controller_class=MyController,
        world_observer_class=MyWorldObserver,
#        world_model_class=PyWorldModel,
        agent_observer_class=MyAgentObserver,
        object_class_dict={'gate': GateObject, 'switch': SwitchObject, 'ball': BallObject}
        #,override_conf_dict={"gNbOfInitialRobots": 30} # NOT IMPLEMENTED
    )
    rob.start()
    rob.update(30000)
    rob.close()
Пример #10
0
def main():
    rob = Pyroborobo.create("config/medea.properties",
                            controller_class=MedeaController,
                            override_conf_dict={
                                "gVerbose": "True",
                                "gDisplayMode": "2"
                            })
    rob.start()
    for i in range(10):
        print("start timer")
        curtime = perf_counter()
        should_quit = rob.update(1000)
        print(perf_counter() - curtime)
        if should_quit:
            break
    rob.close()
def main():
    global rob

    rob = Pyroborobo.create(
        "config/paintwars.properties",
        controller_class=MyController,
        world_observer_class=MyWorldObserver,
        #        world_model_class=PyWorldModel,
        agent_observer_class=MyAgentObserver,
        object_class_dict={}
        , override_conf_dict={"gInitialNumberOfRobots": number_of_robots, "gDisplayMode": simulation_mode}
    )

    rob.start()

    rob.update(1000000)
    rob.close()
Пример #12
0
def main():
    nbgen = 10000
    nbiterpergen = 400
    rob: Pyroborobo = Pyroborobo.create(
        "config/pywander_pyobj.properties",
        controller_class=EvolController,
        agent_observer_class=EvolObserver,
        object_class_dict={'gate': GateObject, 'switch': SwitchObject}
    )

    rob.start()
    for igen in range(nbgen):
        print("*" * 10, igen, "*" * 10)
        stop = rob.update(nbiterpergen)
        if stop:
            break
        weights = get_weights(rob)
        fitnesses = get_fitnesses(rob)

        new_weights = fitprop(weights, fitnesses)
        apply_weights(rob, new_weights)
        reset_agent_observers(rob)
        pass

    def receive_writer(self, writer):
        self.writer = writer

    def step_post(self):
        if self.writer:
            writer.writerow({"it": self.rob.iterations,
                             "id": self.controller.id,
                             "x": self.controller.absolute_position[0],
                             "y": self.controller.absolute_position[1]})

if __name__ == "__main__":
    import os
    rob = Pyroborobo.create("config/pywander.properties",
                            controller_class=SimpleController,
                            agent_observer_class=LogAgentObserver,
                            override_conf_dict={"gBatchMode": True, "gDisplayMode": 2})
    rob.start()
    sdl_driver = os.getenv("SDL_VIDEODRIVER")
    if sdl_driver != "dummy":
        print("WARNING: You should set SDL_VIDEODRIVER=dummy to run me on a cluster")
        print("SDL_VIDEODRIVER=dummy python simple_batchmode_example.py")
    with open("logs/simple_pos_log.txt", "w") as f:
        writer = DictWriter(f, ["it", "id", "x", "y"])
        writer.writeheader()
        for agobs in rob.agent_observers:
            agobs.receive_writer(writer)
        rob.update(1000)
    # and now with a gzip file
    with gzip.open("logs/simple_pos_log2.txt.gz", "wt") as f:  # write a gzip file in text mode, see doc of gzip
        writer = DictWriter(f, ["it", "id", "x", "y"])
Пример #14
0
from pyroborobo import DistAwareController, Pyroborobo


class MyCustomDistAwareController(DistAwareController):
    def __init__(self, world_model):
        # Obligatory call to super.__init__ to avoid segfault
        DistAwareController.__init__(self, world_model)
        print("Hello, I'm a custom DistAwareController")
        self.rob = Pyroborobo.get()

    def step(self):
        self.set_translation(1)
        self.set_rotation(0.01)
        nbrob = len(self.rob.controllers)

        next_id = (self.id + 1) % nbrob
        dist = self.get_distance_to_robot(next_id)
        print(f"I am {dist} pixel from {next_id}")


if __name__ == "__main__":
    rob = Pyroborobo.create("config/pywander_12sensors.properties",
                            controller_class=MyCustomDistAwareController)
    rob.start()
    rob.update(1000)
    rob.close()
Пример #15
0
    def step(self):  # step is called at each time step
        self.set_translation(1)  # Let's go forward
        self.set_rotation(0)
        # Now, our world_model object is a PyWorldModel, we can have access to camera_* properties
        camera_dist = self.get_all_distances()
        camera_rob_id = self.get_all_robot_ids()
        if camera_dist[1] < 1:  # if we see something on our right
            if camera_rob_id[1] != -1:  # and it's a robot
                self.set_rotation(-self.rot_speed)  # go hug it
            else:  # if it's an object
                self.set_rotation(self.rot_speed)  # turn left
        elif camera_dist[2] < 1:  # or in front of us
            if camera_rob_id[2] != -1:  # and it's a robot
                self.set_rotation(0)  # go hug it
            else:  # if object
                self.set_rotation(self.rot_speed)  # avoid it
        elif camera_dist[3] < 1:  # Otherwise, if we see something on our left
            if camera_rob_id[3] != -1:  # and it's a robot
                self.set_rotation(self.rot_speed)  # go hug the robot
            else:
                self.set_rotation(-self.rot_speed)  # avoid it (turn right)


if __name__ == "__main__":
    rob = Pyroborobo.create("config/simple.properties",
                            controller_class=GatherController)
    rob.start()
    rob.update(10000)
    rob.close()
Пример #16
0
        if np.random.random() < 0.001 * 0.0001:
            self.hide()
            self.relocate()
            self.show()

    def is_pushed(self, id_, speed):
        super().is_pushed(id_, speed)
        #print(f"I'm kicked by {id_}")

    def inspect(self, prefix):
        return f"[INSPECT] Ball #{self.id}\n"


# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

if __name__ == "__main__":

    rob = Pyroborobo.create(
        "config/robot_40sensors.properties",
        controller_class=BoidsController,
        world_observer_class=MyWorldObserver,
        #agent_observer_class=MyAgentObserver,
        object_class_dict={},
        override_conf_dict={
            "gDisplayMode": simulation_mode_at_startup,
            "gRobotDisplayFocus": True
        })
    rob.start()
    rob.update(100000)
    rob.close()
Пример #17
0
def main():
    nbgen = 150
    nbiterpergen = 3000
    lambda_ = 20
    nb_repet = 3
    mu = 5
    bestFit = 0
    data = []
    data2 = []
    performance_list = []
    performance_list_ded = []
    performance_list2 = []
    performance_list_ded2 = []
    rob: Pyroborobo = Pyroborobo.create("config/test.properties",
                                        controller_class=EvolController,
                                        world_observer_class=WorldObserverEvol,
                                        object_class_dict={
                                            'uwall': UWallObject,
                                            'switch': SwitchObject,
                                            'feuille': Feuille
                                        },
                                        override_conf_dict={
                                            "gBatchMode": True,
                                            "gDisplayMode": 2,
                                            "gInitialNumberOfRobots": lambda_
                                        })

    rob.start()
    # un genome : une solution candidate , poids du réseau
    all_genomes = init_from_file(rob, "HallOfFame_copie", lambda_)
    debug = []
    for igen in range(nbgen):
        """
        if igen in gen_to_track:
            rob.init_trajectory_monitor()  """# log trajectory for all agents
        print("*" * 10, igen, "*" * 10)
        ## Pour tester une solution candidate(les poids) il faudrait faire
        ## une moyenne sur plusieurs expériences et pas que sur une
        s = ("génération:", igen)
        debug.append(s)
        performance_gen_ref = []
        performance_gen_ded = []
        i = 0
        for genome in all_genomes:
            i = i + 1
            s2 = ("genome:", i)
            #debug.append(s2)
            # print("*" * 10,"genome:",i, "*" * 10)
            # print("genome",genome)
            performance_gen_ref_repet = []
            performance_gen_ded_repet = []
            for z in range(nb_repet):

                apply_weight_clonal(rob, genome)
                #print("weight:",get_weights(rob))

                #tps1 = time.time()
                stop = rob.update(nbiterpergen)
                if stop:
                    break
            # tps2 = time.time()
            #print("temps test genome :",tps2 - tps1)
            #fitness dediee de chaque agent/robot
                fitnesses_ded_list = get_fitnesses_ded(rob)
                #fitness dediee totale pour ce genome
                fitness_ded_genome = np.sum(fitnesses_ded_list)
                performance_gen_ded_repet.append(fitness_ded_genome)
                performance_gen_ref_repet.append(get_reference_function(rob))
                reset_world_observer(rob)
                reset_agent_controllers(rob)

            performance_gen_ded.append(np.mean(performance_gen_ded_repet))
            performance_gen_ref.append(np.mean(performance_gen_ref_repet))

        fitness_max = np.max(performance_gen_ded)
        score_max = np.max(performance_gen_ref)
        s = (igen, fitness_max)
        s2 = (igen, score_max)
        data.append(s)
        data2.append(s2)

        if bestFit < np.mean(performance_gen_ded):
            bestFit = np.mean(performance_gen_ded)

        performance_list_ded2.append(bestFit)
        performance_list2.append(np.mean(performance_gen_ref))

        performance_list_ded.append(performance_gen_ded)
        performance_list.append(performance_gen_ref)

        #on garde le meilleur genome en memoire
        updateHoF(all_genomes, performance_gen_ref)

        #ou utiliser fitprop ici ou tout algo de selection de type ES
        #print("performance dédiée:",performance_gen_ded)
        all_genomes = mu_comma_lambda_nextgen(all_genomes, performance_gen_ded,
                                              mu, lambda_)
        """
        if igen in gen_to_track:
            rob.save_trajectory_image("all_agents for gen"+str(igen))"""

        if (igen % 10 == 0):

            plt.plot(np.arange(len(performance_list2)), performance_list2)
            plt.xlabel("génération")
            plt.ylabel("Score")
            plt.title("graphe_evolution_score")
            plt.savefig("graphe_de_performance_ref")
            plt.figure()

            plt.plot(np.arange(len(performance_list_ded2)),
                     performance_list_ded2)
            plt.xlabel("génération")
            plt.ylabel("Fitness")
            plt.title("graphe_evolution_fitness")
            plt.savefig("graphe_de_performance_ded")
            plt.figure()

    plt.plot(np.arange(len(performance_list2)), performance_list2)
    plt.xlabel("génération")
    plt.ylabel("Score")
    plt.title("graphe_evolution_score")
    plt.savefig("graphe_de_performance_ref")
    plt.figure()

    plt.plot(np.arange(len(performance_list_ded2)), performance_list_ded2)
    plt.xlabel("génération")
    plt.ylabel("Fitness")
    plt.title("graphe_evolution_fitness")
    plt.savefig("graphe_de_performance_ded")
    plt.figure()

    with open('score.csv', 'w+') as out:
        csv_out = csv.writer(out)
        for row in data2:
            csv_out.writerow(row)

    with open('fitness.csv', 'w+') as out:
        csv_out = csv.writer(out)
        for row in data:
            csv_out.writerow(row)
Пример #18
0

class SimpleController(Controller):
    def __init__(self, world_model):
        # It is *mandatory* to call the super constructor before any other operation to link the python object to its C++ counterpart
        Controller.__init__(self, world_model)
        assert self.nb_sensors == 8, "SimpleController only works with 8 sensors"
        print("I'm a Python controller")

    def reset(self):
        print("I'm initialised")

    def step(self):  # step is called at each time step
        self.set_translation(1)  # Let's go forward
        self.set_rotation(0)
        # Now, our world_model object is a PyWorldModel, we can have access to camera_* properties
        if (self.get_distance_at(1) < 1  # if we see something on our left
                or self.get_distance_at(2) < 1):  # or in front of us
            self.set_rotation(0.5)  # turn right
        elif self.get_distance_at(
                3) < 1:  # Otherwise, if we see something on our right
            self.set_rotation(-0.5)  # turn left


if __name__ == "__main__":
    rob = Pyroborobo.create("config/pywander.properties",
                            controller_class=SimpleController)
    rob.start()
    rob.update(1000)
    rob.close()
Пример #19
0
def main():
    rob = Pyroborobo.create("config/medea.properties",
                            controller_class=MedeaController)
    rob.start()
    rob.update(10000)
    rob.close()
Пример #20
0
        self.set_translation(1)  # Let's go forward
        self.set_rotation(0)
        # Now, our world_model object is a PyWorldModel, we can have access to camera_* properties
        if (self.get_distance_at(1) < 1  # if we see something on our left
                or self.get_distance_at(2) < 1):  # or in front of us
            self.set_rotation(0.5)  # turn right
        elif self.get_distance_at(
                3) < 1:  # Otherwise, if we see something on our right
            self.set_rotation(-0.5)  # turn left


if __name__ == "__main__":
    import os
    os.makedirs("logs/screenshot_example", exist_ok=True)
    rob = Pyroborobo.create(
        "config/simple.properties",
        controller_class=SimpleController,
        override_conf_dict={"gLogDirectoryname": "logs/screenshot_example"})
    rob.start()

    rob.update(100)
    rob.save_screenshot("full_screenshot_for_iter_100")

    rob.init_trajectory_monitor()  # log trajectory for all agents
    rob.update(100)
    rob.save_trajectory_image("all_agents")

    rob.init_trajectory_monitor(0)  # log the trajectory for agent with id 0
    rob.update(100)
    rob.save_trajectory_image("agent_0")

    # let's make a movie
Пример #21
0
def main():
    global rob, arenaIndexSelector, invertStartingPosition, simulation_mode

    print(f"Name of the script   : {sys.argv[0]=}")
    print(f"Arguments            : {sys.argv[1:]=}")

    if len(sys.argv) == 4:
        print("## Using command-line parameters ##")
        print("arena          :", int(sys.argv[1]))
        arenaIndexSelector = int(sys.argv[1])
        print("invert position:", sys.argv[2])
        invertStartingPosition = True if sys.argv[2] == "True" or sys.argv[
            2] == "true" else False
        print("simulation mode:", int(sys.argv[3]))
        simulation_mode = int(sys.argv[3])
    elif len(sys.argv) > 1:
        print("Syntax :", sys.argv[0],
              "arena_number invert_position simulation_mode")
        print("Example:", sys.argv[0], "3 True 1")
        exit(0)

    rob = Pyroborobo.create(
        "config/paintwars.properties",
        controller_class=MyController,
        world_observer_class=MyWorldObserver,
        #        world_model_class=PyWorldModel,
        agent_observer_class=MyAgentObserver,
        object_class_dict={},
        override_conf_dict={"gDisplayMode":
                            simulation_mode}  # defined in paintwars_config
    )

    rob.start()

    print("# ___________________________ #")
    print("#                             #")
    print("#    Welcome to Paint Wars    #")
    print("# ___________________________ #")
    print("#")
    print("#")
    print("# Team RED vs. Team BLUE !")
    print("#")
    print("#")

    rob.update(2001)
    rob.close()

    print("\n=-=-=-=-=-=-=-=-=\n= FINAL RESULTS =\n=-=-=-=-=-=-=-=-=\n")
    #print(scores)
    print("Team Red  :", scores["Team Red"])
    print("Team Blue :", scores["Team Blue"])
    print("tiles left:", scores["nobody"])
    print("")

    s = ""
    if scores["Team Red"] > scores["Team Blue"]:
        s += "# Team RED won! Congratulations ! #"
        winner = "Team Red"
    elif scores["Team Red"] < scores["Team Blue"]:
        s += "# Team BLUE won! Congratulations ! #"
        winner = "Team Blue"
    else:
        s += "Draw! (no winner)"
        winner = "no winner"

    print(len(s) * "#")
    print(s)
    print(len(s) * "#")
    print("")

    summary = "arena=" + str(arenaIndexSelector) + " invert_position=" + str(
        invertStartingPosition) + " winner=\"" + winner + "\""
    if len(sys.argv) == 4:
        print(summary)
Пример #22
0
        self.cur_regrow = 0

    def step(self):
        if self.triggered:
            self.cur_regrow -= 1
            if self.cur_regrow <= 0 and self.can_register():
                self.show()
                self.register()
                self.triggered = False

    def open(self):
        self.triggered = True
        self.hide()
        self.unregister()
        self.cur_regrow = self.regrow_time

    def inspect(self, prefix=""):
        return "I'm a gate!"


if __name__ == "__main__":
    rob = Pyroborobo.create("config/pywander_pyobj.properties",
                            controller_class=SimpleController,
                            object_class_dict={
                                'gate': GateObject,
                                'switch': SwitchObject
                            })
    rob.start()
    rob.update(3000)
    rob.close()
        super().__init__(-1)
        self.set_color(0, 0, 255)
        self.radius = 10
        self.footprint_radius = 20
        self.relocate()
        self.show()

    def step(self):
        pass

    def reset(self):
        self.register()

    def inspect(self, prefix):
        return f"Working as always boys, #{self.id}"


if __name__ == "__main__":
    rob = Pyroborobo.create("config/empty_arena.properties",
                            controller_class=SimpleController,
                            override_conf_dict={
                                "gInitialNumberOfRobots": 1,
                                "gNbOfPhysicalObjects": 1
                            })
    rob.start()
    for i in range(100):
        quit = rob.update(100)
        obj = rob.add_object(SimpleDisk())
        if quit: break
    rob.close()
Пример #24
0
            if self.get_object_at(3) != -1 and not must_flee:
                self.set_rotation(self.rotspeed)  # turn left
            else:
                self.set_rotation(-self.rotspeed)
                must_flee = True

    def inspect(self, prefix):
        output = ""
        for i in range(self.nb_sensors):
            output += f"""sensor {i}:
    dist: {self.get_distance_at(i)}
    id: {self.world_model.camera_objects_ids[i]}
    nbobjs: {len(self.rob.objects)}
    is_object: {self.get_object_at(i)}
    is_robot: {self.get_robot_id_at(i)}
    is_wall: {self.get_wall_at(i)}\n\n"""
        return output


if __name__ == "__main__":
    rob = Pyroborobo.create("config/pywander_pyobj_resource.properties",
                            controller_class=HungryController,
                            object_class_dict={
                                '_default': ResourceObject,
                                'gate': GateObject,
                                'switch': SwitchObject
                            })
    rob.start()
    rob.update(10000)
    rob.close()
Пример #25
0
        self.orientation = 1
        print("I'm a Python controller")

    def reset(self):
        print("I'm initialised")

    def step(self):  # step is called at each time step
        self.set_translation(1)  # Let's go forward

        if np.random.random(
        ) < 0.01:  # Change orientation every 100 frames or so
            self.orientation = -self.orientation

        self.set_rotation(self.wander_rot_speed * self.orientation)
        # Now, our world_model object is a PyWorldModel, we can have access to camera_* properties
        camera_dist = self.get_all_distances()
        if camera_dist[1] < 1:  # if we see something on our right
            self.set_rotation(self.rot_speed)  # go avoid it
        elif camera_dist[2] < 1:  # or in front of us
            self.set_rotation(self.rot_speed)  # avoid it
        elif camera_dist[3] < 1:  # Otherwise, if we see something on our left
            self.set_rotation(-self.rot_speed)  # avoid it (turn right)


if __name__ == "__main__":
    rob = Pyroborobo.create("config/simple.properties",
                            controller_class=RepulseController)
    rob.start()
    rob.update(10000)
    rob.close()
Пример #26
0
        camera_dist = self.get_all_distances()
        camera_id = self.get_all_robot_ids()
        camera_angle_rad = self.get_all_sensor_angles()
        camera_angle = camera_angle_rad * 180 / np.pi
        own_orientation = self.absolute_orientation
        for i in np.argsort(
                camera_dist):  # get the index from the closest to the farthest
            if camera_angle[i] < -270 or camera_angle[i] > 270:
                continue
            else:
                dist = camera_dist[i]
                if dist < self.repulse_radius:
                    if camera_angle[i] != 0:
                        self.set_rotation(-camera_angle_rad[i] / np.pi)
                    else:
                        self.set_rotation(1)
                elif dist < self.orientation_radius and camera_id[i] != -1:
                    orient_angle = self.get_robot_relative_orientation_at(i)
                    self.set_rotation(orient_angle / np.pi)
                elif dist < self.camera_max_range and camera_id[i] != -1:
                    self.set_rotation(camera_angle_rad[i] / np.pi)
                break  # stop


if __name__ == "__main__":
    rob = Pyroborobo.create("config/boids.properties",
                            controller_class=BoidsController)
    rob.start()
    rob.update(100000)
    rob.close()
Пример #27
0
            for i in range(self.nb_sensors):
                print(f"Sensor {i}:")
                print(f"\tdist: {self.get_distance_at(i)}")
                print(f"\tis object: {self.get_object_at(i) != -1}")
                print(f"\tis_wall: {self.get_wall_at(i)}")
                print(f"\tis robot: {self.get_robot_id_at(i) != -1}")
                is_robot = self.get_robot_id_at(i) != -1
                is_wall = self.get_wall_at(i)
                if is_robot:
                    robid = self.get_robot_id_at(i)
                    print(f"\trobot id: {robid}")
                    print(
                        f"\trobot's controller: {self.get_robot_controller_at(i)}"
                    )
                    ctl = self.get_robot_controller_at(i)
                    print(
                        f"\tThis robot is at {ctl.absolute_position} with orientation {ctl.absolute_orientation}."
                    )
                elif self.get_object_at(i) != -1:  # then it's an object
                    print(
                        f"\tphysical object instance: {self.get_object_instance_at(i)}"
                    )


if __name__ == "__main__":
    rob = Pyroborobo.create("config/simple.properties",
                            controller_class=TutorialController)
    rob.start()
    rob.update(10000)
    rob.close()
Пример #28
0
            1] > 1000  # id is a wall or a robot (id > 1000)
        must_avoid_r = ids[3] == WALL_ID or ids[
            3] > 1000  # id is a wall or a robot (id > 1000)
        must_avoid_f = ids[2] == WALL_ID or ids[2] > 1000
        if is_resource_l:
            self.world_model.rotation = -10 + np.random.normal(0, 4)
        if is_resource_r:
            self.world_model.rotation = 10 + np.random.normal(0, 4)

        # even if there are resources, avoid walls if too close (half dist)
        if (dists[2] < maxdisthalf and must_avoid_f)\
                or (dists[1] < maxdisthalf and must_avoid_l):
            self.world_model.rotation = 10 + np.random.normal(0, 4)
        if dists[3] < maxdisthalf and must_avoid_r:
            self.world_model.rotation = -10 + np.random.normal(0, 4)


rob = Pyroborobo.create("config/wanderer.properties", None, WanderController,
                        PyWorldModel, None, {
                            "gate": GateObject,
                            "switch": SwitchObject
                        }, {})

if __name__ == "__main__":
    rob.start()
    nbgen = 1
    for i in range(nbgen):
        rob.update(10000)
    print("over")
    Pyroborobo.close()