Logistieke Robots/les 6: verschil tussen versies
Geen bewerkingssamenvatting |
Geen bewerkingssamenvatting |
||
Regel 2: | Regel 2: | ||
==Les 6 - Robots van elkaar laten leren == | ==Les 6 - Robots van elkaar laten leren == | ||
Voordat we naar les 6 gaan, bespreken we een aantal verbeteringen in de huidige code zodat we er vervolgens makkelijker mee kunnen werken. Deze | Voordat we naar les 6 gaan, bespreken we een aantal verbeteringen in de huidige code zodat we er vervolgens makkelijker mee kunnen werken. Deze verandering moet je ook doorvoeren als je door wilt werken met je huidige bestand. Je mag ook les 6 starten met de file "warehouse_team_collission.blend". | ||
==Verbetering code na les 5 == | ==Verbetering code na les 5 == | ||
We gaan een functie set_articles() maken zodat er een array aangemaakt | We gaan een functie set_articles() maken zodat er een array aangemaakt | ||
wordt met de artikelen. | wordt met de artikelen. | ||
<syntaxhighlight lang="Python" line> | |||
def get_order(): | |||
# get articles from central controller | |||
set_articles() | |||
print(robot["articles"]) | |||
# set game properties | |||
robot["article_number"] = 1 | |||
robot["target_desk"] = False | |||
# distance variables | |||
robot["distance"] = 0.0 | |||
robot["location1"] = robot.position[0] | |||
robot["location2"] = robot.position[1] | |||
robot["location3"] = robot.position[2] | |||
</syntaxhighlight> | |||
Vervang ook de declaratie van robot[“robot_id”] door onderstaande. De central controller hoeft zo niet meer te vertellen om welke robot het gaat. | |||
<syntaxhighlight lang="Python" line> | |||
# get the current controller | |||
cont = bge.logic.getCurrentController() | |||
robot = cont.owner | |||
robot["robot_id"] = robot.name[6:] | |||
</syntaxhighlight> | |||
De functie set_articles() ziet er als volgt uit: | |||
<syntaxhighlight lang="Python" line> | |||
def set_articles(): | |||
message = start_sens.bodies[0][1:] | |||
order_length = len(re.findall(r'[^\s ]+', message)) | |||
robot["articles"] = [""]*order_length | |||
for i in range(order_length): | |||
robot["articles"][i] = re.findall(r'[^\s ]+', message)[i] | |||
</syntaxhighlight> | |||
De main() functie ziet er nu overzichtelijker uit: | |||
<syntaxhighlight lang="Python" line> | |||
def main(): | |||
if robot["target_desk"] == False: | |||
shelf_sens.propName = "Shelf" | |||
if robot["article_number"] <= len(robot["articles"]): | |||
track_act.target = robot["articles"][robot["article_number"]-1] | |||
else: | |||
shelf_sens.propName = "Desk" | |||
track_act.target = "Desk_" + str(robot["robot_id"]) | |||
if shelf_sens.positive: | |||
if robot["target_desk"] == True: | |||
robot["article_number"] += 1 | |||
if robot["article_number"] == len(robot["articles"]) +1: | |||
cont.deactivate(track_act) | |||
print("done robot "+ str(robot["robot_id"])) | |||
GameLogic.sendMessage("Done", robot["robot_id"] , "Ground", "") | |||
GameLogic.sendMessage("Done", str(robot["distance"]) , "Ground", "") | |||
robot["target_desk"]= not robot["target_desk"] | |||
</syntaxhighlight> | |||
We veranderen ook de physics van de robot zodat de robot niet om kan vallen. Ga op de robot staan en ga in het rechter window naar: | |||
[[Bestand:balk_physics.png]] | |||
Verander dan de form factor in 0.0: | |||
[[Bestand:form_factor.png]] | |||
Doe dit voor beide robots. |
Versie van 9 dec 2014 14:55
Les 6 - Robots van elkaar laten leren
Voordat we naar les 6 gaan, bespreken we een aantal verbeteringen in de huidige code zodat we er vervolgens makkelijker mee kunnen werken. Deze verandering moet je ook doorvoeren als je door wilt werken met je huidige bestand. Je mag ook les 6 starten met de file "warehouse_team_collission.blend".
Verbetering code na les 5
We gaan een functie set_articles() maken zodat er een array aangemaakt wordt met de artikelen.
def get_order():
# get articles from central controller
set_articles()
print(robot["articles"])
# set game properties
robot["article_number"] = 1
robot["target_desk"] = False
# distance variables
robot["distance"] = 0.0
robot["location1"] = robot.position[0]
robot["location2"] = robot.position[1]
robot["location3"] = robot.position[2]
Vervang ook de declaratie van robot[“robot_id”] door onderstaande. De central controller hoeft zo niet meer te vertellen om welke robot het gaat.
# get the current controller
cont = bge.logic.getCurrentController()
robot = cont.owner
robot["robot_id"] = robot.name[6:]
De functie set_articles() ziet er als volgt uit:
def set_articles():
message = start_sens.bodies[0][1:]
order_length = len(re.findall(r'[^\s ]+', message))
robot["articles"] = [""]*order_length
for i in range(order_length):
robot["articles"][i] = re.findall(r'[^\s ]+', message)[i]
De main() functie ziet er nu overzichtelijker uit:
def main():
if robot["target_desk"] == False:
shelf_sens.propName = "Shelf"
if robot["article_number"] <= len(robot["articles"]):
track_act.target = robot["articles"][robot["article_number"]-1]
else:
shelf_sens.propName = "Desk"
track_act.target = "Desk_" + str(robot["robot_id"])
if shelf_sens.positive:
if robot["target_desk"] == True:
robot["article_number"] += 1
if robot["article_number"] == len(robot["articles"]) +1:
cont.deactivate(track_act)
print("done robot "+ str(robot["robot_id"]))
GameLogic.sendMessage("Done", robot["robot_id"] , "Ground", "")
GameLogic.sendMessage("Done", str(robot["distance"]) , "Ground", "")
robot["target_desk"]= not robot["target_desk"]
We veranderen ook de physics van de robot zodat de robot niet om kan vallen. Ga op de robot staan en ga in het rechter window naar:
Verander dan de form factor in 0.0:
Doe dit voor beide robots.