From 8d0d50d80f8f27cca27200d34360bcb80a5786c4 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Fri, 16 Aug 2024 16:05:30 +0200 Subject: [PATCH 01/44] Adds the initial conceptual idea, which seems to be working --- demos/playingfield/ceo.py | 37 ++++++++++++++ demos/playingfield/sandcastle.py | 88 ++++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 demos/playingfield/ceo.py create mode 100644 demos/playingfield/sandcastle.py diff --git a/demos/playingfield/ceo.py b/demos/playingfield/ceo.py new file mode 100644 index 000000000..690503cb0 --- /dev/null +++ b/demos/playingfield/ceo.py @@ -0,0 +1,37 @@ +from pycram import World +from sandcastle import param_plan +import traceback +import hashlib +# extension = ObjectDescription.get_file_extension() +# Many Plans in many environments with many robots +# ToDo: Many Plans missing, but this needs function pointers and I am not comfortable with it +# plans=[] +robots =[] +environments=[] +robot_name="pr2.urdf" +environment_name="house_2.urdf" +robots.append(robot_name) +environments.append(environment_name) +environments.append("apartment.urdf") +environments.append("Murphys_Law") + + +works=0 +fails=0 +for robot in robots: + for environment in environments: + print("Trying plan: {} with robot: {} in: {}".format("param_plan", robot, environment)) + try: + param_plan(robot, environment) + works+=1 + print("Successfully!\n Overall successful tries: {}".format(works)) + + except Exception as e: + traceback.print_exc() + hash(e) # Random Error Value (for now) + fails+=1 + print("Fail!\n Overall failed tries: {}".format(fails)) + finally: + World.current_world.exit() + +print("Resume:\nOverall successful tries: {}\nOverall failed tries: {}".format(works,fails)) \ No newline at end of file diff --git a/demos/playingfield/sandcastle.py b/demos/playingfield/sandcastle.py new file mode 100644 index 000000000..910ea5b8f --- /dev/null +++ b/demos/playingfield/sandcastle.py @@ -0,0 +1,88 @@ +from pycram.worlds.bullet_world import BulletWorld +from pycram.designators.action_designator import * +from pycram.designators.location_designator import * +from pycram.designators.object_designator import * +from pycram.datastructures.enums import ObjectType, WorldMode +from pycram.datastructures.pose import Pose +from pycram.process_module import simulated_robot, with_simulated_robot +from pycram.object_descriptors.urdf import ObjectDescription +from pycram.world_concepts.world_object import Object +from pycram.datastructures.dataclasses import Color + +def param_plan(robot_path,environment_path): + world = BulletWorld(WorldMode.GUI) + robot = Object("pr2", ObjectType.ROBOT, robot_path, pose=Pose([1, 2, 0])) + apartment = Object("apartment", ObjectType.ENVIRONMENT, environment_path) + + milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55]), + color=Color(1, 0, 0, 1)) + + pick_pose = Pose([1, -1.78, 0.55]) + + robot_desig = BelieveObject(names=["pr2"]) + apartment_desig = BelieveObject(names=["apartment"]) + + + @with_simulated_robot + def move_and_detect(obj_type): + NavigateAction(target_locations=[Pose([2, -1.89, 0])]).resolve().perform() + + LookAtAction(targets=[pick_pose]).resolve().perform() + + object_desig = DetectAction(BelieveObject(types=[obj_type])).resolve().perform() + + return object_desig + + + with simulated_robot: + ParkArmsAction([Arms.BOTH]).resolve().perform() + + MoveTorsoAction([0.25]).resolve().perform() + + milk_desig = move_and_detect(ObjectType.MILK) + + TransportAction(milk_desig, [Arms.LEFT], [Pose([4.8, 3.55, 0.8])]).resolve().perform() + + # cereal_desig = move_and_detect(ObjectType.BREAKFAST_CEREAL) + # + # TransportAction(cereal_desig, [Arms.RIGHT], [Pose([5.2, 3.4, 0.8], [0, 0, 1, 1])]).resolve().perform() + # + # bowl_desig = move_and_detect(ObjectType.BOWL) + # + # TransportAction(bowl_desig, [Arms.LEFT], [Pose([5, 3.3, 0.8], [0, 0, 1, 1])]).resolve().perform() + # + # # Finding and navigating to the drawer holding the spoon + # handle_desig = ObjectPart(names=["handle_cab10_t"], part_of=apartment_desig.resolve()) + # drawer_open_loc = AccessingLocation(handle_desig=handle_desig.resolve(), + # robot_desig=robot_desig.resolve()).resolve() + # + # NavigateAction([drawer_open_loc.pose]).resolve().perform() + # + # OpenAction(object_designator_description=handle_desig, arms=[drawer_open_loc.arms[0]]).resolve().perform() + # spoon.detach(apartment) + # + # # Detect and pickup the spoon + # LookAtAction([apartment.get_link_pose("handle_cab10_t")]).resolve().perform() + # + # spoon_desig = DetectAction(BelieveObject(types=[ObjectType.SPOON])).resolve().perform() + # + # pickup_arm = Arms.LEFT if drawer_open_loc.arms[0] == Arms.RIGHT else Arms.RIGHT + # PickUpAction(spoon_desig, [pickup_arm], [Grasp.TOP]).resolve().perform() + # + # ParkArmsAction([Arms.LEFT if pickup_arm == Arms.LEFT else Arms.RIGHT]).resolve().perform() + # + # CloseAction(object_designator_description=handle_desig, arms=[drawer_open_loc.arms[0]]).resolve().perform() + + # ParkArmsAction([Arms.BOTH]).resolve().perform() + # + # MoveTorsoAction([0.15]).resolve().perform() + # + # # Find a pose to place the spoon, move and then place it + # spoon_target_pose = Pose([4.85, 3.3, 0.8], [0, 0, 1, 1]) + # placing_loc = CostmapLocation(target=spoon_target_pose, reachable_for=robot_desig.resolve()).resolve() + # + # NavigateAction([placing_loc.pose]).resolve().perform() + # + # PlaceAction(spoon_desig, [spoon_target_pose], [pickup_arm]).resolve().perform() + + ParkArmsAction([Arms.BOTH]).resolve().perform() From fce61af0546dbe3b510c8b056294812988bcfe17 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Fri, 16 Aug 2024 16:06:23 +0200 Subject: [PATCH 02/44] Adds first ProcThor environment --- resources/house_2.urdf | 198 ++++++++++++++++++ resources/house_2/meshes/stl/AlarmClock_2.stl | Bin 0 -> 49484 bytes resources/house_2/meshes/stl/Bed_20.stl | Bin 0 -> 96684 bytes resources/house_2/meshes/stl/Bin_26.stl | Bin 0 -> 37984 bytes resources/house_2/meshes/stl/Doorway_9.stl | Bin 0 -> 56084 bytes .../house_2/meshes/stl/Houseplant_18.stl | Bin 0 -> 93184 bytes resources/house_2/meshes/stl/Pillow_3.stl | Bin 0 -> 45284 bytes .../RobothorBasketballRhodeIslandNovelty.stl | Bin 0 -> 48084 bytes .../meshes/stl/RobothorDresserRast.stl | Bin 0 -> 70084 bytes .../house_2/meshes/stl/RobothorPencil.stl | Bin 0 -> 8484 bytes .../stl/RobothorTennisRacquetSpeedKids.stl | Bin 0 -> 92084 bytes resources/house_2/meshes/stl/Wall_0.stl | Bin 0 -> 684 bytes resources/house_2/meshes/stl/Wall_1.stl | Bin 0 -> 684 bytes resources/house_2/meshes/stl/Wall_2.stl | Bin 0 -> 684 bytes resources/house_2/meshes/stl/Wall_3_0.stl | Bin 0 -> 684 bytes resources/house_2/meshes/stl/Wall_3_1.stl | Bin 0 -> 684 bytes resources/house_2/meshes/stl/Wall_3_2.stl | Bin 0 -> 684 bytes .../house_2/meshes/usd/AlarmClock_2.usda | 16 ++ resources/house_2/meshes/usd/Bed_20.usda | 16 ++ resources/house_2/meshes/usd/Bin_26.usda | 16 ++ resources/house_2/meshes/usd/Doorway_9.usda | 16 ++ .../house_2/meshes/usd/Houseplant_18.usda | 16 ++ resources/house_2/meshes/usd/Pillow_3.usda | 16 ++ .../RobothorBasketballRhodeIslandNovelty.usda | 16 ++ .../meshes/usd/RobothorDresserRast.usda | 16 ++ .../house_2/meshes/usd/RobothorPencil.usda | 16 ++ .../usd/RobothorTennisRacquetSpeedKids.usda | 16 ++ resources/house_2/meshes/usd/Wall_0.usda | 16 ++ resources/house_2/meshes/usd/Wall_1.usda | 16 ++ resources/house_2/meshes/usd/Wall_2.usda | 16 ++ resources/house_2/meshes/usd/Wall_3_0.usda | 16 ++ resources/house_2/meshes/usd/Wall_3_1.usda | 16 ++ resources/house_2/meshes/usd/Wall_3_2.usda | 16 ++ .../meshes/usd/from_stl/AlarmClock_2.usda | 26 +++ .../house_2/meshes/usd/from_stl/Bed_20.usda | 26 +++ .../house_2/meshes/usd/from_stl/Bin_26.usda | 26 +++ .../meshes/usd/from_stl/Doorway_9.usda | 26 +++ .../meshes/usd/from_stl/Houseplant_18.usda | 26 +++ .../house_2/meshes/usd/from_stl/Pillow_3.usda | 26 +++ .../RobothorBasketballRhodeIslandNovelty.usda | 26 +++ .../usd/from_stl/RobothorDresserRast.usda | 26 +++ .../meshes/usd/from_stl/RobothorPencil.usda | 26 +++ .../RobothorTennisRacquetSpeedKids.usda | 26 +++ 43 files changed, 714 insertions(+) create mode 100644 resources/house_2.urdf create mode 100644 resources/house_2/meshes/stl/AlarmClock_2.stl create mode 100644 resources/house_2/meshes/stl/Bed_20.stl create mode 100644 resources/house_2/meshes/stl/Bin_26.stl create mode 100644 resources/house_2/meshes/stl/Doorway_9.stl create mode 100644 resources/house_2/meshes/stl/Houseplant_18.stl create mode 100644 resources/house_2/meshes/stl/Pillow_3.stl create mode 100644 resources/house_2/meshes/stl/RobothorBasketballRhodeIslandNovelty.stl create mode 100644 resources/house_2/meshes/stl/RobothorDresserRast.stl create mode 100644 resources/house_2/meshes/stl/RobothorPencil.stl create mode 100644 resources/house_2/meshes/stl/RobothorTennisRacquetSpeedKids.stl create mode 100644 resources/house_2/meshes/stl/Wall_0.stl create mode 100644 resources/house_2/meshes/stl/Wall_1.stl create mode 100644 resources/house_2/meshes/stl/Wall_2.stl create mode 100644 resources/house_2/meshes/stl/Wall_3_0.stl create mode 100644 resources/house_2/meshes/stl/Wall_3_1.stl create mode 100644 resources/house_2/meshes/stl/Wall_3_2.stl create mode 100644 resources/house_2/meshes/usd/AlarmClock_2.usda create mode 100644 resources/house_2/meshes/usd/Bed_20.usda create mode 100644 resources/house_2/meshes/usd/Bin_26.usda create mode 100644 resources/house_2/meshes/usd/Doorway_9.usda create mode 100644 resources/house_2/meshes/usd/Houseplant_18.usda create mode 100644 resources/house_2/meshes/usd/Pillow_3.usda create mode 100644 resources/house_2/meshes/usd/RobothorBasketballRhodeIslandNovelty.usda create mode 100644 resources/house_2/meshes/usd/RobothorDresserRast.usda create mode 100644 resources/house_2/meshes/usd/RobothorPencil.usda create mode 100644 resources/house_2/meshes/usd/RobothorTennisRacquetSpeedKids.usda create mode 100644 resources/house_2/meshes/usd/Wall_0.usda create mode 100644 resources/house_2/meshes/usd/Wall_1.usda create mode 100644 resources/house_2/meshes/usd/Wall_2.usda create mode 100644 resources/house_2/meshes/usd/Wall_3_0.usda create mode 100644 resources/house_2/meshes/usd/Wall_3_1.usda create mode 100644 resources/house_2/meshes/usd/Wall_3_2.usda create mode 100644 resources/house_2/meshes/usd/from_stl/AlarmClock_2.usda create mode 100644 resources/house_2/meshes/usd/from_stl/Bed_20.usda create mode 100644 resources/house_2/meshes/usd/from_stl/Bin_26.usda create mode 100644 resources/house_2/meshes/usd/from_stl/Doorway_9.usda create mode 100644 resources/house_2/meshes/usd/from_stl/Houseplant_18.usda create mode 100644 resources/house_2/meshes/usd/from_stl/Pillow_3.usda create mode 100644 resources/house_2/meshes/usd/from_stl/RobothorBasketballRhodeIslandNovelty.usda create mode 100644 resources/house_2/meshes/usd/from_stl/RobothorDresserRast.usda create mode 100644 resources/house_2/meshes/usd/from_stl/RobothorPencil.usda create mode 100644 resources/house_2/meshes/usd/from_stl/RobothorTennisRacquetSpeedKids.usda diff --git a/resources/house_2.urdf b/resources/house_2.urdf new file mode 100644 index 000000000..5b26f09bb --- /dev/null +++ b/resources/house_2.urdf @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/house_2/meshes/stl/AlarmClock_2.stl b/resources/house_2/meshes/stl/AlarmClock_2.stl new file mode 100644 index 0000000000000000000000000000000000000000..db94ec70c29c64205c5b77373aad4dc3b342db58 GIT binary patch literal 49484 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 LQ6@0$vW@=%)9#R5 literal 0 HcmV?d00001 diff --git a/resources/house_2/meshes/stl/Bin_26.stl b/resources/house_2/meshes/stl/Bin_26.stl new file mode 100644 index 0000000000000000000000000000000000000000..74f888bcaee328186f52ef0567820df23f4cd48c GIT binary patch literal 37984 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 literal 0 HcmV?d00001 diff --git a/resources/house_2/meshes/stl/Doorway_9.stl b/resources/house_2/meshes/stl/Doorway_9.stl new file mode 100644 index 0000000000000000000000000000000000000000..dcf49ca924f9fdf431eeb07c8c14baa9032c69c7 GIT binary patch literal 56084 zcmbWAdE8#Z`Ts|Ps0Km#+C?MQEG0?PG$>Xhs^6a*L$vIu9-7)O`elo zPCMzuQ+_-AsIEt!a^k42I~_m#grkO^(z9=`9eVBH{(t@(wz6}-o!cXOuvh-s~IQQf`%PLpFs$cvoB~(hS zb?)tr2UPxR$Nt&r_w~rM-|ubkWYE!T!#QlzKR5od0nUBXeL!Uk=;%;wBMMQn$sgc z0Av0o##{-NQhm<-2|8|tj_0}!sA<1OyL&dP8ZmXZEvwFb1syHWv8Y6-lac&0?ie))Or(bbPes3p4DA>Y%rpV+ApB%NP18p;Bt0 zbG^T}xN^cxS$@{)i~W1hb*}pNAZHZYd@oi0iFZ_=S*`AWX5k&RRj0+3m2S@RbMPl~ z)CiS&=U4X!;yk_wullrG_R!=kKWt9#iat4IYVM`z6EmMZvF+S1L97R>p1Ut4R7!O_ z_xw`mn3UzG%Oh$SF~Tg0c;i zsQvOyX5)OrnRuTgufmukOLEH+B~(iFIrlk;b1{NLFoN2z(Hub|IR4J{SlTTg3Su6j ztb|IbKIgixvADM6#wk$se{p3IbgYh;X}>z7bUr%wz#5Ay^y6AYR|%C;ea;=dazFn@ zJ8PAGnf1&4AltTwXHR~|;rGv40xj>NeoLZxgL zgkAXjT~GBo&L2CrqED1acdrW~F}6ggl+I1ek4PLjc5E_hl`wr_Z8u_AiBKuCHV_u8 zb5`k>>k}m`ZeiEg9-&ee^+5bRj`^+dN1rHBj6e6(uSeqM5}{H>_K}QaYul zZrNvvCzvHls8sqsM<#lLnW#^cFn#rG_XM+D36(P4f#CeZt}p-Olle1jRdd)C-QV|- z@P55^^4!b!i2JMM-23o9?Avqxsf0@D4u^95uPwh|@%+B}Lp|uR{ry zGTq_LX~ZFm5A0_vGWUajpY~YrW8$faPpJ+iOoxN#rh^el37@arb7CK5?Y5H+o~!x_ zV%Rk!{n^0wR4S#q3u3=d=FhY@B>mWV%+qy0R9```rG!dZo7Sd;z3J)UKHofBA9K~$ zKA}>oyC9}4nLk5!EMxu|_lC$N)mIQ~DWOtoZ9y=v>y zus$B#f0*ZQY`96HuOQg6n2=DbRCh|)NO8wv?R}2ymgp;pC$AalPpP)2Qma&VL2UKO z{QCT$RhEhLL-iE|Tb83FRLa_6e-)T8Yi;ImJZwgBJXBw*LkX2q-SsMGZdJ~CUoEV1 zCF7}a@W3~#cIIR|?AuR8UG(8z{qv5ol4=CcoF>J!l0Oebta9d7<+OgeavIHd3EN>O z6Dz5?RZ@*mDW0SG^H7<15mnA*J^Sa|$0}$2iS*0pdL6zl8Y`)}RZ@*mDYpI3QEhQ9 zRylL4a@rFm_--%!I02Q^uVB?hv65k}ooN2$ln{TRf_ zAP$XnQR_>kSj*tgL%rlpR3LxZyMKOHta92DCAin3jxd4?QL#G)I^HP}D#iK?dkVyN z(D75~*eg~!?THemFYExWf{xpv!kRmDI&O`sd%oN~#emWqB3qKI2g3TpwA|p%$u~B&^;V z@)iBYJPv*wfJ*8ch}D|0l4^uX+58B8OhJ{i4a9@7%4t?9Ve>JJ$F``X{s=_(SV=WP zrEHZ5B6E zlu#-AIjgGaDr!%t!`hUxELpJ*m9pFob5PfI>z6uIDxFd75h`VL7!MN7Vx>}MVN$bf zh?Pp2wMosgflw)n^on(;l#OQL2lu=5$NJSVr&ME>G$T~XbcFHPXwAiyJ8#Ug!|^Bc zb#UjZe-FmDXqEf9_~xvJy6DDTP#e1;%g$aqB@!vjTJ{v)YU_X5Evx-G%kHVwtDL@H z)yK>yLH|%y12GcBgn22UQgJ^YiAO&5)FP;ngK~zBK6D8t~ zERM&7TJPG$u&O((QbMJ;YMZsrby<6H?Gwc6D~_Z*Q6lav{WxIlSz^0>_T!ly({~Jm;$26l6t+>_iK3^ z{CF0`qaZdc5s6fs=fRJ;KUiG(HHhEAbG~2A4<*tW^@nv9SI$IqH$u#mP$`{{&Y>EW zaXqxUD0TRZ(-jBpVlP^*q$*)j)WLSh-Ex)FM-esFB5vXSBkWOF!DpxtFgMI1j zVw-eW+h0KajU#wztcxmPQmIwtDkll{Wqxoz8WCpg%TdS3SQk}-Iw+M|g<7AtinTuN z*T#bxZk~s1w^&&vl{(n3N~KnntDK%dzeQe!`A7@HtSwhkl`tvQhgyEA%1OfaCG%1D zzKxYsC48)+g{H5VgY;ZytFW3=ebomJ%Q-z`jPtksA14_}dBEuj!N8Nj0g9W>QJ@o?E|^Qhh;#>9F;j z`$5w|pNvkel1i%Iv8Yt6&r}_%s)Y`za{7Ig>T6DrAJzANBUCEZ{hEwc?EAV*Rp|iRuS) zN%b`+q>@@Cp;D$V%|z<3_;CMWaUlGA*qzbjnzo@%>UXlsdD=Lj_PYpkh5{- zo=T2lElA7%F*stYr>IXI1ykmS+-~WwJDVvXBJZ_6C9PiiS zlUB}WlVUqv8E%inBPBwmV!Ji0aPLH71FY2gL*R>y!wUGHU}d6gRt!(*@Ws zMsHiW%9!VD8y(iGUq|BH5}{J2BM{xr3HRr#?iTL0Sv}`!VB^fT>T|AFBs!J|l~QY+ z+y9(!f9^oU?DKwDCejbp=iKg*SgAy)RBU@|orC8&V@1#7Eb?P+Gm74-KIaf!PcXVl zsFYfZzf%-t@WN~)PXF?ZRT(cY(}xI`r0Q{O08w@{4cD#!#;hab?}t6S|307 z&f19BKK0CzdB34M4dTz)4)Vqnw{C< zQQto3rB&-A81yKiQvG93XIxPxY&^Ulam*JVxJ~Vq^A@$zr-N?WMs$2L@!1`fP^tNm z2+{RXwK0K*HU|H^>JHzYH(=YEwZGi|$9^u6iScSec&Yev&BV6sM_pIFd*Oyh`hIts ze`xkbw1jQ5HYKP@iA1WY4icMoIJUyMc2H}l+N^Jm@$Ie;wPs^xT8FlSKE+OXloobAtA2e9YP#-u-z=hY~7fZ65`i@AInm>}u2geEX+9f42PbF4=a+ z?(J<~|NX()O(%r*?!DA1l1ix5<=cMgdz$cmIj?LC&bV`*WIP(JvN2aerL3KLKH&XI z-?!p8Z@uI<`6=JL>GSp8j-%^qjBnHY`dnAS##{;ZLxW&R1j zyG};XvvC%YNTlM=3&PIMHiCZU#O&jW^M0Hwsa0Nw%ny~acA-6UIsj)mP|v`nsOel~5^- zdO@%?`iL-}>EZ8Vo3T24qcCfWJp*HP%7XKMq=ZTx5Q!pIZLb`eZGZH8m1Z-_=PR+ zf>!MSt1RPayN#x`Q>*Ct)=dbLI_l*~6>A4S&IQp0R_REYKKf)tVbvc%bSM!j#h&Uu zxkba@t6c_y+O%J5(+{J=c)S2&ViQ88tX)`TvC{bH_&1K=nb5HvVpS$AKK!}0L#)mR zu@*enan`t{o|EC2cWy#he9|mg<xb0vS0lj#rM^Yo$!04$g4A+ z9fFwdGiLeRYd#y5oxAzmgh-@fUiIp}Cx|hfrw$wet9F9t=7(Pa;v0bbE9NwHEPinv zC{=ls%2+U$5p=_JaCsqM`pjXUQVe%mAa_l!Z={sK~==q;Od{rV;%5(&)em{9g>($%ulZ`y}2X!4>0W>r8+=kz~n>3_#5{RQp zgi7fd&bbb-=CGNAvTt{uKT!MCEYXu5Y8fB($liKjP`1XqDWOuT50$&)I?S00&+kH% zwO@-H*QoRaxzorFb8Z7MtwgAl>T~W7ko*pWj=5j^;+QjTspnUKSOQ|kyz&0bY3ra$ zsXpi40&y#dwh7nWt20Mut)APQ`wNJFfVlA&*C&KZ=^4(sPfx$2vi13UWaFQ3$(ms+ z4p%ih-G%dDpEK^LEI)6LY)*+#Db?rPu^97>G3Jbw_G@jfYDR|>h{tPFmI8!+Lz{@Snlp(j@7P5`k!{P?e}uTKb-Qhmr?mcAwZ0%R)eCqjq z=z9iqT(Rv-387M|&(Az(E4A(JxbEsMOwUw-;2Vc;10__-&QW3Aoear$K|C_^%Dc5+ z-M8r}45t(jYhXP7_Q-1qp;D?ZSamsce2bCPe$7Iz^JZ0XVwnhnZv!P%O7)?p56Ra- zP@DE^ZN|;$;5pX9Y+(~ZrK}ySIt#?g@cg!!SN2h>G;Vrsa}LqX7~Ov7?UN8HrDwPh zs}Df@8Bx}L_1&%~y+FLzgitBf=iD{u`y&vSo;c-h?N{Hm=?U_D5G!#lnQ}`)sFdmp zR$T@i9CPhgB{T~5bE~(LiWT9goo6+ZVvW@H^F@`j8KF|v=1H$^m5%{;dh;f)RpspDPOsc9 zc9zhQpZ?w!J2oRI#r-bnl$dq#Q`5M6;S<*MxqD%oReA1~*e+`NsLA9vuRd@GB~*%g zI1;=ODE!#*H=#mrHyErfS(~$f?W7tNMjz2_Diwe3PpnZ%_&eJiH6yHTHEaGnsp$tD zLhz(#Qr1rDiJsuOmQsFfBTXF~fBxLJ6RQ$Jq&VjFo)Ut)7aw=j^tpRs+jdKACpG>2 z_~GwNYerCtdpHuj5h%vPx5Rd}(Ar65JBbxNR4I#98r^wszwB%J)Xthd-}-E`D$iX8 z+eJ;Ec{T3F89Q*FV1!C>@57(-Mj-XWqR5$}R#`ilgWiv31f}ff1wpH*jjJU`imRxN zv$m7fr(J?lT>02jBVqmedV9C{Eh{W_ff(!gR_Wl2I@;{`uXT@YyK9%{7@;@lkMlJAAG--ZTImJ z|JooeB&W^D}OA0>jbtIee1>?*Ro8;A#nhMK;` z%7}V>1~l8j^DRNlDG`1@7o{|YfuL3NLuZlSw@0fuvULmVek>{xDrLD)_^}mq+zYF8 zoc&%jT4nkQKj``WB|@dl+OYbZ56K-t&^&#jgth(HxXVEFUI9TV>#6X=Mo>Le&y(@@ zvDyea-bSpHP^n}E_XJ0<2J3XBbObeS9&i>bB~(hI?%c|!EuTB{^HKS-4MT;Vd1d=V zj&r>xhjysx&$_TdJr6t0$-Kt;I9rjmUh8h>%e_wJ%^`VPL<=r+-36-*)OxTf)9#A*{Mqvb}yE5p7S#-+g;g zb>QY8#+C?`((G~W!euzo&m5G0|C(5#N55P%^kk8qCjJQGO%TVO6mJ0{p;9^@!;E?r z#KdK>rVoOvff9D!DNZb}ftXMt5-DBh-35?*4}{kyPn58Bc%P30@y-eeFBN+#R?%@F zK1Kv=7V(Mpt8ojSpAX`b5}{JM5;=FT_Sh#M@;|Yrk62l4nr}<{yI5?8lh;rX zM}au7MCkcU*A?e>{IEy1;K4!pTW`k-J#;W%mC%zOzLNG$k8GcN2IcqfloBeXIp*9Z zBRb5v0iNH2DC-j?^!(}E%eV#j3y43Lh(sz`;gGvIbN5%nriThW{II(M#)s!xJ-s@2 zCWxgVG)qV%Qc(w^jyo?9FM$|+V64zX2iFWeg{3F2mqF0;MdRWvKqOR3=e%=kp{D=T z`FrFqJ|1iOAh^~lVQ0f|9=vVz9hL7u+)^S`%2vCuQp59XN%UNwC}HhTJwF^o7mPV$ z)r_E&{XDGHpP)j&9*CbK0{TSz)wp5IaSOmPf1pIDl&-t-mxickHDjkns!}HGYGJpUkQSqul)6Kp+XPOsa;QD>B;L<5MP71eAz__p;GC1 z(0;z1`99YtN;IAaZOoNWsdUdU8hw98&##FU`Z$70==l?0Jq7U(5W`Q3w*Zk)sq|e- zKQ02n_qje%LgPkx%ykfapDUqKnmvKw`Fyo)clUowkNZSB*IK*%N)cn#Oo~-*{yeFk zhqszkYxK0GJr!21H}tOQRwH43N2S`=k=Tp3B`xt)uGmhkI%NKtGnx^UYF`KUS9K3# z+gG5(zrqjSQbMHuvkv?FSJcNnyq&y?>L5o@btvJbqVA$1Y_+9>&wjMZy$IKgBV(Jh zcF2NV=kn*pe%Ev;p;Fc^R-fR1TQ*_)_iMDhp*9Vxc*jy$)gEC|?8(|eHWI!T$|rsd zWIRl_RtL!-UQs)rsFdk2B1RTWS&BZf8fk>Dm-6pYhp}iv&_X5J*I`l?H`8IUYP8A- zi;oe(D*8;XpI&|7wBd1VxmW+*+7J5i=U)AP{}^(ixMLyl&c#pdpoB`;^H_@~!Ic2C@!*s5s(1Jt<2l;e=`BEe1f{Ge zi!NnDga;gPr03d3kZ^Gx5jRDs|YtxeER?&ZxBB4^&PCXy~er3jjIL>?z9)00I ze7@@Yqw&T>2^(`Iih3eFzv!(^`tJ;@qKsTpfCs7-Y>TGtrk`WB~;3Oo)U}3o^ZE%tA6PC7k-R< z-}O;KrEL6*Rn%f-PZ%pDR9~TEXWYstp;8*df?(^lzlQlt58sS!#%j-7!mLgA3`gNs zMhTVLITA&zSUrCW)xl;n%I7PxJ-wUQ6a?>B%7jVr=hhB>u-?v_2Affgl}3SW5=B+5 zJBWErh`Lm?svztZz%q`u+h|%lwaRW~%7jU+{_UiiwSynDiuVROQbyA!BMPg22!gju zN~jcnUiZnpi>Ph@g4(oSYts*-!|Cod5Uf*|36-*TVHG`p1Ej`BN3(GR+aoMK?8(|8 zRvh!W@Lb1PqmX(|rai*qlV-{M3p=*DnWOSr>BdCgK3h**=<_PvvHbM3<%62t$|O=T zuR^Wwg-%mvuL?iDK&;FUzXHTJK>hb7kh|fIW!%Si&E~Dlc5DtG%1JG}A@Ze^~-t&9>X)$gk?9^v;UCc&ERVHKmS z{aTxE0HZ_YZXpQEE0a=7C}l*j>YkH#pUpY=BuFFJujLruOAD3;o zxRp^trA$Y#>hmR6wBC;!lWlQhqT{SlNIif4s)?-eW5cq0hj%3NI{R7!nv?rKyfUPjg6H@Gp;tk!v_XG7<%2k|0^&2cNEgi7f-kt2<7 z8i2S0r1r}-*k-DoCW`lm)nt@VDb?rPji`E9HA?%nHdh>@!yD&15cI>F*TfP^8Btip zI^1HA+OI~T(R0>hSh-U|rA$Y#>e3sBRC!}^KYAkG8vHEv9F z=IE@|bDO`F$#^R><*e%yLZ$Q!hrib~`i|O%xG|ZI8x!rW7|Ko%;=lWgz~y^Ysa#QmW6nma{vz@QwvJoNK>2SJIPkc1|EJD-kNC z`kWiIR?ln-ZcK*a#zgzoD5Rd}$o8vXRae}~D4|lS&(A!+wzJ-DyF2a&br+^*szAH} z9rQy9m9leGSa)%M<8SrPz2{1Qj8867;gTV&d2QfdjMj0jfoc8TxWOYXVSpM-74 zs^g*OHs^5jlk?{1t>Kp@gi7fdF2suKE^o=SUwu>SNiPt*m7#S?sFdn+?yrdIlOWE( zjfwWF@7nYPIT-|_yA5t-lu#+v7p&qf8ShxMUmeXx&q;6xpoB`PzM#X-=k%QQPoAA_ zf8sFT=1oIVXNpK${_bY$*Q*93REqvtPlb+2llt9l6%W>WREO#=h(p%M6GEl*q*oAZ zsU@m|?{-?1-m#R4L@E+#Rqc$?2lrJe)uH~SRwbgi2YPb;i0?zQvuMeVd9qi*mczS)v-%EP2cusrOLTe|L?QF|S=j^E7s+7g5F}i%~Q#)(= zeCxB#syufYY$rAS?2hhV-KB&|aqmMS`MnA6hegpU^o%HNHw%+F*e*dS>#338YRP`N zirNTjJ6V0aj%Ea2)1kltwL}8 za;0Y5`xKGzn_Q?WrKx;v3lrm1?eo1b0QuINKqy%^ebVWY(r!`2N+NUBfMa5h}%fqWwG& zcz#-^mDwX7dCpd!qnw5@}j(vKt^eKx+M%XDx%1T7$AH)w(KXNQ7J%7j)i3rG_E)zaeR$=eg(I`W@MR-=r}F*k z>lz?fmG`w8v_tj$$9s*awBqYYeem@pB~;4Z3}Mf}ygCb3G0yr#32TSy`A6{BzMj;K zpp^YQ?BO2#?cmwF;mbxN@MR-?qW$_h3j7E){XI_FeKu$9X0T2Pm9h*CZ?(0qpV;~r zeA(#tzY7(5Mv)_>BdBq6?vgLAXuSbnPr40XPtvhfDUG3X_f4pJtKLEcRJ&T0jKAyp z$Eweg=Szf2CAr}KiZ2Mff$ssFj4vDMoY1pKdYYI5;-4U{!Pk?NP$`{{VMg(53paw) zCra2^q&Va7+X?&@k`jrOuJi6ze9z!b5MG-+QNr4x`f(cw`!a>iRIX8pRP3o(MfvT7 zMtBRz$sC$HNl52;=W;`kDwQks>} z@llWbDSX+e7rtzyPn6J;o^$JA9EQvsl)ZqjCn=#)nq&A%^T-Y@{D#m>korUki(9Da z?}b|cem&{V5|K#7@dzs%zb&!|#F^*clYH4o35^@>qd@R09-1ZWE0Kyi!d)u9Y?SfK zM!&u&R_NoJp{KC)q#B(EhHsWN~4Y) zJFHn1eq69dtkB1IpAvdvMO`$;YIl4+N&8Z%)Q^i$)1L#+uLP-2l+bgub5EeA&#x!( z3p7fol+HBg{)XJ03}QIGY@|<=(6~9bTbG{MRD3<@YJ5FO36;_q7Hj(?Sf%?xJySKF zifnCHLZx&E82oq`etgzxWT?<%Jh)OTp{KC$g})C$%){4{v@ey?{ao;avzBYSK2gGa zDr)+F1i>%qD4|m3UwD7uD}p({B1moeLq+W|N@)y3tnB+&`a}sm=>>v1_*E+phJ9(kHdH@WZ!6yGs3M9jxi=j@;Uf)j_jL2`?3Ohl=ph`0vCm z!M}Vmru&<2;_+Yi~F49GvJ$ytM*?Qr1%-7}X^pmaf__Yp^})JFWYDb=_e+J_7Mo ziBKuF8Ij;QV&(IevC=0KR=>9%H?|AU5vz6ylk)oN(S_%k#Y+1vTg4dGW0hH~nh}(; zpBJ$j(y?ED{i^+PjiSY^%d~TA<{#T3R=a?hTq0D;EDSo1iT|R`S;!XcSI611BoMtK zF{=r|SW(Jbi*~T8cl;NQNT`PmR@I5&k!Wi|PzU>EPo^(;eiNvjFp@D=KC8_VW`_41 zbjT7iH-Ol!M5t7ZRh%FD!I~?gWfl{ggBa&RAKD>S|B0ZK^;9P^)1lhUTk5m+|BaxO z^%Mwt{x$sgH!{WI!-!hkniHRc_@qQ=zrI}`LF%x3&M4*AlBgqT7gnu^5Ub*h3Oc-= zFy?V=sl!$S>b7B zF`{Nwm{CDTBcW1kTTjKmvOz}Ypyrab!`r~TZjZ1`q>e!F_ZcY7|1_)FrWC!kc3sB` z2})T{fjIf^>*fzWzHUDH@9Q?a2km{OT)WtIZZk-43mr#;u)g@jbkzNb zJvq0*OTDtc;a#}e(JhrP7d}`UymUu;7< zwBK#Ee!d>jjrM=R>)<%y-&z8(6RbJ`QC32wRG%Ng{Cwy*A2HK@XH{PCIylY)uYNK3 z;m7>kmwM#~fS86XQ9`9upL5+nJO|>Tqgra(uhH)6HL6B*U2R?bOPId^aSMp=N`y+O zKAZ=?SzbFE#QKPU_G?k-dRq6Yc|LDZFX$Na_43+JR_m8#%Thw6RG)JrMzqxShmM0` zo%U;^`ApwlRU5%)x(tAh1;~;GAikd8NHDJ`rTU!fa%@Xw9awc62<_MMn0{C$20s>J z9FBvI<6)H&DwSGw_t(oS-JoMnc&`20?BaOXj0)qiEi&*C=yjz>6tkZsN)ZCdjwD>l4Y|(KLZhm0@&p_POjEGXI&$*uu zZ>b#w;*TJ-->xY9MXD>y&?nf(#&oP3Zmk5RhwE>8E_*46}C@g;P z&}!ZD$Bu!HE|44q;?@$OQmPOCD*G`lwY4yU_hDtwer^26uX#dPuQ2A%JTe+OI$*te z3B>Bnh$yA{@XbW5K3{=YfCy;6mdEs?o{8R%8i-Huj`}dJS6l~aiAq^s1*>Y9gBQZ{ zEf}*n@7V7tai(%SY(|Cgz}jA!1Y*Myp;D^Pxo?r>%=Uj{1hrpX8FXE7?g|jcLC4Y~ zQ$nRwpWjO3f8jKtYl*FDe23dA+7|Xc9%{>`{`XZglu#*)2xoAiV@j8^`{@%UY@EX0 zCosV(B~+^3#!3|A?QfXslX@F_DtoJ?estdNsu^`D^rcdkp{XC#rcacxw{zJ0s2@tG zl+OPkZ{wj)lt_0OszV8t(iJ1sp-+@Bec@fJI+Rc;T`^J}`a}tfTi7$04va@%B~;2{ z$eEVv&?idR$cDX->ENGAsFbxi|5F|M#Mgy19=Z@R)DAzaBZ)?;p>(q?PA3+z;a1F$Qb2sp&o_R)kuWLs34g2f*DbY`I%Bu=T-aY(zdwKF z>3XdEnV}x5vq3!hJ)A#YObL~ug{BX6AMCz&Lv(jqzPzIS&bazHuY+Ub&p!3&PX20n z?J?-M2P3G2N~u2Q#^SAfFvepT#zXrZckT1_G4N-&I5y7R^kT34An2$bnG!0c`kdg4a1*R)@Y!qgvZ zQ8mwbrotB&LA-{#==kL+p;D?31m64|;rW+{fc9&7HLTmVet*Rgwxw)bRvHP@gEFZy)DAh{V52 zgi85#J+F|vUdOJ;M17)!=?n7%x$B7|N`y+8wSkDYGP&H!RCxx7QdLSt-PMro@#ZI& zn;%c8R6JQkBHqg2_qOY|GQQtSHPkZV%}*{jKb}yjn4#6M(~q|@x!lV5CrZRKZuBGG{N!@;;|Z0DGcEcNZ)I}1 zmGMuMh-Y;lH{8TwCx)A!TyB0mp;B?h@G*2Q-pb^1E90Li5o-={1d%1Y`N`$x#}g_Q z*ThJ~TbW#LW&9H*OkX%V$D5yAZhkzWQszgPgYi}-ms^=CpD1B*3pIdv^OMWXk0(^h z#v`mH@m406TbU}KC}HCtY8mn7CzqQaPpFjTRag__txPVrGF3iN!tyxy5pRBSx%u&g zO4o1a{6emtR4 zx~@2P+AF=XBk*S11$SSpn9jTPlq&CWVl|@5o0wR!h?#g2h+{zSA+ObiBPFnpNoDh#tHZ>5Szhs zeWCmsZr=5Y5~eTQ8}tWpT@ym3V!gD=TLtvXL#dL-6;z_F0$`DrMOdYOiM<*HYOF z#EBsEi4yfZ_I^AFq6JoQT$E5Ln+3s-+cBd)1;Lo<6D4duhVkfte0miGGBF`kD%MNm zcx-_zp9|tE+saj?CfiD;`n=cYyCnG&H= zmRDhgyD!eD9`M{|4#&V|6x*uLM>k`1w=EGWrPlfp^aMvxZ*_HLP<^3#LmkW#B~(hS zb&i!463j$_G159q0 zJfZ#iQRDf{{tiq1tj4}+mE2VO{YRa^Ewbth@+9OI+4pPjMEYTS_`(nSo2>PIi+g8( zqO1Sh|4qQ4rOo@H{pudY&LWMTE1^=2R?!dY(tdT1qGzhY^D?1QsxKw9U)`e^k=%27 ztCUbF)mP|{TV($hwkYteZ=NUjwO)r>qEf1_(7~4WYoo^9i?x$`=VSzFiAt%yLWkTU zSJ|)SF=@-hMn9}yxp%Ho%6{HxmG-MU4x3SpKJ~SfP${-?PgMMSf(RyX^H|`3BIjKO&${lwdWgi0&zG^vXB;u5bP<#zP5}iuYe}JicDk zE58dww-f5O$o`2ErY}@Kwt$YaK-^g(RLXRRyP`4he8#fAdCyhxXSkQI@`(}_w@}6D z4kAOWY9xhFDT{iziF@idEw$A^?E7Z@7P)Ho*^CeSweb(tsNaohsXdNte*;n0zEsL` zA>6ASb5cv?5fIZr=o2L@kAok3gSZBse*>$OP^oy2=dH!xHNgCy24Z`}N}niUb3Tm6 zl`FgK6?lFMVx@#i*$fWj@jm7S{cwnYK2ai_wbQXOe2Ovu3C3IrmC`vM);NoQBvi_Np45OWFaqWW`?4r-JvYz8+Wz}UjA%ko2c=T0 z<}}_S*WXL@!|p;zhj-M92$M>!`a`^T9*+oEzOpZ7A9c_w%f#TviU{+=@+w#b&ojEHj};NrL8;U#dL902%MSY!ey`zg=kwoDw01SNEBLu@n>7DyAnH=+iEZCg`n#|3 zNx9!#2;{l_{Vr;0La<*YFn0DXk3`uIBlvUb4m$Av@E>%P2`?3Y&Ng%u|Fx-hYkOkv zO+KUNQAc}(O2u|-uxjPjS^WalmhZR8XLWmH+eZ^qQy!K#};Y_)DFC9EB+g6Ele-i)A>{k-r4R%NuxMoMDUN=qW)+rbZb zp8cgns8qD7HFzGQ>thgO<@-{7)~@@(5p0*Bl=W06=(#6UyIN)KK*Z>_OHj&s3PkWd z?2vWl*ci}T9seND{nh0^-F}7=DutihjPkY=l;%~m-RG|P5wgVOsiz6yBWNuVcN!HZaV9VQiH zRhJSX#L7$4x+b~gJ-587$7)4{_rr)JRylP+Fqh=amSQ|eO2u}x>i+?MhEbgW literal 0 HcmV?d00001 diff --git a/resources/house_2/meshes/stl/Houseplant_18.stl b/resources/house_2/meshes/stl/Houseplant_18.stl new file mode 100644 index 0000000000000000000000000000000000000000..21082e5c27166c660f0544ccc15e459ed77f8478 GIT binary patch literal 93184 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 G0saG4UnCj; literal 0 HcmV?d00001 diff --git a/resources/house_2/meshes/stl/Pillow_3.stl b/resources/house_2/meshes/stl/Pillow_3.stl new file mode 100644 index 0000000000000000000000000000000000000000..d118f3061ad25dc626dce801065b454d0c953d72 GIT binary patch literal 45284 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 J(ZNvD{sYaM?+E|^ literal 0 HcmV?d00001 diff --git a/resources/house_2/meshes/stl/RobothorBasketballRhodeIslandNovelty.stl b/resources/house_2/meshes/stl/RobothorBasketballRhodeIslandNovelty.stl new file mode 100644 index 0000000000000000000000000000000000000000..75e8d89ba7a2998638ca78356ad6927bfdeb94d7 GIT binary patch literal 48084 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

9O7^Y%c+%6sjGje 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 literal 0 HcmV?d00001 diff --git a/resources/house_2/meshes/stl/RobothorPencil.stl b/resources/house_2/meshes/stl/RobothorPencil.stl new file mode 100644 index 0000000000000000000000000000000000000000..59dee4668ff663807d92ed578202108bc9335881 GIT binary patch literal 8484 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 U)3p*;)v={+HR4!H{27V=0MdQ(xBvhE literal 0 HcmV?d00001 diff --git a/resources/house_2/meshes/stl/RobothorTennisRacquetSpeedKids.stl b/resources/house_2/meshes/stl/RobothorTennisRacquetSpeedKids.stl new file mode 100644 index 0000000000000000000000000000000000000000..a6557efc22327359905c186dcaa81faf636211f3 GIT binary patch literal 92084 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 Bk#_(9 literal 0 HcmV?d00001 diff --git a/resources/house_2/meshes/stl/Wall_0.stl b/resources/house_2/meshes/stl/Wall_0.stl new file mode 100644 index 0000000000000000000000000000000000000000..f543f0af5421222a815edc4f487a3e87a99a380e GIT binary patch literal 684 zcmZ>*D9A4=Nlj5mE6UGRaLP%|OGz!#HPJKFGh`qK@PIWn>_^vo_Kc4$NbFfungfu% z7bcHj|Nmca4-0Q;O^SfPX)#190* o3MJfNz6Q~#VTBaZV3&YYAmSXv1L{BtD~K2(tU!EFxG^vQ07#&?g#Z8m literal 0 HcmV?d00001 diff --git a/resources/house_2/meshes/stl/Wall_1.stl b/resources/house_2/meshes/stl/Wall_1.stl new file mode 100644 index 0000000000000000000000000000000000000000..85dca8cb52b38b7284d78f9e1f5f24efbfc78721 GIT binary patch literal 684 zcmZ>*D9A4=Nlj5mE6UGRaLP%|OGz!#HPJKFGh`qK@PIWn?1$++d&Xxki2Zo!YzGkg zSyY+>hz}D7u_569|9X263#JOH!xmWwj15xP09Fmv0agXm0TKfNphGrLG&JN1%n61-p~J8=*4sN@Mtz6W0DP`fQ>MThB( mQdW8fQz&Oe1sqaQ&Wf&51#Wp(k&AtGZsbLgWW_4&D&ikw7nI)s literal 0 HcmV?d00001 diff --git a/resources/house_2/meshes/stl/Wall_3_0.stl b/resources/house_2/meshes/stl/Wall_3_0.stl new file mode 100644 index 0000000000000000000000000000000000000000..b3c0c614e5eb06ad79d54e279ebcf18b55cd724f GIT binary patch literal 684 zcmbVIF$w}P5KLj|BhCkSa9}GZf`wppZ@5^gC&9u-2)@GF7g%3&;LBvP3{C_s+#;FX zo!Lxwbv}0C#VhuzV z6q84jDX0d|*g#}aff|B!%j`5~=pd&n>zRUB?>Oiz^-j0S297m5>WUcu08Y%GyP`w= txy{G<`3C2z+cz7C9XdfxF>=QDUC|Ypdgr_1roqs?Wr}Q9WT`7)=U#9Eh}QrB literal 0 HcmV?d00001 diff --git a/resources/house_2/meshes/stl/Wall_3_1.stl b/resources/house_2/meshes/stl/Wall_3_1.stl new file mode 100644 index 0000000000000000000000000000000000000000..29ce431ff03f2be28c6dd530b4e574f5771bdeaa GIT binary patch literal 684 zcmZ>*D9A4=Nlj5mE6UGRaLP%|OGz!#HPJKFGh`qK@PIWn?1$;y<>})v;}DC(~@%ILE^}u!5$`q>?#-=~L!ylu2^My4>kR~JduyA3SF!LIF+a;Q6Hp7c z+0X2MJAY=f-)8wPO~OT) z98s6X>uQBdMDIFp5zuvyH-`&C|LI@qO%IakMJ`fFL!fnYTw(vR*-6{<@QkY`R9>43 zO Date: Tue, 20 Aug 2024 15:25:34 +0200 Subject: [PATCH 03/44] Kind of working demo --- demos/playingfield/ceo.py | 18 ++++++++++--- demos/playingfield/sandcastle.py | 44 +------------------------------- 2 files changed, 16 insertions(+), 46 deletions(-) diff --git a/demos/playingfield/ceo.py b/demos/playingfield/ceo.py index 690503cb0..33d1c180f 100644 --- a/demos/playingfield/ceo.py +++ b/demos/playingfield/ceo.py @@ -1,9 +1,18 @@ from pycram import World +from pycram.plan_failures import PlanFailure +from pycram.tasktree import task_tree, reset_tree from sandcastle import param_plan import traceback import hashlib +import sqlalchemy +import pycram.orm.base + # extension = ObjectDescription.get_file_extension() # Many Plans in many environments with many robots +# Don't know where to store NEEM so I start with the memory db +# engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=False) +# session_maker = sqlalchemy.orm.sessionmaker(bind=engine) +# session = session_maker() # ToDo: Many Plans missing, but this needs function pointers and I am not comfortable with it # plans=[] robots =[] @@ -12,23 +21,26 @@ environment_name="house_2.urdf" robots.append(robot_name) environments.append(environment_name) -environments.append("apartment.urdf") environments.append("Murphys_Law") +environments.append("apartment.urdf") +# pycram.orm.base.Base.metadata.create_all(engine) +# session.commit() +v=0 works=0 fails=0 for robot in robots: for environment in environments: + v+=1 print("Trying plan: {} with robot: {} in: {}".format("param_plan", robot, environment)) try: param_plan(robot, environment) works+=1 print("Successfully!\n Overall successful tries: {}".format(works)) - except Exception as e: + except PlanFailure as e: traceback.print_exc() - hash(e) # Random Error Value (for now) fails+=1 print("Fail!\n Overall failed tries: {}".format(fails)) finally: diff --git a/demos/playingfield/sandcastle.py b/demos/playingfield/sandcastle.py index 910ea5b8f..1b92e3f7b 100644 --- a/demos/playingfield/sandcastle.py +++ b/demos/playingfield/sandcastle.py @@ -12,7 +12,7 @@ def param_plan(robot_path,environment_path): world = BulletWorld(WorldMode.GUI) robot = Object("pr2", ObjectType.ROBOT, robot_path, pose=Pose([1, 2, 0])) - apartment = Object("apartment", ObjectType.ENVIRONMENT, environment_path) + apartment = Object(environment_path[:environment_path.find(".")], ObjectType.ENVIRONMENT, environment_path) milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55]), color=Color(1, 0, 0, 1)) @@ -43,46 +43,4 @@ def move_and_detect(obj_type): TransportAction(milk_desig, [Arms.LEFT], [Pose([4.8, 3.55, 0.8])]).resolve().perform() - # cereal_desig = move_and_detect(ObjectType.BREAKFAST_CEREAL) - # - # TransportAction(cereal_desig, [Arms.RIGHT], [Pose([5.2, 3.4, 0.8], [0, 0, 1, 1])]).resolve().perform() - # - # bowl_desig = move_and_detect(ObjectType.BOWL) - # - # TransportAction(bowl_desig, [Arms.LEFT], [Pose([5, 3.3, 0.8], [0, 0, 1, 1])]).resolve().perform() - # - # # Finding and navigating to the drawer holding the spoon - # handle_desig = ObjectPart(names=["handle_cab10_t"], part_of=apartment_desig.resolve()) - # drawer_open_loc = AccessingLocation(handle_desig=handle_desig.resolve(), - # robot_desig=robot_desig.resolve()).resolve() - # - # NavigateAction([drawer_open_loc.pose]).resolve().perform() - # - # OpenAction(object_designator_description=handle_desig, arms=[drawer_open_loc.arms[0]]).resolve().perform() - # spoon.detach(apartment) - # - # # Detect and pickup the spoon - # LookAtAction([apartment.get_link_pose("handle_cab10_t")]).resolve().perform() - # - # spoon_desig = DetectAction(BelieveObject(types=[ObjectType.SPOON])).resolve().perform() - # - # pickup_arm = Arms.LEFT if drawer_open_loc.arms[0] == Arms.RIGHT else Arms.RIGHT - # PickUpAction(spoon_desig, [pickup_arm], [Grasp.TOP]).resolve().perform() - # - # ParkArmsAction([Arms.LEFT if pickup_arm == Arms.LEFT else Arms.RIGHT]).resolve().perform() - # - # CloseAction(object_designator_description=handle_desig, arms=[drawer_open_loc.arms[0]]).resolve().perform() - - # ParkArmsAction([Arms.BOTH]).resolve().perform() - # - # MoveTorsoAction([0.15]).resolve().perform() - # - # # Find a pose to place the spoon, move and then place it - # spoon_target_pose = Pose([4.85, 3.3, 0.8], [0, 0, 1, 1]) - # placing_loc = CostmapLocation(target=spoon_target_pose, reachable_for=robot_desig.resolve()).resolve() - # - # NavigateAction([placing_loc.pose]).resolve().perform() - # - # PlaceAction(spoon_desig, [spoon_target_pose], [pickup_arm]).resolve().perform() - ParkArmsAction([Arms.BOTH]).resolve().perform() From e523797748f2cc485f9ae742162c10a2bcb31ccb Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Tue, 20 Aug 2024 15:26:22 +0200 Subject: [PATCH 04/44] Stop ignoring the Giskard answer when spawning the mesh --- src/pycram/external_interfaces/giskard.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pycram/external_interfaces/giskard.py b/src/pycram/external_interfaces/giskard.py index 925584fa5..37d403dcd 100644 --- a/src/pycram/external_interfaces/giskard.py +++ b/src/pycram/external_interfaces/giskard.py @@ -174,7 +174,8 @@ def spawn_object(object: Object) -> None: filename = geometry.file_name spawn_mesh(object.name, filename, object.get_pose()) else: - spawn_urdf(object.name, object.path, object.get_pose()) + ww = spawn_urdf(object.name, object.path, object.get_pose()) + print("GiskardSpawnURDF Return value: {} ObjectName:{}".format(ww,object.name)) @init_giskard_interface From 15666ba6270e8a27c84e1b861aa2de9e70720090 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Tue, 20 Aug 2024 16:48:35 +0200 Subject: [PATCH 05/44] Adds file// to the replaced key words --- src/pycram/object_descriptors/urdf.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/pycram/object_descriptors/urdf.py b/src/pycram/object_descriptors/urdf.py index e8a907bab..50ab8a546 100644 --- a/src/pycram/object_descriptors/urdf.py +++ b/src/pycram/object_descriptors/urdf.py @@ -244,7 +244,7 @@ def generate_from_description_file(self, path: str, make_mesh_paths_absolute: bo urdf_string = self.remove_error_tags(urdf_string) urdf_string = self.fix_link_attributes(urdf_string) try: - urdf_string = self.replace_ros_package_references_to_absolute_paths(urdf_string) + urdf_string = self.replace_relative_references_with_absolute_paths(urdf_string) urdf_string = self.fix_missing_inertial(urdf_string) except rospkg.ResourceNotFound as e: rospy.logerr(f"Could not find resource package linked in this URDF") @@ -253,7 +253,7 @@ def generate_from_description_file(self, path: str, make_mesh_paths_absolute: bo def generate_from_parameter_server(self, name: str) -> str: urdf_string = rospy.get_param(name) - urdf_string = self.replace_ros_package_references_to_absolute_paths(urdf_string) + urdf_string = self.replace_relative_references_with_absolute_paths(urdf_string) return self.fix_missing_inertial(urdf_string) def get_link_by_name(self, link_name: str) -> LinkDescription: @@ -313,10 +313,10 @@ def get_chain(self, start_link_name: str, end_link_name: str) -> List[str]: return self.parsed_description.get_chain(start_link_name, end_link_name) @staticmethod - def replace_ros_package_references_to_absolute_paths(urdf_string: str) -> str: + def replace_relative_references_with_absolute_paths(urdf_string: str) -> str: """ - Change paths for files in the URDF from ROS paths to paths in the file system. Since World (PyBullet legacy) - can't deal with ROS package paths. + Change paths for files in the URDF from ROS paths and file dir references to paths in the file system. Since + World (PyBullet legacy) can't deal with ROS package paths. :param urdf_string: The name of the URDf on the parameter server :return: The URDF string with paths in the filesystem instead of ROS packages @@ -329,6 +329,8 @@ def replace_ros_package_references_to_absolute_paths(urdf_string: str) -> str: s1 = s[1].split('/') path = r.get_path(s1[0]) line = line.replace("package://" + s1[0], path) + if 'file://' in line: + line = line.replace("file://",'./') new_urdf_string += line + '\n' return new_urdf_string From c144628a3311c11c2b1adcce25c668917e0a0a8d Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Thu, 29 Aug 2024 10:53:47 +0200 Subject: [PATCH 06/44] Adds the functionallty to create NEEMs of the task executed. --- demos/playingfield/ceo.py | 43 +++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/demos/playingfield/ceo.py b/demos/playingfield/ceo.py index 33d1c180f..9bfde6b95 100644 --- a/demos/playingfield/ceo.py +++ b/demos/playingfield/ceo.py @@ -1,4 +1,9 @@ +import anytree +from txaio.tx import sleep + +import requests from pycram import World +from pycram.external_interfaces.giskard import giskard_wrapper from pycram.plan_failures import PlanFailure from pycram.tasktree import task_tree, reset_tree from sandcastle import param_plan @@ -6,13 +11,14 @@ import hashlib import sqlalchemy import pycram.orm.base +import pycram.external_interfaces.giskard as giskard # extension = ObjectDescription.get_file_extension() # Many Plans in many environments with many robots # Don't know where to store NEEM so I start with the memory db -# engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=False) -# session_maker = sqlalchemy.orm.sessionmaker(bind=engine) -# session = session_maker() +engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=False) +session_maker = sqlalchemy.orm.sessionmaker(bind=engine) +session = session_maker() # ToDo: Many Plans missing, but this needs function pointers and I am not comfortable with it # plans=[] robots =[] @@ -20,13 +26,17 @@ robot_name="pr2.urdf" environment_name="house_2.urdf" robots.append(robot_name) -environments.append(environment_name) -environments.append("Murphys_Law") +# environments.append("house_42.urdf")g environments.append("apartment.urdf") -# pycram.orm.base.Base.metadata.create_all(engine) -# session.commit() - +environments.append("house_1337.urdf") +environments.append("house_666.urdf") +# environments.append(environment_name) +# environments.append("Murphys_Law") +pycram.orm.base.Base.metadata.create_all(engine) +session.commit() +server_ip="192.168.102.44" +server_path="/environment" v=0 works=0 fails=0 @@ -43,7 +53,24 @@ traceback.print_exc() fails+=1 print("Fail!\n Overall failed tries: {}".format(fails)) + except FileNotFoundError as e2: + traceback.print_exc() + fails += 1 + print("Fail!\n Overall failed tries: {}".format(fails)) + finally: + try: + process_meta_data = pycram.orm.base.ProcessMetaData() + process_meta_data.description = "CEO Test run number {} robot:{} enviroment:{}".format(v,robot,environment) + process_meta_data.insert(session) + task_tree.root.insert(session) + except Exception as e: + traceback.print_exc() + print("Error while storing the NEEM. This should not happen.") + reset_tree() World.current_world.exit() + # giskard.giskard_wrapper.clear_world() + + #clear giskard world? print("Resume:\nOverall successful tries: {}\nOverall failed tries: {}".format(works,fails)) \ No newline at end of file From 2c9ad5bbc80685cc5c8ccccb0fa0c175ceaca61b Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Thu, 29 Aug 2024 10:54:30 +0200 Subject: [PATCH 07/44] Adds first Multivers experiment --- demos/playingfield/sandcastle.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/demos/playingfield/sandcastle.py b/demos/playingfield/sandcastle.py index 1b92e3f7b..15163ba44 100644 --- a/demos/playingfield/sandcastle.py +++ b/demos/playingfield/sandcastle.py @@ -8,13 +8,16 @@ from pycram.object_descriptors.urdf import ObjectDescription from pycram.world_concepts.world_object import Object from pycram.datastructures.dataclasses import Color +from pycram.worlds.multiverse import Multiverse + def param_plan(robot_path,environment_path): world = BulletWorld(WorldMode.GUI) + # world= Multiverse(simulation='pycram_test') robot = Object("pr2", ObjectType.ROBOT, robot_path, pose=Pose([1, 2, 0])) apartment = Object(environment_path[:environment_path.find(".")], ObjectType.ENVIRONMENT, environment_path) - milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55]), + milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55],[1,0,0,0]), color=Color(1, 0, 0, 1)) pick_pose = Pose([1, -1.78, 0.55]) @@ -44,3 +47,5 @@ def move_and_detect(obj_type): TransportAction(milk_desig, [Arms.LEFT], [Pose([4.8, 3.55, 0.8])]).resolve().perform() ParkArmsAction([Arms.BOTH]).resolve().perform() + +# param_plan("pr2.urdf","house_2.urdf") \ No newline at end of file From 6d126f7064c50f25b67b3a2639d85a293f85ff78 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Thu, 29 Aug 2024 10:55:36 +0200 Subject: [PATCH 08/44] Quick fix to store the object pose at this moment and not the object pose where the object is in the end (In NEEM) --- src/pycram/designators/action_designator.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/pycram/designators/action_designator.py b/src/pycram/designators/action_designator.py index d14ad54f2..2b0495749 100644 --- a/src/pycram/designators/action_designator.py +++ b/src/pycram/designators/action_designator.py @@ -913,8 +913,13 @@ class DetectActionPerformable(ActionAbstract): """ orm_class: Type[ActionAbstract] = field(init=False, default=ORMDetectAction) + object_at_execution: Optional[ObjectDesignatorDescription.Object] = field(init=False) + @with_tree def perform(self) -> None: + # Store the object's data copy at execution + self.object_at_execution = self.object_designator.frozen_copy() + return DetectingMotion(object_type=self.object_designator.obj_type).perform() From d81e87f62593a456bcc91d3a00c2d503a0fbf006 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Thu, 29 Aug 2024 10:56:45 +0200 Subject: [PATCH 09/44] Quick and dirty fix for object poses of believed object. Shouldn't be merged --- src/pycram/orm/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pycram/orm/base.py b/src/pycram/orm/base.py index 0e064bd33..d1bb033cb 100644 --- a/src/pycram/orm/base.py +++ b/src/pycram/orm/base.py @@ -120,7 +120,7 @@ class PoseMixin(MappedAsDataclass): @declared_attr def pose_id(self) -> Mapped[int]: - return mapped_column(ForeignKey(f'{Pose.__tablename__}.id'), init=self.pose_to_init) + return mapped_column(ForeignKey(f'{Pose.__tablename__}.id'), init=self.pose_to_init,nullable=True) @declared_attr def pose(self): From e1b7abd5d1063628f44e04b7f5135a4e1156272a Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Thu, 29 Aug 2024 10:57:30 +0200 Subject: [PATCH 10/44] Changes camera starting postion --- src/pycram/worlds/bullet_world.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pycram/worlds/bullet_world.py b/src/pycram/worlds/bullet_world.py index 7af5ca325..931bb0cb1 100755 --- a/src/pycram/worlds/bullet_world.py +++ b/src/pycram/worlds/bullet_world.py @@ -385,8 +385,8 @@ def run(self): # Disable the side windows of the GUI p.configureDebugVisualizer(p.COV_ENABLE_GUI, 0, physicsClientId=self.world.id) # Change the init camera pose - p.resetDebugVisualizerCamera(cameraDistance=1.5, cameraYaw=270.0, cameraPitch=-50, - cameraTargetPosition=[-2, 0, 1], physicsClientId=self.world.id) + p.resetDebugVisualizerCamera(cameraDistance=1.5, cameraYaw=63, cameraPitch=-48.75, + cameraTargetPosition=[7.24, -1.1, 6.75], physicsClientId=self.world.id) # Get the initial camera target location camera_target_position = p.getDebugVisualizerCamera(physicsClientId=self.world.id)[11] From 9c91788e43183dc8e406dcd7695d884d9412827f Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Mon, 16 Sep 2024 14:45:22 +0200 Subject: [PATCH 11/44] Adds the Micheal function and the second version --- demos/playingfield/sandcastle.py | 107 ++++++++++++++++++++++++++++++- 1 file changed, 105 insertions(+), 2 deletions(-) diff --git a/demos/playingfield/sandcastle.py b/demos/playingfield/sandcastle.py index 15163ba44..5e6fb0e23 100644 --- a/demos/playingfield/sandcastle.py +++ b/demos/playingfield/sandcastle.py @@ -14,9 +14,11 @@ def param_plan(robot_path,environment_path): world = BulletWorld(WorldMode.GUI) # world= Multiverse(simulation='pycram_test') - robot = Object("pr2", ObjectType.ROBOT, robot_path, pose=Pose([1, 2, 0])) apartment = Object(environment_path[:environment_path.find(".")], ObjectType.ENVIRONMENT, environment_path) + robot = Object("pr2", ObjectType.ROBOT, robot_path, pose=Pose([1, 2, 0])) + + milk_pos=Pose([1, -1.78, 0.55],[1,0,0,0]) milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55],[1,0,0,0]), color=Color(1, 0, 0, 1)) @@ -48,4 +50,105 @@ def move_and_detect(obj_type): ParkArmsAction([Arms.BOTH]).resolve().perform() -# param_plan("pr2.urdf","house_2.urdf") \ No newline at end of file +# param_plan("pr2.urdf","tmp/house_666/house_666.urdf") + + +def param_plan2(robot_path, environment_path): + cheatcode={"/home/nleusmann/catkin_ws/src/pycram/resources/apartment.urdf":[Pose([2.62,2.22,1.1]),Pose([4.8, 3.55, 0.8])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_1/house_1.urdf": [Pose([9.16,-1.07,1.20]), Pose([11.82,-6.2,0.8])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_2/house_2.urdf":[Pose([1, -1.78, 0.55]),Pose([2.71,-0.22,0.75])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_3/house_3.urdf":[Pose([6.02, -5.41, 1]),Pose([10.49,-5.83,0.80])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_4/house_4.urdf":[Pose([5.33, -8.81, 1]),Pose([3.78,-8.71,0.75])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_5/house_5.urdf": [Pose([0.5, -6.61, 1]), Pose([4.46, -4.42, 0.85])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_6/house_6.urdf": [Pose([9.73, -9, 0.80]), Pose([7.17, -5.57, 0.85])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_7/house_7.urdf": [Pose([8.77, -2.88, 1]), Pose([9.34, -4.44, 0.80])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_8/house_8.urdf": [Pose([12.28, -7.76, 1]), Pose([10.02, -12.34, 1])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_9/house_9.urdf": [Pose([6.54, -8.51, 1]), Pose([3.5, -7.8, 0.85])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_10/house_10.urdf": [Pose([8.74, -1.3, 1]), Pose([5.74, -2.91, 1])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_11/house_11.urdf": [Pose([7.03, -2.19, 1]), Pose([3.66, -5.84, 0.75],[1,0,0,0]),Pose([6.7, -3.5, 0])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_42/house_42.urdf":[Pose([7.43,-9.37,1.05]),Pose([11.12,-8.35,0.9])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_666/house_666.urdf":[Pose([7.06,-6.82,1]),Pose([1.25,-3.92,0.75],[1,0,0,0]),Pose([7.17,-7.77,0])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_1337/house_1337.urdf":[Pose([2.45,-0.36,0.9]),Pose([0.61,-5.82,0.8],[1,0,0,0]),Pose([2.34,-1.47,0])]} + world = BulletWorld(WorldMode.GUI) + # world= Multiverse(simulation='pycram_test') + print(environment_path+35*'#') + apartment = Object(environment_path[:environment_path.find(".")], ObjectType.ENVIRONMENT, environment_path) + robot = Object("pr2", ObjectType.ROBOT, robot_path, pose=Pose([1, 2, 0])) + milk_pos = cheatcode[environment_path][0] + put_down_pos=cheatcode[environment_path][1] + move_pos=milk_pos.copy() + move_pos.pose.position.x=move_pos.pose.position.x-0.7 + move_pos.pose.position.z=0 + milk = Object("milk", ObjectType.MILK, "milk.stl", pose=milk_pos,color=Color(1, 0, 0, 1)) + + pick_pose = Pose([1, -1.78, 0.55]) + + robot_desig = BelieveObject(names=["pr2"]) + apartment_desig = BelieveObject(names=["apartment"]) + + @with_simulated_robot + def move_and_detect(obj_type): + NavigateAction(target_locations=[cheatcode[environment_path][2]]).resolve().perform() + + LookAtAction(targets=[milk_pos]).resolve().perform() + + object_desig = DetectAction(BelieveObject(types=[obj_type])).resolve().perform() + + return object_desig + + with simulated_robot: + ParkArmsAction([Arms.BOTH]).resolve().perform() + + MoveTorsoAction([0.25]).resolve().perform() + + milk_desig = move_and_detect(ObjectType.MILK) + + TransportAction(milk_desig, [Arms.LEFT], [put_down_pos]).resolve().perform() + + ParkArmsAction([Arms.BOTH]).resolve().perform() + +# param_plan2("pr2.urdf","/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_6/house_6.urdf") + +def loader(): + for i in range(15): + print(i) + world = BulletWorld(WorldMode.GUI) + # world= Multiverse(simulation='pycram_test') + apartment = Object("house6", ObjectType.ENVIRONMENT,"/home/nleusmann/catkin_ws/src/pycram/resources/apartment.urdf") + world.remove_object_from_simulator(apartment) + +# loader() + + +def generic_plan(inWorld): + world = inWorld + + # milk_pos = Pose([1, -1.78, 0.55], [1, 0, 0, 0]) + # milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55], [1, 0, 0, 0]), + # color=Color(1, 0, 0, 1)) + + pick_pose = Pose([1, -1.78, 0.55]) + + robot_desig = BelieveObject(names=["pr2"]) + apartment_desig = BelieveObject(names=["apartment"]) + + @with_simulated_robot + def move_and_detect(obj_type): + NavigateAction(target_locations=[Pose([2, -1.89, 0])]).resolve().perform() + + LookAtAction(targets=[pick_pose]).resolve().perform() + + object_desig = DetectAction(BelieveObject(types=[obj_type])).resolve().perform() + + return object_desig + + with simulated_robot: + ParkArmsAction([Arms.BOTH]).resolve().perform() + + MoveTorsoAction([0.25]).resolve().perform() + + milk_desig = move_and_detect(ObjectType.MILK) + + TransportAction(milk_desig, [Arms.LEFT], [Pose([4.8, 3.55, 0.8])]).resolve().perform() + + ParkArmsAction([Arms.BOTH]).resolve().perform() \ No newline at end of file From 3139a6ba7e7564596dd9ad408e10c180b68ce3dd Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Mon, 16 Sep 2024 14:46:11 +0200 Subject: [PATCH 12/44] Changes from script so function and adds a second version where the environmnet gets handled by the CEO --- demos/playingfield/ceo.py | 161 +++++++++++++++++++++++++++++--------- 1 file changed, 123 insertions(+), 38 deletions(-) diff --git a/demos/playingfield/ceo.py b/demos/playingfield/ceo.py index 9bfde6b95..a4dfc8f26 100644 --- a/demos/playingfield/ceo.py +++ b/demos/playingfield/ceo.py @@ -1,17 +1,27 @@ import anytree +import psutil +import rospy from txaio.tx import sleep - +import os import requests +from pycram.worlds.bullet_world import BulletWorld +from pycram.datastructures.enums import ObjectType, WorldMode +from pycram.world_concepts.world_object import Object +from pycram.datastructures.pose import Pose + +from pycram.datastructures.dataclasses import Color +from demos.playingfield.sandcastle import generic_plan from pycram import World from pycram.external_interfaces.giskard import giskard_wrapper -from pycram.plan_failures import PlanFailure +from pycram.plan_failures import PlanFailure, IKError from pycram.tasktree import task_tree, reset_tree -from sandcastle import param_plan +from sandcastle import param_plan,param_plan2 import traceback import hashlib import sqlalchemy import pycram.orm.base import pycram.external_interfaces.giskard as giskard +import requester # extension = ObjectDescription.get_file_extension() # Many Plans in many environments with many robots @@ -34,43 +44,118 @@ # environments.append("Murphys_Law") pycram.orm.base.Base.metadata.create_all(engine) session.commit() +# Example usage +base_url = 'http://192.168.102.44/environment/' +download_folder = "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/" +if len(os.listdir(download_folder)) == 0: + print("Downloading new environments") + requester.download_all_files(base_url, download_folder) +else: + print("Environment folder not empty. Stopped download") + -server_ip="192.168.102.44" -server_path="/environment" -v=0 -works=0 -fails=0 -for robot in robots: - for environment in environments: - v+=1 - print("Trying plan: {} with robot: {} in: {}".format("param_plan", robot, environment)) - try: - param_plan(robot, environment) - works+=1 - print("Successfully!\n Overall successful tries: {}".format(works)) - - except PlanFailure as e: - traceback.print_exc() - fails+=1 - print("Fail!\n Overall failed tries: {}".format(fails)) - except FileNotFoundError as e2: - traceback.print_exc() - fails += 1 - print("Fail!\n Overall failed tries: {}".format(fails)) - - finally: +def run(): + v=0 + works=0 + fails=0 + for robot in robots: + for environment in requester.get_all_environments(download_folder): + v+=1 + print("Trying plan: {} with robot: {} in: {}".format("param_plan", robot, environment)) try: - process_meta_data = pycram.orm.base.ProcessMetaData() - process_meta_data.description = "CEO Test run number {} robot:{} enviroment:{}".format(v,robot,environment) - process_meta_data.insert(session) - task_tree.root.insert(session) - except Exception as e: + param_plan2(robot, environment) + works+=1 + print("Successfully!\n Overall successful tries: {}".format(works)) + + except PlanFailure as e: + traceback.print_exc() + fails+=1 + print("Plan Fail!\n Overall failed tries: {}".format(fails)) + + except rospy.service.ServiceException as service_error: + traceback.print_exc() + fails+=1 + print("Service call failed!\n Overall failed tries: {}".format(fails)) + + # except pycram.plan_failures.IKError as ik_error: + # traceback.print_exc() + # fails+=1 + # print("IK Fail!\n Overall failed tries: {}".format(fails)) + except FileNotFoundError as e2: traceback.print_exc() - print("Error while storing the NEEM. This should not happen.") - reset_tree() - World.current_world.exit() - # giskard.giskard_wrapper.clear_world() + fails += 1 + print("Fail!\n Overall failed tries: {}".format(fails)) + + finally: + try: + process_meta_data = pycram.orm.base.ProcessMetaData() + process_meta_data.description = "CEO Test run number {} robot:{} enviroment:{}".format(v,robot,environment) + process_meta_data.insert(session) + task_tree.root.insert(session) + except Exception as e: + traceback.print_exc() + print("Error while storing the NEEM. This should not happen.") + reset_tree() + if World.current_world is not None: + World.current_world.exit() + # sleep(2) + # giskard.giskard_wrapper.clear_world() + + #clear giskard world? + + print("Resume:\nOverall successful tries: {}\nOverall failed tries: {}".format(works,fails)) + + +def runWorld(): + v = 0 + works = 0 + fails = 0 + world=BulletWorld(WorldMode.GUI) + apartment=None + milk_pos = Pose([1, -1.78, 0.55], [1, 0, 0, 0]) + milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55], [1, 0, 0, 0]), + color=Color(1, 0, 0, 1)) + for robot in robots: + robot_obj=Object("pr2", ObjectType.ROBOT, robot, pose=Pose([1, 2, 0])) + for environment in requester.get_all_environments(download_folder): + v += 1 + print("Trying plan: {} with robot: {} in: {}".format("param_plan", robot, environment)) + try: + house_name=environment.split("/")[-1].split(".")[0] + apartment = Object(house_name, ObjectType.ENVIRONMENT,environment) + generic_plan(world) + works += 1 + print("Successfully!\n Overall successful tries: {}".format(works)) + + except PlanFailure as e: + traceback.print_exc() + fails += 1 + print("Plan Fail!\n Overall failed tries: {}".format(fails)) + + except FileNotFoundError as e2: + traceback.print_exc() + fails += 1 + print("Fail!\n Overall failed tries: {}".format(fails)) + + finally: + try: + process_meta_data = pycram.orm.base.ProcessMetaData() + process_meta_data.description = "CEO Test run number {} robot:{} enviroment:{}".format(v, robot, + environment) + process_meta_data.insert(session) + task_tree.root.insert(session) + except Exception as e: + traceback.print_exc() + print("Error while storing the NEEM. This should not happen.") + reset_tree() + if World.current_world is not None and apartment is not None: + world.remove_object(apartment) + milk.set_pose(milk_pos) + print("reseting world") + if World.current_world is None: + world.remove_object(robot_obj) - #clear giskard world? -print("Resume:\nOverall successful tries: {}\nOverall failed tries: {}".format(works,fails)) \ No newline at end of file + print("Resume:\nOverall successful tries: {}\nOverall failed tries: {}".format(works, fails)) + World.current_world.exit() +runWorld() \ No newline at end of file From 38e1910d71dfa92c2095fc5936f260e614a31651 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Mon, 16 Sep 2024 14:47:05 +0200 Subject: [PATCH 13/44] Adds the download helper functions. Maybe need to check the paths etc --- demos/playingfield/requester.py | 78 +++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 demos/playingfield/requester.py diff --git a/demos/playingfield/requester.py b/demos/playingfield/requester.py new file mode 100644 index 000000000..ec133d745 --- /dev/null +++ b/demos/playingfield/requester.py @@ -0,0 +1,78 @@ +# import wget +# import requests +# import bs4 as BeautifulSoup +# from matplotlib.style import available +# from wget import download + + +import os +import requests +from urllib.parse import urljoin +from bs4 import BeautifulSoup + +# Function to download a file from a URL +def download_file(base_url, url, folder): + tree_structure=url.replace(base_url, '') + full_storage_path= os.path.join(folder, tree_structure) + if not os.path.exists(full_storage_path[:full_storage_path.rfind('/')+1]): + os.makedirs(full_storage_path[:full_storage_path.rfind('/')+1], exist_ok=True) + local_filename = os.path.join(folder, url.split('/')[-1]) + # Send HTTP GET request to fetch the file + with requests.get(url, stream=True) as r: + r.raise_for_status() + # Write the content to a file + with open(full_storage_path, 'wb') as f: + for chunk in r.iter_content(chunk_size=8192): + f.write(chunk) + return local_filename + +# Function to get the list of files in a directory on the web server +def get_files_list(base_url): + print("get_files_list({})".format(base_url)) + # Send GET request to the URL + response = requests.get(base_url) + # Parse the HTML response + soup = BeautifulSoup(response.text, 'html.parser') + # Find all links on the page + links = soup.find_all('a') + file_list = set() + files_urls= set() + for link in links: + if link.get('href').endswith('/') and not link.get('href').startswith('/'): + files_urls=files_urls.union(get_files_list(base_url + link['href'])) + + elif link.get('href').endswith(('.usda', '.urdf', '.stl', '.usd', '.hdr')): + files_urls.add(urljoin(base_url, link['href'])) + else: + print("Ignored File: {}".format(link.get('href'))) + # Filter links that point to files + # file_urls = [urljoin(base_url, link['href']) for link in links if link['href'].endswith()] + return files_urls + +# Main function to download all files from a directory +def download_all_files(base_url, folder): + # Ensure the folder exists + os.makedirs(folder, exist_ok=True) + # Get the list of files + files = get_files_list(base_url) + # create_folder_structure(base_url,folder,files) + # Download each file + for file_url in files: + print(f"Downloading {file_url}...") + download_file(base_url,file_url, folder) + print("All files downloaded.") + +# Expect urdf files to be in hte folder below base_url otherwise I stop searching +def get_all_environments(base_url): + urdf_files= [] + for folder in os.listdir(base_url): + for file in os.listdir(os.path.join(base_url, folder)): + if file.endswith('.urdf'): + urdf_files.append(os.path.join(base_url, folder, file)) + return urdf_files + +# +# # Example usage +# base_url = 'http://192.168.102.44/environment/' +# download_folder = "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/" +# download_all_files(base_url, download_folder) From 568cd186a53d3e283457e9bea2afcc04bb2b8fb2 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Tue, 17 Sep 2024 10:39:25 +0200 Subject: [PATCH 14/44] Quick fix for equality. Apparently pybullet creates ids in such a way that the newest object gets the highest free int. Which means if we remove on object and then add another one they will have the same id. --- src/pycram/world_concepts/world_object.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/pycram/world_concepts/world_object.py b/src/pycram/world_concepts/world_object.py index 59ed504fd..88318165b 100644 --- a/src/pycram/world_concepts/world_object.py +++ b/src/pycram/world_concepts/world_object.py @@ -1099,7 +1099,8 @@ def __copy__(self) -> Object: return obj def __eq__(self, other): - return (self.id == other.id and self.world == other.world) if isinstance(other, Object) else False + return (self.id == other.id and self.world == other.world and self.name == other.name) if isinstance(other, + Object) else False def __hash__(self): - return hash((self.id, self.world)) + return hash((self.id, self.world, self.name)) From 7d1feb779f95d18b0ab385797f67bd1250a58f2a Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Fri, 18 Oct 2024 14:59:02 +0200 Subject: [PATCH 15/44] small change to refelct the changes in the Enum --- src/pycram/process_module.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pycram/process_module.py b/src/pycram/process_module.py index a1ee38f19..eca953db6 100644 --- a/src/pycram/process_module.py +++ b/src/pycram/process_module.py @@ -220,7 +220,7 @@ def plan(): def wrapper(*args, **kwargs): pre = ProcessModuleManager.execution_type - ProcessModuleManager.execution_type = ExecutionType.Simulated + ProcessModuleManager.execution_type = ExecutionType.SIMULATED ret = func(*args, **kwargs) ProcessModuleManager.execution_type = pre return ret From 62af0016e9653d47d86a594ebe5ab36201d03718 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Tue, 29 Oct 2024 15:48:19 +0100 Subject: [PATCH 16/44] Move from functions to class --- demos/playingfield/requester.py | 178 +++++++++++++++++++++----------- 1 file changed, 116 insertions(+), 62 deletions(-) diff --git a/demos/playingfield/requester.py b/demos/playingfield/requester.py index ec133d745..d7a3acdc5 100644 --- a/demos/playingfield/requester.py +++ b/demos/playingfield/requester.py @@ -4,75 +4,129 @@ # from matplotlib.style import available # from wget import download - +import fnmatch import os import requests from urllib.parse import urljoin from bs4 import BeautifulSoup +import rospkg + +rospack = rospkg.RosPack() +filename = rospack.get_path('pycram') + +class ProcThorInterface: + def __init__(self,base_url="http://procthor.informatik.uni-bremen.de:5000",source_folder=os.path.join(rospack.get_path('pycram'),"resources/tmp/")): + self.base_url=base_url + self.source_folder=source_folder + self.stored_environments=[] + self.stored_environments.extend(self.get_all_environments_stored_below_folder(self.source_folder)) + + def _download_file(self, base_url, full_url, folder): + print("base_url:{} full_url:{} folder:{}".format(base_url,full_url,folder)) + tree_structure = full_url.replace(base_url, '') + # print("tree_structure:{}".format(tree_structure)) + if tree_structure.startswith("/"): + tree_structure = tree_structure[1:] + # print("folder:{} tree_structure:{} joined_path:{}".format(folder,tree_structure,os.path.join(folder, tree_structure))) + full_storage_path = os.path.join(folder, tree_structure) + # print("tree_structure:{} full_storage_path:{}".format(tree_structure,full_storage_path)) + if not os.path.exists(full_storage_path[:full_storage_path.rfind('/') + 1]): + print(full_storage_path[:full_storage_path.rfind('/') + 1]) + os.makedirs(full_storage_path[:full_storage_path.rfind('/') + 1], exist_ok=True) + local_filename = os.path.join(folder, full_url.split('/')[-1]) + # Send HTTP GET request to fetch the file + with requests.get(full_url, stream=True) as r: + r.raise_for_status() + # Write the content to a file + with open(full_storage_path, 'wb') as f: + for chunk in r.iter_content(chunk_size=8192): + f.write(chunk) + return local_filename + + # Function to get the list of files in a directory on the web server + def _get_files_list(self, base_url): + print("get_files_list({})".format(base_url)) + # Send GET request to the URL + response = requests.get(base_url) + # Parse the HTML response + soup = BeautifulSoup(response.text, 'html.parser') + # Find all links on the page + links = soup.find_all('a') + file_list = set() + files_urls = set() + for link in links: + if link.get('href').endswith('/') and not link.get('href').startswith('/'): + # print(10*'§') + # print(os.path.join(base_url, link['href'])) + # print(10 * '§') + files_urls = files_urls.union(self._get_files_list(os.path.join(base_url, link['href']))) + + elif link.get('href').endswith(('.usda', '.urdf', '.stl', '.usd', '.hdr')): + # print(10 * '!') + # print(os.path.join(base_url, link['href'])) + # print(urljoin(base_url, link['href'])) + # print(10 * '!') + files_urls.add(os.path.join(base_url, link['href'])) + else: + print("Ignored File: {}".format(link.get('href'))) + # Filter links that point to files + # file_urls = [urljoin(base_url, link['href']) for link in links if link['href'].endswith()] + return files_urls + + # Main function to download all files from a directory + def download_all_files_from_URL(self, base_url, folder): + # Ensure the folder exists + os.makedirs(folder, exist_ok=True) + # Get the list of files + files = self._get_files_list(base_url) + # create_folder_structure(base_url,folder,files) + # Download each file + print(files) + for file_url in files: + print(f"Downloading {file_url}...") + self._download_file(base_url, file_url, folder) + print("All files downloaded.") -# Function to download a file from a URL -def download_file(base_url, url, folder): - tree_structure=url.replace(base_url, '') - full_storage_path= os.path.join(folder, tree_structure) - if not os.path.exists(full_storage_path[:full_storage_path.rfind('/')+1]): - os.makedirs(full_storage_path[:full_storage_path.rfind('/')+1], exist_ok=True) - local_filename = os.path.join(folder, url.split('/')[-1]) - # Send HTTP GET request to fetch the file - with requests.get(url, stream=True) as r: - r.raise_for_status() - # Write the content to a file - with open(full_storage_path, 'wb') as f: - for chunk in r.iter_content(chunk_size=8192): - f.write(chunk) - return local_filename + # Returns a list of all the urdf files in a given folder structure if non is given uses the base_source_folder + # only look for urdf, but can be easly adapted + def get_all_environments_stored_below_folder(self, source_folder): + urdf_files = [] + urdf_file={} + #ToDo:apritrarry depth + for root, dirs, files in os.walk(source_folder): + for filename in fnmatch.filter(files, '*.urdf'): + urdf_file["name"]=filename.rsplit('.', 1)[0] + urdf_file["storage_place"] = os.path.join(root, filename) + urdf_files.append(urdf_file.copy()) + return urdf_files -# Function to get the list of files in a directory on the web server -def get_files_list(base_url): - print("get_files_list({})".format(base_url)) - # Send GET request to the URL - response = requests.get(base_url) - # Parse the HTML response - soup = BeautifulSoup(response.text, 'html.parser') - # Find all links on the page - links = soup.find_all('a') - file_list = set() - files_urls= set() - for link in links: - if link.get('href').endswith('/') and not link.get('href').startswith('/'): - files_urls=files_urls.union(get_files_list(base_url + link['href'])) + def download_one_random_environment(self): + endpoint="GetRandomEnvironment" + full_url=os.path.join(self.base_url,endpoint) + response = requests.get(full_url) + self.download_all_files_from_URL(response.json()["storage_place"],self.source_folder) + self.stored_environments.append(response.json()) + return response.json() - elif link.get('href').endswith(('.usda', '.urdf', '.stl', '.usd', '.hdr')): - files_urls.add(urljoin(base_url, link['href'])) - else: - print("Ignored File: {}".format(link.get('href'))) - # Filter links that point to files - # file_urls = [urljoin(base_url, link['href']) for link in links if link['href'].endswith()] - return files_urls + def download_num_random_environment(self, num_of_environments): + endpoint="GetNumEnvironment" + full_url=os.path.join(self.base_url,endpoint,str(num_of_environments)) + response = requests.get(full_url) + for env in response.json(): + print(env) + self.download_all_files_from_URL(env["storage_place"],self.source_folder) + self.stored_environments.append(env) + return response.json() -# Main function to download all files from a directory -def download_all_files(base_url, folder): - # Ensure the folder exists - os.makedirs(folder, exist_ok=True) - # Get the list of files - files = get_files_list(base_url) - # create_folder_structure(base_url,folder,files) - # Download each file - for file_url in files: - print(f"Downloading {file_url}...") - download_file(base_url,file_url, folder) - print("All files downloaded.") -# Expect urdf files to be in hte folder below base_url otherwise I stop searching -def get_all_environments(base_url): - urdf_files= [] - for folder in os.listdir(base_url): - for file in os.listdir(os.path.join(base_url, folder)): - if file.endswith('.urdf'): - urdf_files.append(os.path.join(base_url, folder, file)) - return urdf_files -# -# # Example usage -# base_url = 'http://192.168.102.44/environment/' -# download_folder = "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/" -# download_all_files(base_url, download_folder) +procThorInterface=ProcThorInterface(base_url="http://127.0.0.1:5000") +# print(procThorInterface.stored_environments) +# print(10*'#') +# print(procThorInterface.download_num_random_environment(3)) +# print(10*'#') +# print(procThorInterface.stored_environments) +# # print(procThorInterface.download_num_random_environment(3)) +# for key in procThorInterface.stored_environments: +# print(key) +# print(key,procThorInterface.stored_environments[key]) \ No newline at end of file From ea85ba607ec82aedf97e92b77a1f758df6263fc3 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Tue, 29 Oct 2024 15:49:59 +0100 Subject: [PATCH 17/44] Changed from functions to class and simplyfies the download --- demos/playingfield/ceo.py | 59 ++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/demos/playingfield/ceo.py b/demos/playingfield/ceo.py index a4dfc8f26..082f5bf0f 100644 --- a/demos/playingfield/ceo.py +++ b/demos/playingfield/ceo.py @@ -4,6 +4,8 @@ from txaio.tx import sleep import os import requests + +from demos.playingfield.requester import procThorInterface from pycram.worlds.bullet_world import BulletWorld from pycram.datastructures.enums import ObjectType, WorldMode from pycram.world_concepts.world_object import Object @@ -13,17 +15,16 @@ from demos.playingfield.sandcastle import generic_plan from pycram import World from pycram.external_interfaces.giskard import giskard_wrapper -from pycram.plan_failures import PlanFailure, IKError -from pycram.tasktree import task_tree, reset_tree +from pycram.failures import PlanFailure, IKError +from pycram.tasktree import task_tree from sandcastle import param_plan,param_plan2 import traceback import hashlib import sqlalchemy import pycram.orm.base import pycram.external_interfaces.giskard as giskard -import requester +from requester import ProcThorInterface -# extension = ObjectDescription.get_file_extension() # Many Plans in many environments with many robots # Don't know where to store NEEM so I start with the memory db engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=False) @@ -32,38 +33,36 @@ # ToDo: Many Plans missing, but this needs function pointers and I am not comfortable with it # plans=[] robots =[] -environments=[] robot_name="pr2.urdf" -environment_name="house_2.urdf" robots.append(robot_name) -# environments.append("house_42.urdf")g -environments.append("apartment.urdf") -environments.append("house_1337.urdf") -environments.append("house_666.urdf") -# environments.append(environment_name) -# environments.append("Murphys_Law") pycram.orm.base.Base.metadata.create_all(engine) session.commit() -# Example usage -base_url = 'http://192.168.102.44/environment/' +#Set up for ProcThor stuff Example usage +base_url = 'http://procthor.informatik.uni-bremen.de/environment/' download_folder = "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/" -if len(os.listdir(download_folder)) == 0: - print("Downloading new environments") - requester.download_all_files(base_url, download_folder) -else: - print("Environment folder not empty. Stopped download") +procThorInterface=ProcThorInterface(base_url="http://procthor.informatik.uni-bremen.de:5000/") +number_of_test_environment=5 + +#Get Environments +number_of_known_environment=len(procThorInterface.get_all_environments_stored_below_folder(procThorInterface.source_folder)) +print("Number of known Environments:{}".format(number_of_known_environment)) +print("Number of needed Testenvironments:{}".format(number_of_test_environment)) +if number_of_known_environment < number_of_test_environment: + print("Downloading missing environments...") + procThorInterface.download_num_random_environment(number_of_test_environment-number_of_known_environment) def run(): + known_environments=procThorInterface.get_all_environments_stored_below_folder(procThorInterface.source_folder) v=0 works=0 fails=0 for robot in robots: - for environment in requester.get_all_environments(download_folder): + for environment in known_environments: v+=1 - print("Trying plan: {} with robot: {} in: {}".format("param_plan", robot, environment)) + print("Trying plan: {} with robot: {} in: {}".format("param_plan", robot, environment["name"])) try: - param_plan2(robot, environment) + param_plan(robot, environment["storage_place"]) works+=1 print("Successfully!\n Overall successful tries: {}".format(works)) @@ -89,13 +88,13 @@ def run(): finally: try: process_meta_data = pycram.orm.base.ProcessMetaData() - process_meta_data.description = "CEO Test run number {} robot:{} enviroment:{}".format(v,robot,environment) + process_meta_data.description = "CEO Test run number {} robot:{} enviroment:{}".format(v,robot,environment["name"]) process_meta_data.insert(session) task_tree.root.insert(session) except Exception as e: traceback.print_exc() print("Error while storing the NEEM. This should not happen.") - reset_tree() + task_tree.reset_tree() if World.current_world is not None: World.current_world.exit() # sleep(2) @@ -110,6 +109,7 @@ def runWorld(): v = 0 works = 0 fails = 0 + known_environments = procThorInterface.get_all_environments_stored_below_folder(procThorInterface.source_folder) world=BulletWorld(WorldMode.GUI) apartment=None milk_pos = Pose([1, -1.78, 0.55], [1, 0, 0, 0]) @@ -117,12 +117,11 @@ def runWorld(): color=Color(1, 0, 0, 1)) for robot in robots: robot_obj=Object("pr2", ObjectType.ROBOT, robot, pose=Pose([1, 2, 0])) - for environment in requester.get_all_environments(download_folder): + for environment in known_environments: v += 1 - print("Trying plan: {} with robot: {} in: {}".format("param_plan", robot, environment)) + print("Trying plan: {} with robot: {} in: {}".format("param_plan", robot, environment["name"])) try: - house_name=environment.split("/")[-1].split(".")[0] - apartment = Object(house_name, ObjectType.ENVIRONMENT,environment) + apartment = Object(environment["name"], ObjectType.ENVIRONMENT,environment["storage_place"]) generic_plan(world) works += 1 print("Successfully!\n Overall successful tries: {}".format(works)) @@ -147,7 +146,7 @@ def runWorld(): except Exception as e: traceback.print_exc() print("Error while storing the NEEM. This should not happen.") - reset_tree() + task_tree.reset_tree() if World.current_world is not None and apartment is not None: world.remove_object(apartment) milk.set_pose(milk_pos) @@ -158,4 +157,6 @@ def runWorld(): print("Resume:\nOverall successful tries: {}\nOverall failed tries: {}".format(works, fails)) World.current_world.exit() + + runWorld() \ No newline at end of file From e2b43e15e121cb70e6dd92dec716c3539ce41229 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Tue, 29 Oct 2024 15:52:30 +0100 Subject: [PATCH 18/44] Delete house_2 --- resources/house_2.urdf | 198 ------------------ resources/house_2/meshes/stl/AlarmClock_2.stl | Bin 49484 -> 0 bytes resources/house_2/meshes/stl/Bed_20.stl | Bin 96684 -> 0 bytes resources/house_2/meshes/stl/Bin_26.stl | Bin 37984 -> 0 bytes resources/house_2/meshes/stl/Doorway_9.stl | Bin 56084 -> 0 bytes .../house_2/meshes/stl/Houseplant_18.stl | Bin 93184 -> 0 bytes resources/house_2/meshes/stl/Pillow_3.stl | Bin 45284 -> 0 bytes .../RobothorBasketballRhodeIslandNovelty.stl | Bin 48084 -> 0 bytes .../meshes/stl/RobothorDresserRast.stl | Bin 70084 -> 0 bytes .../house_2/meshes/stl/RobothorPencil.stl | Bin 8484 -> 0 bytes .../stl/RobothorTennisRacquetSpeedKids.stl | Bin 92084 -> 0 bytes resources/house_2/meshes/stl/Wall_0.stl | Bin 684 -> 0 bytes resources/house_2/meshes/stl/Wall_1.stl | Bin 684 -> 0 bytes resources/house_2/meshes/stl/Wall_2.stl | Bin 684 -> 0 bytes resources/house_2/meshes/stl/Wall_3_0.stl | Bin 684 -> 0 bytes resources/house_2/meshes/stl/Wall_3_1.stl | Bin 684 -> 0 bytes resources/house_2/meshes/stl/Wall_3_2.stl | Bin 684 -> 0 bytes .../house_2/meshes/usd/AlarmClock_2.usda | 16 -- resources/house_2/meshes/usd/Bed_20.usda | 16 -- resources/house_2/meshes/usd/Bin_26.usda | 16 -- resources/house_2/meshes/usd/Doorway_9.usda | 16 -- .../house_2/meshes/usd/Houseplant_18.usda | 16 -- resources/house_2/meshes/usd/Pillow_3.usda | 16 -- .../RobothorBasketballRhodeIslandNovelty.usda | 16 -- .../meshes/usd/RobothorDresserRast.usda | 16 -- .../house_2/meshes/usd/RobothorPencil.usda | 16 -- .../usd/RobothorTennisRacquetSpeedKids.usda | 16 -- resources/house_2/meshes/usd/Wall_0.usda | 16 -- resources/house_2/meshes/usd/Wall_1.usda | 16 -- resources/house_2/meshes/usd/Wall_2.usda | 16 -- resources/house_2/meshes/usd/Wall_3_0.usda | 16 -- resources/house_2/meshes/usd/Wall_3_1.usda | 16 -- resources/house_2/meshes/usd/Wall_3_2.usda | 16 -- .../meshes/usd/from_stl/AlarmClock_2.usda | 26 --- .../house_2/meshes/usd/from_stl/Bed_20.usda | 26 --- .../house_2/meshes/usd/from_stl/Bin_26.usda | 26 --- .../meshes/usd/from_stl/Doorway_9.usda | 26 --- .../meshes/usd/from_stl/Houseplant_18.usda | 26 --- .../house_2/meshes/usd/from_stl/Pillow_3.usda | 26 --- .../RobothorBasketballRhodeIslandNovelty.usda | 26 --- .../usd/from_stl/RobothorDresserRast.usda | 26 --- .../meshes/usd/from_stl/RobothorPencil.usda | 26 --- .../RobothorTennisRacquetSpeedKids.usda | 26 --- 43 files changed, 714 deletions(-) delete mode 100644 resources/house_2.urdf delete mode 100644 resources/house_2/meshes/stl/AlarmClock_2.stl delete mode 100644 resources/house_2/meshes/stl/Bed_20.stl delete mode 100644 resources/house_2/meshes/stl/Bin_26.stl delete mode 100644 resources/house_2/meshes/stl/Doorway_9.stl delete mode 100644 resources/house_2/meshes/stl/Houseplant_18.stl delete mode 100644 resources/house_2/meshes/stl/Pillow_3.stl delete mode 100644 resources/house_2/meshes/stl/RobothorBasketballRhodeIslandNovelty.stl delete mode 100644 resources/house_2/meshes/stl/RobothorDresserRast.stl delete mode 100644 resources/house_2/meshes/stl/RobothorPencil.stl delete mode 100644 resources/house_2/meshes/stl/RobothorTennisRacquetSpeedKids.stl delete mode 100644 resources/house_2/meshes/stl/Wall_0.stl delete mode 100644 resources/house_2/meshes/stl/Wall_1.stl delete mode 100644 resources/house_2/meshes/stl/Wall_2.stl delete mode 100644 resources/house_2/meshes/stl/Wall_3_0.stl delete mode 100644 resources/house_2/meshes/stl/Wall_3_1.stl delete mode 100644 resources/house_2/meshes/stl/Wall_3_2.stl delete mode 100644 resources/house_2/meshes/usd/AlarmClock_2.usda delete mode 100644 resources/house_2/meshes/usd/Bed_20.usda delete mode 100644 resources/house_2/meshes/usd/Bin_26.usda delete mode 100644 resources/house_2/meshes/usd/Doorway_9.usda delete mode 100644 resources/house_2/meshes/usd/Houseplant_18.usda delete mode 100644 resources/house_2/meshes/usd/Pillow_3.usda delete mode 100644 resources/house_2/meshes/usd/RobothorBasketballRhodeIslandNovelty.usda delete mode 100644 resources/house_2/meshes/usd/RobothorDresserRast.usda delete mode 100644 resources/house_2/meshes/usd/RobothorPencil.usda delete mode 100644 resources/house_2/meshes/usd/RobothorTennisRacquetSpeedKids.usda delete mode 100644 resources/house_2/meshes/usd/Wall_0.usda delete mode 100644 resources/house_2/meshes/usd/Wall_1.usda delete mode 100644 resources/house_2/meshes/usd/Wall_2.usda delete mode 100644 resources/house_2/meshes/usd/Wall_3_0.usda delete mode 100644 resources/house_2/meshes/usd/Wall_3_1.usda delete mode 100644 resources/house_2/meshes/usd/Wall_3_2.usda delete mode 100644 resources/house_2/meshes/usd/from_stl/AlarmClock_2.usda delete mode 100644 resources/house_2/meshes/usd/from_stl/Bed_20.usda delete mode 100644 resources/house_2/meshes/usd/from_stl/Bin_26.usda delete mode 100644 resources/house_2/meshes/usd/from_stl/Doorway_9.usda delete mode 100644 resources/house_2/meshes/usd/from_stl/Houseplant_18.usda delete mode 100644 resources/house_2/meshes/usd/from_stl/Pillow_3.usda delete mode 100644 resources/house_2/meshes/usd/from_stl/RobothorBasketballRhodeIslandNovelty.usda delete mode 100644 resources/house_2/meshes/usd/from_stl/RobothorDresserRast.usda delete mode 100644 resources/house_2/meshes/usd/from_stl/RobothorPencil.usda delete mode 100644 resources/house_2/meshes/usd/from_stl/RobothorTennisRacquetSpeedKids.usda diff --git a/resources/house_2.urdf b/resources/house_2.urdf deleted file mode 100644 index 5b26f09bb..000000000 --- a/resources/house_2.urdf +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/house_2/meshes/stl/AlarmClock_2.stl b/resources/house_2/meshes/stl/AlarmClock_2.stl deleted file mode 100644 index db94ec70c29c64205c5b77373aad4dc3b342db58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49484 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

9O7^Y%c+%6sjGje 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 diff --git a/resources/house_2/meshes/stl/RobothorPencil.stl b/resources/house_2/meshes/stl/RobothorPencil.stl deleted file mode 100644 index 59dee4668ff663807d92ed578202108bc9335881..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8484 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 U)3p*;)v={+HR4!H{27V=0MdQ(xBvhE diff --git a/resources/house_2/meshes/stl/RobothorTennisRacquetSpeedKids.stl b/resources/house_2/meshes/stl/RobothorTennisRacquetSpeedKids.stl deleted file mode 100644 index a6557efc22327359905c186dcaa81faf636211f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92084 zcmbTfXLQv@`@KE%-a-xC^bQ7NFg`~zozQzPrZ>|~HO2H0Adt{|uQ34|8w@^@NWiq1 zPUyWu2)zYDc=t$0Vaw$A{MUN(fu&gc(mnT#M$(K%`_vvac+k+$o;?co8aik|!5Sew z2lnVWw5(q_-*Ud<|IdFFQVH?X+WmU=OA(%)lS9fpZpY`^03EAs5S-M}jw=Blh7Mb%N zCc1Q*rgW;i&a5{fG!R7=#<+SVB3SkM)wF+WU5K2s%jtemVQSUP)7%dZ{-VWB9*#N} zqV0J@>o9JJEARJ50++Vkt1T%o+9iBtT^-$4L4P$rO#N&5w+@0;?Snkpj5_1YBMH&+ z;R^l4w4v&)Bir4)hly1wVzg3YCwtrDLG@Mo*;+%@*;#iw2v!}tyGtvvZK^lM;YVo# zM`rA&cIbIR;j-6Q@`v_e!eCeWEvEwI_V@pEas@B>3e=!2MdOk+8K723x9{NQ59;EUfKCaxJcci>ap3_3~$gn)_c=TcA;l%!55VopO zTTSa(&(BMI?pNU|@99=|uhuQ&wLp2?X-8tT!m$~=#E|Q+qAkivu) zmCHWylSdn#v9p;+x9@jrW7^dT9MebE?$(pdl)r;I=#M6ZItW%NgQK+UJ0b%ggh(Rg zf}(28xH885WV;mJ;~+}JXjv!w28Q~{b2oSDoNARV6^%9bPB;jKRQq%9&>}A`56pG= zFbMhIU)v8?l9}`MihB|FE+Jxr<0}nFcKQo~ReZG*BKmrm`mRB5cYCd@<62T_^bAD| z&KxDe-}$Y){H;=N`A^6?e1{NS4~D7xJbm32PnCBNtl}$?5ZyBmQTrB{qs)7wDy;f* z8QJvfsmfTtQtrd%6|QNMA?nAAbCnUZD?12QIb$4NuxRI>rJ~HtIotNN zCM!)U7jfUix!Wdef>Lwp*XFiaxnh0u<6jW0a@N)Or=8Ry5mdNNIJqu7h9|=Ojeh9Vd2LWeZoi>_MKfO0n+-nq`j~ zJwnk}cA`A~i(nP!Bt*5K+UmpsIn`ROVG5Uhz@s5bxilM)$G*tq$%ZIDwp{BzV77-} zo7!r8>95t?zjtvEtm2%6_-0r0N= zIn?NrwbU(>CpZXJaZW-kzVD7sT`;>@DlYr%pV}(Q4$XZFc?_Q3O4&Uo%G|bE;!N<& zF9=p~PC}I0d`!vvcPDjN!a{}1zMz+?Bsp?Z_K&D#2NfkW`!#PKx1S{_NjG;<8?Bh_ zAXvpY3DIK6R+LEo7p`*IYXrNMt5N67vTJXvD)TlbP#*t9u!?gMVn>!aO4PwV>dc2L z6fS!}zQRgW>6geOb5z|8g_JVopSnF}dz=pVUis&BUp4N#MGk^hoRbjAcGj#^Z%MS@ zr%w}9E_>E%KFXQ?_uV(p9vv?fP_mA>@*jCH!79#4h!Lye-9yq0Rr5DorEuBzTu-4y z6#mQ1qreX-lsp+BPC{gO({gA17FHfy_HQa2b3cxHWag2l-Z6K-y*H>m zrtUdz=D`H3I43+U&2OWx8a+tu*ZBv9%l_f;Ot&Y^1G9g`-$Gash^<@VK zs#9JsbP%lKoPB*gV*d-Madda8%VO;Wh*H-dcJ6HA;#9=KlREad)EPw@8hfm?U!P51Xui-*p1 z5Uk>ygcxx1^iI3ia@lV@D&d}i^IBf7T2CnF4*x68o5%PSfBbu8V1iYglMu^;-|CCc zwpEj+?XGayGq!QNmTldRJoZH@RcgAr9*OYYKMucqsb8qjR&CmUjDuhm=VWE@UA+?( zW&hx^Cppo}WvCm?d&cRRlU=`LSmC{Ye80H0pJ&^GF9=p~PC~r-p@6Y@c@4GPl0b#a z{>s(dGkDiDe9Wq6z7M~{XG5p+h!h2u!?gMqS(jcM&3VNs;8ij!e#G2DxKD^Xb|!U ziY)amwU+9W%llm7SG}0=Yg)JZ{kZ@K!79$lYL9|Dea*WXm%Zxge>^4nRWQq*^ZFx? ze@5$BONhH&W=3zjx6jO+3084VLS$K&&X~KSg?jx{I)%&ra94LN&9fB9LquNM6RbVe zlDVz1bEaZxjowBJwQ6KR2f-@N$;v~^S;fqQ%f4w#TWwzF$L0uPa>*uIm93|}qY23z zycYBY!79#4h&pRu>SfDxQP&wy++6mBZ5C@aF77s;qgSn6sO|ne+B@bfoAudZ5n!9lQ!a}pw8!|3Q)YYUm9J1#qq=y;@OWw6Gb+H4Od zSj9OBvFPtwaTiZaP@jy?>zFmDiScswNug*DA>`QE9;*v6VNve5tw$%QNuL#Q5Uk>n zz7R80Z{KOxE{~mgOfI+WakQnC|H?Z~V!~GO=v9c$Y5(y~eub-iEVr@@VVz zoGHrLp(WgD&6&G?AO?U~gIP5uSjDqnnDN>Yr~KUDrn@gP=RHjD7!I=rTjP}QhBw{q z5)rK8(W?-TD>qZithu6;KptFn9&IJfF+q8@B-ES7K@dYhj88apZm)Xj3Xmd5%#YRv3ASb4f_wL7(WUeyP&5kx<<2NSH~n#L&U@KU99oxzHnd*wY$ z@K_Y3I7|^#H`kj-9uNaS$k}ry zSj9ChM8Ca3#{QgXjKioa-owQFoV}D`b?11WueyTR10o&jiV0S6+X(UOSSIype4v^c z1h)Z?ey8VauY5E9S9eOYJ)VGg0wP}`f>m78LVQ(opi=GoWl9J#=RHjDm|BRkAVNXN z{=o#RxNU^E8b3fEt1r_#g5Wmb5%&A+EfxQWZQk}63Bnh|z(fSAxTb~3H7S!}dXh+H@)T{tm2v$;z-JP{YLUOMpfK#cn=f%XH`-B z>cxAqo$LL3PFL%VWwuigy=w*k+1 zR8b2kNs^uSw#PaUCqT&eQB1IkYg&k2dB4{OE$nJ6NA2<+CJukfuZ%a&dfTG~h^ipg zqpp}>6}JtpiD`6qiDv!PRv@?ycvhwGw<(m2`U`J+1cE3BA}|rbDz0fErVY&J-uV1i zr6n@wJxuV-3!cb8bOj-w;h10*w~Y{o&(_l3cKubC1h)at+?36bLRr23s<%BtL0ktR zp8%L(71y*7+ZO++DeL}`+XAo767g1TaYRoph1lldiwR<%Wl zIuQi70nZK%7@6QMsy_3!$0iUpKr~E5u!?J1i0y|)domr`ugH5X?_q*xkc8NHc(f-E z2w7K5u!`G8h~CY^T^|nYH`{~TfM=izCO_^TSy=(=6k>22@GRGwIkVg| zQrz;MS4BXa1Tj1j!78q4w8uAFHBXSC$ZHAjVS;DEFdhW43xqt|nP3&SjS!bkM!1*c zHFWu;&uzdnY3Vo3aW~F>%$vs?5IsT2I}Q`9;+hts#ImMJhR9wuol5P=_K0w*k-Ah372dzPkCSH;?`xx`2?SVuDp% z(?Yyxm_@((Hb!ZV%y|zJJO?Pmk03^Y=$(jQ6}OELyS8Uj%GZn01C;r@m+6B+a2xOp?WATu$KChu>m8q0IzK@96NJ3NF~KUXX`CgqGN}*V1{&Fs zIqzX&&Ao+jb=LRvj?X1=2SnLK1gp4hgy`#=*Lb$XSIr25+kj_*hn7yMZD|tV&7(Vr z2O!i$1gp5FG3M+sQLpSXPw9%xc@Gmjw=6{Ro)h&-Ai5+XSjBCF=iPc(hZZnTmsdD$ z1Da3mo?vr<|+FcNxK;%h8u!?IM^H&90 z>xI5vZ_bzS9wvB>9HZ3yt@Wq5)+=&szyzzfZG@PzsI{{C`8sp_!EL}Z=8Hyrqiq^% zc=PBBA`C=7#9)F|T+`?uQp(g=MJ2yO$O`Cs_^_u7>-^J)-SPw#u&zWEqw~Y|fpG4}h`8%j( z(i~8@4fu`8(w5O$jXJ|!N6qnho41jARG|)Pd$b1=tm2v$VnL~_`lYHd%G3oRD(_)} z-?s=+duCSs_en9zJk+j(pmlcKHbS^MKX5-t^0R(l3{trb_^nK-MccIECmsY|3X?17 zTBlE1&EOfv@u!`FT^P-KXYZ>S6Q+`N{b{G6SsbxUF> zAFewIR`L5CyjPoCRFAyYN8S7o*F;+7$uW3+st`-w7SK;_?xQZqaL_@p%K1JjWuN)_ zc%NXk-1B&aRgM^r^J;FEdAhM7SiQOEfP>((gwIML8drX!z3v{X>^d8wvWjEyicKMs z)cl~8ei*BSZ*UTdedc)CqX*)%$EaIGVOV;64Mj{kT*a708F z7q7oWdt^$c9!OTpsMqC?gJ6|&o#l~!s#4rFOdp&wRAm*%;Pt6O6xmc?xm9z3-ssFQ z2f-@md$oe?3M(zNS$d(pLseFB3_g$X^g1D}a_7?~J+{>#2f-@tT|$ih?TXSmu)fi) z)OCeb9E0l+YwptAQC=j}Gv1`V>L6IfeMN}pb2_Vwo~+cbTsWZcTG!|Udo+9X_^n2} zwa=^7l^@!xZz^rpQzaaC5Uk=gutF^DxLcVUok>sH81pi;W_Q(Y1IM-2>~lOJ_T4hRoW9X@^{%MQZ}v?p3w1r}ny465 z8DlQ;n49NYcc)e@jn*GCsJw@XveVq!sL?xIkIXz4j4P*HST@Qi{-%_|1gp|z$)&Ac zskt7TMB%@38gnaGQIGZUD7%xN^^^(A=^l<6y>PaRXR*7wyMEsVfx)%vd)hwy#(l>m zTFfYAJW&)i`Ri~u6Reuw`*+XKMLFFMOrqlD_)718k1^L8a0_z%aJ^Y)$=efaz93k| z?T^{>N4eek*XHunIzB;V)zQ_DJ^9N=xk8as`o)>GR$Fzm)`i%cKO}DB>}b!Xr%r-Z z&KT>@e&ycXZmuWlw+Sk%IL419G|zXzY1~5*PYAVOYnL&#tZVO^2`ca5dgF5eZe^U*YQUlA6C7s=$KxXjk=~f&DIT=hmHmM;#)&cQJ)uin?w>m@bhM@r?I!IG4B9zA zu;D*Wg4>)+D8%f@@>;gxt=+r&PEdIdpNY;qQcO>0EUK1C8Na%P%C*RObRLvV%e-oj z_iV4XVx)26ct_<>$utTRtjc{NyViC0F4qn7yjuQ#fN^(9sPZ0tkO@|CpBLitj|0`8 zGxgWMK|kld-T%^kPuih7%s#=bDa3gY3qbTvM6im_HzBG{?5HLjx}X;Z!N+ZMKi0GI zeJZn0I9sqBh?5{%Cn8wI@q|c7sG@c_nbmNoJEZV&H~i-E>`{Zvp33cy(Zt>A>fi%8 zjOccA9R#a59_E(br!}^1Xr_9mDGK-JTc?AxXP-P~U2*&4jme-)#)Y{p)Cps{yP04W zpFKich*+pU+mJ**GjXWnZ0Bnix4#fSuXv@WJ*LOiza8u#SjFcU#)D5f8+A_`df``V z6;^Q!=QZ*4v?j)txKzgNUgI4EtN0wlJFm9c)g_OElz~C@RqjPxyPE?8JU5oscHcJ7 z-LiRVsqY6S)pytTQF#v&+?qn{ci&eYZMmaV+*@1aYc0p)BMI@x#QXY%*A0zvb&n`~ z2jKSbFH>C`yExi=H^|;~tWj^%Cie~_yTU4Nb0?8`)p)gjjk8*_ROu@5ozvXjQO*4F z#qMd=bv+}94*7ZB)>xe4vQ?>Aq5) zh;p^fRi)g{98ZWxtLv!k!+i`{LMB*cZ_CnRCE)6TYR=vH^%rwCDNOL0!SS$~N(@z9 zy-Is>KisISoLtKDa#4M=R7~)ZFruGbNL{2ARA&ylr(}w+=6N-(kxB4b$+QslGbd5U z9<8XBOP^F_f>j(_hzD0o8Fg1E>gG*FU3@L!7#~VF1{-Mn{l(3fxR&i`RA;*5uuV3nH zy!DKFqI}bG~W=f(>&FIpal(Tvi6MQ5gswa0T6^4cxgMEG6tYUgt z=3H92b()!<5TpL8pqwl^)~G$F>0TyS#aC3k`B7RMz6H}8K6NL?P5UjoR`tv-^H_YX zbrSQ^w=zyW&0w_6Ph9)skjEVMk*pERMiA%Id`Ym%-j+wj)i1vBo|cUxlr~w0 zs2#3P(d)k~@9I`;nk(g6N!xV3j;lo9OAT zmgObU?^DR0ugm(YcP~{kW7vC`_-gn_ebgh}b>PY?T&ZU)n78MIufJOGoReVHxQSCu zV*YYTYz^NNkS@B4I=MkbHS@sRT3FGguFWSR178Pq(-)0e>KfZ9DzINfS3P$?8&~I; z0F=s8ze>REf>qUAmwg=st9oa;r)B=w+7&)g5+P{{1}yz`n=K2L5vu=QCYlhtAaz4lI5`0Fbm z&gI;!cWhBgUAMlp+CJB}`lfXoUC9@{3as~Xn*Ph>ajs`+JGh)@$=~ff`cDxBRc(EF z2f-?5n~Scq^mVfbDZPIi=s2%9MyCGL_4-fCyIPxP;`qyPdh|D|mB!VB9R#bm7hvV` z)TTzK3zLJWLNb-e0in1xaA;N_43g8;d2{!V*&>vJ`-biG>HVU$v1(gx*rNhiTqAHLcN zG4{qRB~8l8>NumA$|{brpmHz$Ma(MKow<9_<}1$3Q39IzsR6f~1grSkg(u|u6_qp} zs;KQ6mQh*7G59)<5&bX4lyvSYYKjYG9R#cR?jyvX*YYUO{WmL@@NCU0j=^<^HAQW+ zC|yK^(yp_UV3qTZ^RjtrRo>S>{@m8QGKiB&qU5!NdzACa@TZqZw%tjvN^XnQ|3q5% zs8{*=nK5z}JfXKP-(5vscg5h_ zQSutj*I?&WGzW;>gRaKRN<^?qZi^fDqZXUb442~L&2d^QpAhqIAadP`lFvST2jF;e zUARTGPDHSZODn{xoNF=rDE|vr)hQ!%I|lb6j%R7Df1L!Ym5vyeqm{OIeY$W7P%$VP*{bxbnJU$GeMbmpFMl>U~Hs zuDdNC*HWGq`Jw8*s!oDc+#j)$yzDb~6c(H5k*mPCoxw{f8fkcTWQ6lJ_ z-&*ggApAYjIZEx-{&eY7^P7J`uu2(~Lld!>(ZP{~*fM?1u2+qJ_m?rYVD*?7~Am5vAxe*%6jS5+e3SUp?6_Nu zf+Gy_Na|hXi(^J{JS#?XZ>gAI6~~5W&EG-M1N`TinJ>mj+KwUD1*=%uEn{#zD@G%4 zshD6D$Hq+Rv`m#Nja+2rA=iJ~G3>SAvaUFu6{9CgCF_a_R&i`0X8m@oa*8(VOyU=O zwPDAw*Z<2H9M6hT*jp+lSjDl07}BAne?s#(v#y@uOC3AL6Yp0$^1R}BR*ZM8tx_?; zDvmA0?K)fhmn6Mm<{`iBv12UoeyJt<2gkEwM59!)u9#pI$Hsg~<)&30Ud(RxTKPSf z9mD>%OMbD=@vIozy`^G;RU8|$Q8Rw4va5MpGlu+z&yHb#&xd11ay%=>@7_`|!77d| z#D<1vt3JJuq^itZdbG73j{Z^louB*`H7^|A}p))<(IUAhl`rW~t%Fi}7JwstgT zEn-NgsdbZ!t7X4Y)ElicI>u_Oa*hXwl|2-&FE~s+7hPT9Ct+4GEyTqX2Lb}Rg{dVM zItf-ib9K`vW?1JfRmxr!l+Dp2)jv|WmE69)^w0&H%{}}K&#{H5Td%Cr#xqhKQd4yh zta8Sf{oP#U>9`^4_4O5%l1cjM{vnZO3?4ynJoJ}Rvy?~Yhp0g}syYZ(acNPiH;0tJ zV|%MJj+9n-q{uNiHog)n7OyND-bYP-u7rbNRo<}!^sUwGnbaCB$16*dhN=l#1qZ>Z zs5(RSg;frDYd7xjB&9_BF!fRoXQ^1lBV@c+Db>}T^l+G}b*`ZB9tSaSq#i%@h&M*q zU;W(uPKBvS_mp!G3rXc1pI2KxC-!FGSoQ6va*FTCssA2}XNR1G?0;9?W7WK;odl~m zo)Bk?ebN_2w^P%`l~MNf`c_|bce`0$p2gvKSjo{Yxv}nAD|PT2#X+!&ODjb44xvV} zJad$|xo6#Qc+)dw?tvJXHKf@gj)z$_G2Do}JYAXA`l*9p6_*yzCFLiW}jD!DCoJT_;eg}74xh0 zbai9eNd$WdStm@e%Kp228o=y%;g3q})Xrvm*iVzvam`lAc=onMO#6QjQe_`WKGg`Z zv(~Rl;N=iAhW#`tW7sO*wul%IuKz(um3<`nbS8xRx30?5sL^H&{tn7k$r$#wMbrTC z?5HVh>`AQsIjEh0y75tt=K9V&)&9(3?P>M4??Q=X&LW? zmrpPz{N7dTQ(|UCenMssWR8vRKS1<8(^b=oItf-eV?5CYs*R7w>O~e^s>o|kc}=Rh z?R7vE;ueT+K`c*w`Afp9l1It{zgOHpDqtPJA4Sw=2{o<$LB6gW&q=%jQ5VF(wYB|t zg)*z;-*>h4YY@6oOAR2qHmV#DF^O5jnSiel_fQ&7TbW8uL z#00CHG45AOqF(;Hqw&5%|2<>VMQFp)9WxjWW+B$1=exj*WQ+ zyaDj!8Dez0Gk>>z-pmwHN^DeRGML>KQY^fc_4#e-2Q{KAWeM!1$FB3Na5e2ctMWrHQr z4_@9G<~DVEp6u6o4-@iCELMAgr@;?L;)ECm;u{bP6A`R3&-}r;qS7ysL=fD+ed=`3 z-ap%~o9^GT15p^xM$(x6O`*-tN9kkAWItf;p9^e1wksDs#C11vP zLXkP|VM6*8^{TthtT%LG5RIP2c;H#%AXsJk7JF+Q*Il@O7mo@vg0oN4r2F@Y$-_M& zXjEnS9mBA3Lp-a;ABmG+E<_d>?HTVQGk*^E?|bvZ4ENe^9R#bS$M@rZraS+iDFpvgX<8AXp{+&nj=5>W#7ep6UK=!2Mh2 zvdfj^8Nvs9<}5iCC%0Gq)5){uhp%v!%-U8o?o;CdhLUdI7lf^n--R3u?cxb;IiKyItCz@s z!wudezhju5@micbuKaSLa%_hG2f-@&WyjI7uKyr-4-@j6hMm{*|33&;$uCB#-Ky^; zcEkO9McHghx+MJ#F1uWtuV?HWR|xzYJ!N|ofctmxxH9TL$#&_y$3ft3&~dVF+>0Xe+|3O4Z*@yWb;Z3C4nkhrZI!(4 z{(fQ)tN2O;hgi6O2Nam2pZciktdb7e zQEAI+V&ACB(%EdHUn#Ag*$0!u{rmLAxq6lPl^q1DoG~Ku9^Ki!bVWGug&Ul0N4S5t ztXxDZjy9LBWA&zfZEjn&yQz8OF9=pS>#7jkzqgIMuZz>IbuPPf(9RYZriq}@m8HLz zo_C~H%giG^+`otUKhk$SuInIJ#W`7}3cHj!TIRuJm)>2azZ<9(MIO?7YyZklS}|-} zM2G(M%siN273YL6i`Cj{z<``azS_fdF1vKlu8?K}+GBKO>7+Hka<%2ud~+MK1}Urg744kU%$x~U zaZXq@c|C`k>{1OwZ2V5=vX6uNcdlO#X?UAd`7qqS4}=}i6f+Mu+`ru?YZ-%PPjC>d z;+(KL;l8`l#{5OiQgPX5!u`AY4oxeBJch#kJ9-R$f8gKtSQ(to%$x~UaZXrGwdt7B z`a>t<<*9{mUi@5k>7bqL$W5GAV=Aw-+`l!Kna4=De|O!~#kjd;~Mw=Wa|ebF$8>)17?2AXvpY!G#v?-*@8s7)PJ1(7Ei@ zEcb7GRW+t^9n1Y&3pDen2KVm@ulpL+=Pq&(tm2&T?lGz+YF7RiZgAP9H_`9?@0)o@ zZ=vjCu9(}FHfcr&Mr5+;QpOE<7=&&na9dQ z``udx3^neiUEv^D#W`7}vi=P>xa`u?M=$ZGS@!vs`#0tBUj(Z-C%iN(oKFi~Kg`JZ zc$v;+mk!$X7rrs`xB&O>p)+52+v9z+JetqAVMhH2%N+!(I45TwT=qJa`?p#4d~p9B zwD-n;J!u|Wns6j@-?my^U_P;InZ?k_Kg8TQ2z&qalF$(VAzr_zUet(Z1 zMcJ~7bHYmUtGS}5&#h;kC0zESaQ`m)vvn?&gZp=fey6?tqhZApmG*X9x?P@$Ot6Y` z5~2;BNJ-C0*TorGYy&c@YC;b)Yyz1bc};w73YLE4I>)uj2^8<<88RX zWlstB?_bo7X4$3Z$bk$iy!Q{de@BO|Rn5$qU=`0_7iLopwn%N_#v??FX_a9)kBES)#fe{yMc z%=SoKy_hjMt=q_XHNZizigU6`m361DnFp8MAMW4f`&BTXsien+JEQfiCB*42GyO_@ zYdx1R!79!PYX{e+Gy3jmVeCtuUgxq)KkSUp@I5M?6Q%#eD=nG!jhV;eqG^qaMhj!W z?t%`2Rh*L$o69WqyOVQwloRo zp7i1Vouf<_W8mQ@8kb!S)0{&-G-Dx)`2hsdOe-#W~>@ z5oWogpKt1Ao+VuN0dW8BS$DBn_M&kAPLg?;cU1KEyYhZd-=8!yXM$Cn6TVA@`}eun z{zh3>yvAkc(JzmRh3ETlHZ7_zEKW>RXksYwNK+nr&0wAM)3I6A`T9oUn4a!Zv-GyNWUz1fNShqLY5loquhk)i?8K0Qc{{ zN)_oT>mXRgXAFKJ4_@AX~`CK<-*t|+VU%0z6HW9%p zu4y5{;N=~eGmW|j?ZJDPkng`n)SaW%Fz@F-g18Cd654|aR&m?F1qxo?sSXAjTM>iX zfJeVG;Qn1_{I6OavpueXI1(RdoI!gq!78q4A+o{CyZZOb^!~`4_b|a@YCIv=8mQ!( zvrMm?h+q}B4ZhBVm-iNZnRHw<^HYJ zHuFdeq8uEp7b6A}tm2x++FH1OpMcLcybTTB!vv4?(Q84x03qK^Fu^Kr8zB^Ud1r&e zIJ`d%ZUdev$OiZC-GdK#&#UAhp1@%oznkG8Sj9Dsm4NW_&I{l3uTWRKhY7hdvr4^q z?|ASx5ciXVz&(lyR&m>4?K!->XV>p$XsBIo1D=hLe$TldKK8bUKZvd%#-dbAu!?IM zcQtr<=NuU)o$(Cb!vxQ92r(YSXb^A&;eTjlZtay0u?DvR&v;0`=VZyw zd)wn15CuWN1KUBcifbBkWbpDHy0EJnj=JJKOvtqj6OFT)+q_%j_TdK!k#Lh-)Gftm2v$qCC93=RW^c`f?h)hY6l} z!S@E1`?vItb`Y%Mwh`jVnOa)EuD>ebAh->9=BB*m{_Q=lF2eo0X}4dchpB^L71uQ0 zU|C+?YEIM@?_ol&z=r#`ciyM5)DsCG%(Co{hC20|2OqcIcX-{sObT5bcLfy!sOe|y{GEr_=uWSct(QgKbgNe5ouo0{U6Zcw|thmR{)-NXIc z+dt-jSO)^`ln#Pb+%|Zt4=?Y1S9%${KyVxIEY~`?f6q*D%bUmP*^TtkAj&*<60G8y z#&s87-YKgay1bU~9wvAu46{)nMg5Re>cs3 z%zM462O=wo;fTQmtGK4o=J4_^6xmC?hW6k+Ovo=S?p{CYy?<1)+`rY6i3nD4+u*BT zczKW8)WL`X!EL~^byMK}ePi=cZytR>bOr%;dOFf@kzF za|a>{gd7_%!76SWtcQb_cb|GO=JOS|0nZ4&hx>Q$SG&B=S3iPC20}jdF~KUXY0Tol z%X{6K_G(pR&U=`UU)SWi5$%1xlEe=n!V?j!;Eg5dI$<8C%eTOt6Y;8oxjcFYj&}w#r`yGI$RYJToao2N0V;$Y&oWSjBAv=SX;Y zf7fKI^xrkO4R~fV0Pf#2doK2lKL&u<2tq#fF~KUXX?R({%X{L2M(Pt}&U=`UUsT16 zT<9Ht3m78 zSXl!v?^fj&>#dME?_q*xSaH1qQ3M41sT~BXxNY#2zUAd@KD}}q@C@xFxPL$Q@9WK@ z9f)!qJ+<2A^VL)kmqCn4M6in624B9w z%lrKjUvoUjZNRg@((n1_CIQ}ghJGOKf(SqiCRoKa4L8Id6ZM=vrZcy}dzj#v;(y)0 zb+~^!2v%|12yqNv-d6(VDflf2gWG^-nx)_Kl-erPS+%`gd4=?XU z&)3Oc3^BM3c*cAI+`o5@HN1I@@)EKInP3&yG`@DS+`rY`$ei~uQ4e1z4>l3A;b*ApUJ*Apt@$mXfxOl+*8<#A2JU9tf@%tUD zR=3>0jqML{g`-uT9D~=VVjUCQzmIJ0V|X$gbP%j^zK{C5_k4Y#Pq5+hJYHv&BZlL= z8U^=neM7ME&!Phkg3l5@E3tOa?~RtWN30I_Z-Z4FgX<7iYPf%Qc^IpQZg3K;a-NBM z;Qk#p#aAtH<%TX-kNY=`j(g^JBu+Y7|NZ0nxR~`>JiPu=h&Z@^uT54blMHWCck*NPR4wgQ2f-@t zD{#N~v9sF##!6-Tr2{&zbv1pqy{pHq?R-=quXZo8Sy`KK+(EF4*T7FeYBpSp0`=z27sa}U`Ot4D2VUAgpQ+s3*vej!8-(jw&<`(4o;d&FITGED9M*Xt< z3xZYL{#Yps_wQV5bGhLDZLsPv+`r3|kMg`iPSO>)`&Qkob+|MaG~K^laQ}7?ta8TK z3it25?dH1R{%x>|V@L<(AA{3qFA)##oeQ*f<(XF21NU!(_i(-Oxd6YVEvEbT9=Lxy z&JvEtN5cBVeRDi_)Xg5ae>-9%!2NsF5|>u4(LzUS!T}TR-`94|kAwTSgWxvj5(*Iw z_wPc(TWfItHh2%8iOxKd!~J_{wM_ch)h!IJMb1NdG3Q^k$9uLnT`|&FaJ-}5ykr`k z308d#_wPZwcX_Uu=hb4ke;1q@s;5F9WP(-P=Y_ZlFYnEn`YQ!MaNm|Ly}5?&@I1qD zxi#_KHi&s31}7p|#pjz4{+9c4kz$L}t|{X6tP4)sO5xekI=91p9t;QqaNLo=hrbVcX> zEL~{-{^T*QAKd=<9tZB<=jOIBlu_L^CRoL153aj#|8Bb>iE?@3P{-NM*Dh{n$ApN7`}g2ehEnX+TAfuK!+A}V?%(&~QmN~Djdu{N;&TjRwYJ&S z6OV)R;Gp^j_ad&{4RHUyx3so)*F1Mi!TnnslvIhT?_=;DCb%^*7Y_IDPh0NjW%t%L z_*%>H_((#mhx@nwx}jR5-VvSe0NfsaaQ~jZINEzR$OHH9uyvcXviq{@tl~Cz5?{f~ z+g0PNbQiL`yuEkM#O~knE-JrD!@52YKmP||_eZI+x8;2oGs5ul&hs!7E|`}4x9q9% zD;n-yPU0hooc}?v%HFn06%H@&GFNY!G3*{CS4!I3ve$AvJn?`i`5y$U>}~6tp9OIL zj%!pzTet4g_@IUasJ8}8qo!+lhlITNh1w`FPJez9VpdLSmh@^r-} zoe4fOI3An{J`PbcbSdpR`(~rQ9PZ!m7S%UP#RMM-j>g{=Qs?h2Xp9QKr>BSe_xov$ zOoGo!riJK{A&KgDu%hv2wxk9Vtm4?XQp5eb{tCs|wzH^*uO%FVkA&+L+`sGBRE>Dw z`i`p)tE9Wb?uj|gHLyaQg!^}vcCCyPHNsr0;r?A`i^n{#_-yCcn6rfYcgH?0jS)VD zH6~c)jL{PA-#%bUbK8SdX5%UL~&2|g0~9o)Z*3=LE31o>#J zVp{raE9*2fKfHZ~`}c{WW7S?k&8jiMD!!s(H5J^y%M?tnW@<4pQ2J@tKeNj`7GGjlJ5`^W1s-z1ps z-*TKG3084zTzBE+-7f7F^ojp)|MreKIG#nEPV*(fDtp_yUQL4gw_oE3y;GJUhV+!| z^s>BXVxegs=>r+=Q^DMp-mgA!(>+S1ewZmLd#>@GD*r*SN**aVdb;Pw;*vOBYQUb{ zW&MrYmnxYt>^)3KAD)SibWg2guW+TF4)^Z_Uw@8c}%Y_lbCX40O3l+jg; z84W5L(p_qDQG7wZFEUPgI;|eH)br6D6(_w7%LKIXtlAcUQgv=vCE#Jfsz%n!z7B#_ z(o3<>$JU;Gqa`r_?%#`k-KI}EKG@(rOvvqG)rH3|V>=MRaQ|+Px@wKuO-$G-`S)ta zKE-uk(iTKvxPNENy+&{IXLmz-SiX+U?@72E=8^7{F(0yc{7ZzG+Ygq7c=G!+1Th=# z-#+Ws>O)fY_=2!i(uMfctFfM&wc3N23-|B8GgdI}G%RTF9vQ8RJ3cM%nP;Af zGc5OSy+QS02f-@t1-OdB{k!dj$$FNoDGXL|49*X~mIn9l1s6u?8X-a-^TOtPJ&f@T@m63xPO1$+0XdxdP##-9E1A}zEPYt zN!c*h&zRrBNwCVU|yH4CD{e1cUjy}jSq)%>4+cKVrWmC{=3&8z5IChhMF%iKk zzG4XBbF-=Y{rjKv9r1$=R&fljL(Cc^Ywk{(Jwng0&q=U~?+o}#D6Q%Kt;7A>kRG@f z{Ze}BcM0}LM{8w47th-3L5Z$c$Kd{5Ytjb&W=SW(S0BFG;j4SNf8S0~*;r>3Gg!qj zq_1AaU8_7jChkR>pFKTCY23`uXn4y>u!^r;a6P?WQTgga6{A_hG6t(S24Cle*uKA* z@~f+g;eVm5gJ2ckeT29J_wS%8oAqO>2O6y67+i;Fk2YD9!XiTN)!9j~%6Z562ruuu zeNM-|{kg4qWe^1mM6Dhd;Nc$SyfQoou`loG*nbictdiSewNF&d74jan1zz4^e-w@F z=W{|goi4+3Mm;(d8OJ@98*^OecpYq?;O+W2- zucJas_w(>I*m)I|e&NTy`e*m|`J4o+ot0p2?#ihlw z&jw%RLH(+GYUdwon10$j-b9VM8|L9F4#yKBKit2|C-dI}_iqQmDlV-M?K{s_&R@#E zr+xYnW?&U)UlpM5x<5V_(0{d!7f*L+w)7{c*ix73E68! zz1LCMzLL+0Cw4z|_lbEOJJIbVSmo^JnM+O&DCGMtR(=P`y_0*blNjwYJs@Dx+t_~+ z5v<~PmizaLvFUcpw=ydexqmmqsvzmG;T)yPb2sJu=3fx3a=L$Sg!}i~#=q~9G1yOg zt9K=s2p?Tp`W)KvWCT2wc}v9vtGKj6{B^DFuI9%gcgeb9KW%&Mm~`0ScvcL!f19OZ zf>j(FZ4USEdgoS}1p8^*>jkCz1;?{uv_Pq3=1j1PW8)V+;rN!MxPPZe;I@0S$Py1x#$am zRU8|$wQ&DF*F4T73084w;aLm!?=?wpm@(wHJ$4M~ zJ1D=@lKq3@Sux_grDB3r92?JYeod>~y_ntXweou|JBHkTjIZ=^d@@uW-l!bK&!R!_8|(Dp z{{1R$q%pjK>L6IS)k`LC345Ui5E-qF?UnN+RCc%@U) zP-EZz3J!u*(xrQKl|$azeS2h*a^k=+BY9tEsaVA$WUOI<`}dhcVa9LWD(Jk&LBQAh z#MC3+7%QLma|fJ)i=bZ4K}a`lTjd;|FIqh(c3t3DV?v7Zy7bewRXjW7B;?g(jeD#y z<9s;>!77f2=fvWl^eWNqjD&qh=t<`u?z0s2QN?8Q+9spAXvqv#r+&!-d9{JcNuNg zX*~Mj7#thxeL!s9-E!B>mQI3Ia{IIU_X&7;H=o+oe7nT!DS0iQ+`f;MnbxfHssBOP zD*H&*JFh-)|4!-G+Kj<#Xl<2r*|fJUqB-2ZQwO(JuT_qW`!7PO__Gu2x@y?W82f2bI{z^3Btk(LAY?ybf>rk4sjOW@`0z8qo__S2+v zb+c76p1o}mah6~B|4B%deI)sGhV@tQ@_rUI+9dcpC|f1t+1nP8`~N|hD#z37PjLUv zc4UH@HDtQ^%xQnU$np3|79OTvLe`ah=Clb`@pCCwC&2x?`d{PBJmeFk{lzNNPU86g zAnd1bel8W_4ZOU^l?gRt*iVzPemI_!cm`tp|3TPK;r5ZN+C2#`?~a~6W(@wW*;dJT z_O?Z=2hsC?5K_g@rFg3kFYg-T8mRvSt*y-8vU5Bqkqv|j;>W;i4uVzuT#DaeftPoi z?%C80Ij@?}oVEi6$8!=RK{N*;+gv_#+61fkxfJ~zUfzxRKUG$(PxtRLr*zX~+DSA6 z5e7oWu%AC|!hQ<3|8BjbPX#aUJ+&5?g#C;wU5ss&r0s2sNDX4|{~)BwK9Y5%ZUQgw z=I6S)WvTcHnLUtg!g5e<4x;OsF9}xJ+g1$e{@v(!tWtQ0*Q)V5dA%{ma}uc@7f~yNkeMeY?BmM6 zpM^uL6{8~DzZ3GdR6p(AT2=aKH)#-U?&0;jd?fsS6x_cDXKZQ4V1iZ782#Y>UG!r| zHA6uE0O_s0Cfz|Z2Coa|c$mL}`}gQ;9aSUq9t>d~dbF4Lv^S@NiiJ+io@8_@;0 ze`m%v-u%G*JJ+QM7rxte5Ui3ONsZwh{uoEX@4mvz``Wsu?x|1qD|}q@+zn41B^}M> znOGF=-)FIncl02-uW#!9JrThwjweJ$czJKH*g@<2=YGX>|Mni&bm{iyA>D|A;r?yq z(Gq^)fBAOM9zJsttdfpL`QROHl}dw`_s|6~o}S2@k83&)d+Sa56!nDrx0QL)W&4#o z%VIpO6A`T9ctX7W?B(rd_wU3m-8LKH@SDZ`M8N4%>3Z~ZDpR~;R^lew4uhRJdY)@4({J_8*4c$+^;s$@(Xtmtm1g`nq&VLuJUo^w;6}w-z|?T zzg(yU_iro4dt;5C#W)F8$*&-$!1K%^d}a-g$y%Tru8#OkJvy%Z=A$b7yXCngziEhs z`?p0*PS^k67)-E= zc?ZAn6iNC!2v*6J{ju;^vr3g6Ufu!l@?LlEgu=&_SI#rII_ElkI8a{O+v08z>L<^{ zl<*6$3BT|=$#yviR&hMMX_(h_Xa8iUE6KXz>lI&dxOZ7C@z?glUl6R~9*h|9^8P2T zuXf;kdB?ScuLkVcjkjdi!_>t!duyGwvJQe(7_0s39S(OGczNH1mv^Q4l@(TT4BOf4 zf_Y8M1i$bq@C!fwQFRckV*hO`^R3N~o0)UATvxX1*b}pVNTzG)s7jdYQ<-3u?OBV^501{I zvR$s8neFk-uI81R_Wte*f>pL-mPJ&9m$wQp@BXtVC>)(jW&26pF!MMAzwmb#YZ$3F ze&--q#s1q?9xH=qnx*3CTq@fg>V=ty^b22BAo~{tt8Aw!ix>VaLiN>a$lb1J_%66u)@<{pF zFWf<}iv73YGzBm3#_tl$JUBX+%JzV<^5}Hxx1AmQ4&XOR!&N3&WjoMV#8Y^AZ?e3+ z6^_oOvi(`Ce%_*);6&kvtPJ_U={ms!)*ax-XYr-RFtLS=v*q>bHutEz%RVg z{CX!U%KJGJtg;+6%`=e+R@qJ=RvxyOcebkm3P@KKqbS{ime7TaSY~OZn>nkP zc`(5$=}fT<-r*KOUfv2v=Tb@EhF{?RZRPP5{KCJ2U-+HFPuxtfiv72(^Gg0J&vuT^ zrIIcTpE3>ema5k*?caXR1goT@Ll1a|TX}TzdU=Pfy5Q#MTq+(F3*igD@C)z@FYJnU z5Uk>nH{9M5-t1iLPHomMN9R)UNKc4@12_7OU0cW;K{CNA9!Xl71 zc3M=p$^@(A-{b!s*CvCPcYDjrTjjA6&p_Ee$=2Lb9T2187Y;8y2f->Hz2K{OczJKL zyu1}YF3)(`bI4ZzkbdE9;TJv+GhR%visK2<2VUM?;N`s?GhRH-G~^ku21@f zXMtaM$EQw$RXoxY;^US$Wgfh|;lHc$ad|Y!V>qlKgZsA%zwoMw2v%`CJYT`fdnCNP zYoSyeomI9&w3Wv-5CuUDN<^@VM|$|JMtFIP!~S}Cl!}kbrQ$Ih-c-XcT!UZu%tQpM zI39kP6kgto;pHu72l;H^R0fndenL5W7I!NJOxTN32-u z3@`7_@bVso%=x%nyF3=fn*jKQ_k&-!eSrxFI?SR`IAys4ngn7sh~Lm2Ot6aMVXYdxybr<4 z`xa`KYmu|H{ho7}?eQ8!3iyR@Mhqrc#UpPa%D~IJ7`(hIB6B`2*DjBcF{}33FWf<} zisQi{7GBaMOIa}Ky zI+xi$N`Uwd?%xN{f=sZAXF@D5?@^YQx5~%m+T}S8d@cLgFWf<}isK1U?z5M-%C*SZ z+J4Vgd-Mk35BKlJXb&b>#j`C~-3Bl3a`5ujQM-Ixu3dX=gVi477w#Zf#qqGd1YX`l z;pP1b*F>&G&eryOw%VinXTNX&Fd|a+wo_WD4B)ET1gI{<@)D;t~;&}Kf z1zz4A;N=Z>e3fgFv$Y+ft@a?la0kIEo;AYyc6fQa*7q~7SA1NqU3)!?)gCoJ`-Lk^ zu!`g1tH#e>-U`?B%U;EpoQDL$uW%@bVsl z+U4VN?ea_*zKH{o7JlLK+Rg;4I3Dh`pS`?Qu0_t)c8Ip}Ncij*?jTsjvv_cUf|qwu zxPPC;m70&swQH|cv)ZFPh{7OlBqCVF@vxr3>*d`Bwac~0+1h^3RvywXJPhvN@Gx}{ ztm2tMA%6Sp<*o8@xpsL*59=~M`-M9QR&hKbR=~^qpSq@(x5~B1+1h^3Rv!2NzrM~p zzKY`Q;){w1fgm7))P&wUfsnhqp(7pXy^0C}BE%mh5JHzGpb)yWP=wGf2_)p+T?9gt zCRORuLFr8p;XSi^7tSQ{<*)sabLN?uotfR8efE3d7-;jtB?qf`HxkbuV0q63%X=dF zip%BRb@CJK^YI#vrEr9#a|hn| zc-k!QRW{38=W@Asd1n&8j|2L5cbgY3IatN<@NFMh-m7hvx6ZxDt#t^|c020BF%=Gx zi^C39@vbW9#$b7O2g^GSE$4E%cb)uH`+j!;9MNz*MDMbLRU8ld)L?lp1j~CAVsI~V zYaK$g-Hso8yzs`U9IWD>)eanT8H;+KcAO`yG~BB{e1o%92Y?U zZl21)DvqZpUx4L(9V~Ab9NdfCT8H;+w_^+(PvF>ybIuM{@eVY8|NQeYMn%xSyP@S= zF840)6yvMkK4T1jn-?xQSjF)aVh57T<=z$F8+-!#x4kd=BOLeO z5WUL|R&hLhkplYn8qmLIAqMv%w^s0;=Yjrhw_`UPJK#`KIatMS1V97=%R3e z{MG?EsbG1>*(`63%jMp6GE7BYCx}UKtb=1e&IdbKCD*F6kL3*-yT-l9trcYD_Mm?s zww}-DgBP9*UU;_5yCny!_3{<7KuoR6_SUUvJDYvjDQdTLe?7b2Fv?4Sl(OP4$@i0BU~Pd9l;Cl3|@HQ?Smx; ztK=Ac!18{0u#tWx%Xy7eJleSr@l^_V;hn$>?^@=fEGY|Q9JS5Zppzai_-1OT*n#AZ)oc?et;a_{yM*@O@_t_FxHq?VhGwy& z=XG@tD?2~L;&->~;eK4YRER^yyNYAnm%xz(2dKc3gH?hSyanv=5hzJf*7uCiLz8|{ z|Mkq!EN*F!8dkX$pL$I-E1tvnwH-ggkr9rbh`|n4IegK-ty+aWTdS7s7^v@@Utbrb zq~`tP;Wp3qE-|RpY_PnKEF7kP^sJ1=D#1341Hbzv z$`xG237~(!uwwiYa!$=~q_3W1(kaQoDmg|ABeU_iLRI7V#^Jg{<{g7RIWe=3C*pP; zuM4$$=X7V!iC3EU+}?SjcR~Mt4Ep!`Pohl%JrW(7$z7aSXu` z?gd`BI8TaF3WRYF2;+4R%MMlvN^@Dz#z$J?Y7KbdPil zPDo05Fj{i3iboH!uR$1(m{8u6{B*Q5uK3(=Y-H&z_@vg)iGL^kgIUXeVTXLqLlzYF zzWcw%-W*Y*rBT8)k;hdg(7%^~{yk!8Yn^*k@RtjM_$@{|w+UZlg5@1(v%EES@T?WY z&4HkQ-?v74tHndjf#8LQm(DCXSjF-1D@tH_Zvo4@D`qXvPCoy9ZoqGcV-_6wQ#n{A z7{7TyBo^}#U!{QMeQfVTRS${;`H^g4Cey~bV zZ(o2mZuf4_dRx644?gt{C@@MIi9Gt)jq40};WxkwZ+oSOG(ULs$)hCi`WRybnB<4X z43-?M;`JE$CE$hMP0pk@>Kmo8ibo=^+IUI@lRWg8sdat4Tyn5VjuV?}D~> z&ShitMcKhBd2R2$|ALW0tFL#Pa988&lHe0h1czLlXZZ|1x>(07xT=sIGqbMbU=^Q# z{N{`QXmen{pS-c3CVE)KG30TT9Zd3#%p~{S0q`o}9NXW%=76I$9L+NMZQ(lrRxtw| z*QoD@=`U}lrI@qBIkxW^UVvgA^#4%Ig^Jf0Fl)dhFApYp!SH?wZ&n6;8_XPX*)a}| zV*f!gcUHAGC0VP_H89D$|36G}@h!6Ki1BgHvz#iXGD)0OJdQD=Krv4N#r*!_)fzik z#iJ6xeFlnoc2LYuKV79UNu1rXqc@o3L12>K{pcN?8R6`f9RsEm(WilXJ|_CQ#tv5T zyuq(1y=9V1Ya(+dxFnl<-W1&Pja!Plcok)p9ODL<5zA0Aj#WiB|!;F83b#o5dc z!971(C(^?XR>|{YF_`3q!6ZN6e`q^%!PzZ4+JSq%2Hf*4y?1%p!784Qcpn9dxj!i8 z;hEencCd<93`Mz?CDu3!ig~318NAFPXSeJa0VerTFv$mAZMB{M!t1Wg3lH~k&zpt@ zs_bAD$HteFJ|_7;CCYARE;u_l9!9&`&WsMos^91^CYc?q;%kYbv;vcSFPP*TK0Ww` zTrSoncFT?ya6E%U+$%fxRKme3=l|{JC_ynl_5U!*gm;GQelE17>Zl^v|&c*rUSlROSga!+hUT`-n5f?}R^?&A!(YN=CylBqlCw?V9Is^#k?KHF@8M)-1GOqJ@5U? zK*_->ImRq7$s7MZ%viEe(OD%ZP(8sR7h{*(hhM<}_q_AzaYm6`86^j+zX9 zZ5-^|LKiIGZ$U91i}A|iipQIx%m?>82Hf*<_4}l8IHO&#!^eYxUc_A%Ex!#W`TxKq zPrg}F8i_nt1kLV8P|WLK-e7+8{R@1Q{DONfIanpf_1nzlCDhI3N7!%+7O#S|&I3r+3xXvnG zow*P3F7;AN^(MII@hP%{RdS3NFv(|wNq(wyKV7hVPlIBf^@|?X8s)4w^2+c6-1Fz< zR~qlONb7J`HNo|Efq~xlMkrb?nB)z?ByW4UgwAF0>Ld7o*+4P>Yvy*G^Z$W+eihvF zSW|YeN{%rBO!8M?lD{}zUS}0w0pykX3b^ODU(_&%H!UYQSS80O*&&D46-@Gu-3IEc z635Qffcp?s$BX&3`$21r-?6Qf=Mp!FkWxyV66_o-8g7yJF5Pg?!@A3Bu%hIKL)2^KRExp1^k$KhOM`069H&cA5g;)45P2$d60cC={l19nlxzqAhL?u=(J?p{6l z)a`|9Z>#z1Xx-w1*Szfh7;6T{lO1)|Mz}8@VyUna`B7<#_t|5emBkiOXZrdisLDY-&_8!#@7ty;j&v%vV!s33XEUFTU&Cl ziff2$k+=L^jTyKcgJUBn6^!4SVElfaRh1m9;;Ws_-`xuSZkg*fHRj=RJlSy+j9(8J zzpK|(ksPezE48A$D4wDX0Dt%T*-{$cQ!!1KV}oo2#_t?3els5}D>+yt$0&VZthO8c z-9BH*4!)mbvaX^C#&2gZe$VZyB*kDA*AV**;P2J~f7j2bpmDjtLp^bN>K>0QkGDK;TGxjJXZG8>oUfrj{&@w=5Btm4>; zGT2A#74w8MqMc*G#^rc#8NZ8%Onvja5+aYCRUBJUlG5St3Wt*sFIcP`4|@Rr;b4_> zZ0FGDPlvy2{e_sj91j^=|KVVjb8N>*kH0JaA`x^c9+(4f8NUhqeGC(O`8y3oIRyT0 zom9kL5rYZ3Qat5AI>g@8wUS~h57XiA3WxKBn>ZgF4~)ii7{94&#ouG$ZALo$U6EbS zY+R0qZ;|2Xo{HEj9ISGVMQq#wfWKQ8{N0Hm7ZUjERc7OIJe%=b8;*ZNmrD*-@pqTt zq=LWOEfs%P%yaSevctyZc*xU-qb(fE^PErMZ=6}hwM9k>_`73M@pnaLuk*#acpt^_ zaK(Y+Q#cmK`Xx9j;b0ZV26qtr-9+N=I^k@16sH_xXo5f7c-^GC@}+_BxE; zP7jK1Nt2%zZWDVs3r&2NYV&tXuCzALG|?u!>{b{M~`z z?}n^+zJ(dM9D}nP6(t)Ozt_O{Ri3X+Ozm*uamF6{%E#X=wQ^h{^KjWMI}9*>pSaobWN&$EI9yvUM2Xf?Uj0^N$4{`_LC>ONe^KB{zs|44i{?P?4 zkUZgN4gT)qq?X?Q-Q8tyxv6Q>1?tan9bURW8NcQM$Jbk1djCx25F^}CaXkDk8Hl~_ z1a?-#@9Z)xVsCg}ch>p)lP$8YuN{IQ(yqd4UpvA;?A=kgv%3Gj>|mAPntXI{jjvYw zLG10SCb%NdaxT~6efs)MkV(2UT;Xf^?;!ThsgvNUmCC^?j)#4#4V8@hvm^DAi@)^> zVsGNOZ}6OtJh@PhcXESK*0IPoo>zFdD???`S6e{r4RS~7MLwJ;Ianp~o;!{D+EwH` z;V1`U@7{WY_2gVzyj-r}29;Vr!HOZWm`jfw=WBU>5PN@{I9Ts=V58(<701K(YCjcE ze$jk@-obB&!O=x-_4cgFNLxm=M+-n&sX>l_Hjto;>z=i^${8?{Ch-lBbZY>?z&701I` za`AEeoDWyVWB$1WMt0JUvjWYZJ^ z@%Kd`AMe|jELQ65<0^-IT}_O{Vj%XGNG@mIe|M|oU=_zhKHQXRL6259v3_}x*DGFe zcy`(S8nviS8V9R*2ICtO5PNeZe5DrpwW73^@M<6^yNwpD!(535pHL8c+tvL-1+iCh zunJFiMC@$_VsEZ9GqoYps~fE17=lJLvRWDSn6)PM0kQY1!ZWlVp6Zf=Rf3tjK1+GA z!?zjS^F>|bV?R3#K2@~It>wNFq@cPJK2gCV!#Qsp`?BioGVU}ER&}a3PHR!Un9tE0 z#NItYx3xCc8X6p(Yb7W?Nd<V~ErXeT*XC78L{Ln6_RrD%t@Q}6gj z{To@e;^KM`z39pA21n;w z36{4oixDx+92$Goy!`2P)uN}9(>PdFr-!PY zcc1b(j)K^$JpD>fo-)_q=v=FYD~o95D&A8sSnb#dV(*qcU+U9v&1DCxf(sVa++`o3 z9k|D)f6*pK=UNGZNUjm*e6F`nwqy z8yuZ$Rd`lLEx-R0Upq!ENm0MfJXkN@bcy6(RnoW2 z>K)^tde&;k`Bq8Bo@t-!dq$0w9IU#8e7rHGj-nl6y@~>{H|%JyN}?Scoom%@bOkl~ zd9rWy$yvHkwQn11)<|Rrt1jIxrB22ew^xS!j~*GPDs|9X_8(zzbgq?Fqpqvx{y5+D zV=;)m^GsGBeI@d~&1%A%9n64jF8Xd9LD|WC7 z-vqf#eU;A<5?9cy5>`jg9of#{=v*uD4gW`D#;d2S^YH}4-c^h0==gL+a^K!ax^eU7TNOPIT} zsQR>1!3Ia?T8VGpGre~C?ypMzThh#T$E6zqfs%t&{fGH^`xOsGJ3@W!sQaybU&7J3 zR^m(cAb;m>Y2|qTssURnTUSnYu&U;}$5xLpBE(9Gz<=zB0e( zeOJYkKCXk=SNNH;Hnr9-z4ntFtP%v=%=a^*9g43V+b-;|&Id>5T8#s-H)!oK*Pqt; zaF@#$zdz5mG!9mYZ_&T+_Lt95uD}DMbhGaI%2)3j9Gz>m1jOF0C*yt3oOM9#Enlv? zzQVlgWe2MSGq=v~+gun|xCya+h68U2jNdIy z{!qadksPezc*rRNe>Zg5Ic*$j#nD+MsIK?tN2nmT;Cx(%qZ1sTq;jx|pY-r}0RC=; zy+MM0VRE@#D}IK<&IBA+Qi8MzsT{20c#6^+#NPf|4FkkplSc!eHNj}@v$MUL!)nJz zaNJUB7$C$-4p#BgB!15e{N3Ox=Z#p55-yiViFliFwM|eq29X zn}n8gx!k+_WQm+R5PRD-2p4=G$-yd)rzj=B-<@5ox1d0o+>6{=!Du~keWq_*eFR56 zI6yp+9IWD}Vw`jEcN6ktHnX6wxLodC@dj&1!x_H&t1vir!m$T^#ST_+JY-FRzxya9 zM9+>G+>6}WNd-G;pGNIeLCnJZcmT)UbR4YWCvVW$!QYMiZlN_lxLodCex}BbFdV^f zh_TBKR&hKqYrx;FVk{JlMw5GyTPql?L2>JS?YIfYY&gV>Vh5}E=^lhX@OR%+TxNUp zE|<%_duL>8ZSsb7zWerEaO`^>V*Z5QWe2M`9(F!J?EMT(+1HqZ+>6}WRb4eL{?D^& zZtHy91hF>@96b<&9jxLV1VuRr{_a%JbO)j3TrT%6?+t(#9$Zwb1DbBbR1Q{gJe$~? zDbQ_z*lThxa%*!utDz-@@AaLJr!|Wj`#=TmmCC^?-lb5KTj1{&2Hp4t&Igyvy}N5# z4Xs+E6yN^UAvi9AZd?ObHFmIy#%94emv5tzfj~z4ez0QX%F?H8{S3 z15{wi!7APf!PNl#-SI<{wWeq}m&?7&I~Mrz9*$aYh$|;MSjF-1tB4VQdXN3FT~N79 z?nQ2`V6|TrT&n$WDkdPx$uXdc!dY zjzu_w>|hng!&^)6cPq5&FBpvm_ae8p=(ia)f8(L=eDsH-3>-~UIatLzI&X-*f-Yuq zx!k+F^MX7L5PMfW*r|c=CplQf@j!0{vG-!nod)=cCifz@wtTjX+S1tbzVnd;M}}TI ztt$>YSjD?W$Rh%Ow@_?9^8>V;%jMpUQLNvu_MMNPZN{$|j`P6|R&hMQdO+;0(>l!R zUG7D0?SP>N)#Cbn-}(3*j$k;3qgL!-74J;pw~+S@_vGKZORy$QE|+_kcaXrX1+h0f z9O7Eb4pwnIMXC5%w5xc^E|hn|eu2aW{_c*J zVdhZuE|<%_o59Xo@|}5AKZ)F+UPvR)bnc&_}bAAj`piN>jMyj9jxM=LVTAB{%*vx z1Z%W&x!k+Fqo*iO;5ZKlekI0a2dg+9eqA2?-ESHt7$A(B+>6}WC%vkwpFiH}yPhY* zQ4tO?KiI)4-i<`9z~7y7yptJ;mUFq>yM4c^u6}$e-giBJFLH~v2#$uS9IWDa$cF=e zH}AjA^y+YMFLG=BVw<@tUR>*Y{#XS^J~%3;a z!{#(IbE4&3F8A*0e`dQj4~UtySE8p|^v{M7L#c+tbaCWeYcZU__2k>{VKMOHSp|7}H?p={p z+#vRI-}Ct#IBvs{Bb9?y91j#I@ON*|udJ(Za4&Le1*7$+7Qw!KpMG%MheJH2vV&E; z1O0~BtAW^Sa=F~QytjHNNS z?1bYO9ABVT>|hn|a^tIb@OP89RW`+)C6~*+D>BIkjmYEMhx-POU*WiovC9rtaXhSv z;O~BwyMgY7gL{!%E2yqVro47#x1K+Kw~4*_K-7vItm2(?MY&waBKBI>4=$H`m-on# z_X=Wfz$dXsOS|;TQ;q7`yCX6~|MQ z^5E|lSQuyBUvV#TYh%FTJ(IbyuN@`f$N-0Uf@BA)_^ku-0Knf}*{P-Z1m}ax<=(A# zYq~eZFW7a+x_%6R<0m*yrgE@~<0(pa5PK7gbhfVN+>6{=K|>8~@Qv$$H9y9I*t?-n zXT4qK-3B{YCBK#F2x9Nau?gA_XgQb5y(_;lnG0g?g_;T4_&KtJRU8j9Dr*L9_aBMI z_{m`=_ae7eP(+Izxf$|%q}XSu31aWv3>%EA${@+XDt@Pf@6}2z(blc+W?n9`+u(A! zcSXi;hC+Kn`c^xD{oP0qdozyfY<8M6H~ptGML&w7sI6dM1H5k`Iq?J zrDl`7M`!HN4$YSxtP&L3r@g*#{n<{myeo*kC)Rwa&&amNU=_cQk~2(OgV?+I!k2pN zEv$)@Rmv(k#xf9l<5%|3Gtb*?u!={9dHFuu6{cJ&3(K->qlr-S-+Id;GnY@gali?N65SEGe&3 zQ6_@eyLEhJ^Y62lBnM|{3JUEn-=7ZoCQh6We-L}G)*WCpKR(1{6~9-LGfeR_LRv}W z!iB#dAvstj$M_D!-utgt8;NZPnXKXwE|0`O5PKVVrx``J50)IPl4A@5vG>x!MrJO* z^9HMUv~wT6A@-Ue_DT*`$uXLL*GbP)Z;jFVm%|2Ut8x~r{oRC}lMYJ3^ltk5FMl*X zIK5kPu*xFq`ZCwS5Xx<6t(tsbtknCP{HBuQ$&TBdwrP2vWH&A~36mVGvdFr=%ys*n zXx+!(CE>em>s_kz29)Eab@WNc!7A}CRe2L59Q<8x@#AU*?+nADwUpeMHJ@V$93$Zvgj%tKRf4|PZfF%3n8JwB4#eIr9Rtk;^Xr>} zbb5N?Uf0iamnEM8v3K{w9j+?o%;cFM_WD2E=1S}m1IGjqdyg(0W@da=#$c5nh`m4l z=yieDms}pi-l4-cxt>@t{s&_3)5Cqu`jbvc4pzxA4ujY`realX@5bS#AZwP3%%g%S zn|uny-T}AksI^e5j3D+Nd8Mgm_Rd4C+JM-5U(@tVPoll-5VW_!bMvSmE++S=*VxnH z)~71yn{adiv3GwjP0xJfPszb5j)(WPyPIvheru7Hfz9Wf&l>kMIH_k-s_tyFDUE|w zd^V9~5fGMqV|u)2&Arhkt2lSmy~GFA#gzF3;Hvtn1uME;;5wt_ zt3d4C-*KjA%P*r%K~tU5BeN?0!YX#ZA@&CEc_2Gj#iK`2>IJlOm7Y-Ewf*U6Xji z=ikX=9*l~W9IRUTi_4RwBUjCuwS7VCUGrNPBPwE`G)j16up7Va1Y&Qoz;=32?(PuJg?)asy3?A2e5tZVTs9S5rf;qm@!kG0w%lN`j}cMd&O!wQU& zMk0?scH>uKK>c=XAmWN%!I@o;4ZgpE*KuQz8Nv$ zuEE!(AP{>a=fzv+Sw4eTK1w5gU`iT)eecCW$T{p)6g#awb$29bxzUSlbyOmrb8I`7fY`gES%6t-cQJ2z4x!?43_1)LVGp+!G9JuWZLot? zJSr6>lQLMZ(YLH8_pMdNkK@XC9?flR)r#G+qsfOE^vDBM^zvEXF|()C@;si{%yO_> zb_|$aM4#^s(8mwDZm@$@Ja6!gB8a`8)z$U#g&Rw2qTozy8j}a{l+9d{qTD=R#%!=y z(^sr6?%{hXR>?7Lg4o;V%QkxXkBWMi?GN?V`pM%G=b2-0N#GiQ*!ywEwtBH*kuG+y zN}eApKQC>)y$5SW)C%<$%CN1LjMzS+YLR`H5~JTkvnV{f;?<_{lcP$&4iye%qhvTDU{*)hl__L{Z-XjzN@!t1Ue z>sDCdwMxSM6^Ol+21l9&Dg}Dk!77f89eNOZ58umXjtMJUOAvHx9^Yz}#SV^V6MIJo zWHl?*9uvY2R`In2J1pSuzT6e1g$yiaQFF!9k63ZoEjt9`_g6TC%DJZ!$E|39KlD1J=&}x0jGVO<7f5V~@oV;g;F&wuYvT@w zOAZmkQE@!<6^OmhmoL|bz2CiS&lKnh~-YyV36)uyt8RU8k$`wC+3#<&1IIkuuH7)z^Gta4?V`#71;Igc^C z{{XSKMe8#9`q;9PgH?ibYn~nDdYGj%+A$Wy-hjqSwOX}%NaKpfu^=usx>wN}$N07g z#NHRv2WfqO87MheCC8WnVsGc)hiOX|DkiH05vqCi4la-*levBP_7%k5Zl}j-0l6|t z4pzxACWF{}U!AS(>D$5-q|06hUx!3vyz;o>@rJL}LF{e(ppRCoexEcBXS55_?cjeJ zxIpYhU!4W9cf4N?J^p4%X(aMo5p23SugAG+W8SE92M9jp=*+I6=lxUvR*fxgNGV(*rj)$}#3OPj3X`N8u>QDQ*s)w)&F zS6q}Gtde6?0I|1N;%e?7Z#9j@=UQwl1^82EPwMIEBj=VCI@*AoJ zR9LCKXr9*LtZITnTV_soSMM94X!-KvGqmchs_7w@OPE|1uRekg_#k14>*mbuIOowI z_GWy)x<1B~9juaLocpXa4}U9fvWl+&@=E;x#NJmgYUq8MmXjQ;l4Dc?vDaUT z)B1KBXtGKiJ68klL$Jaw9{QbloQMRAQBJq9uztZZV&;7BWmvqtfZve>xup1AXU)dQ`QZg|3;khBg*#qktnF^Ii?j(L_S zzS|b}2F~2(aycG)x5%X6QkDO}IJpNBmLrDvE_DHjz1Ll}^vcu!@^VdB#qn^b zpK*6^aIZ+cbWCl7uNi`-J0{x-t6X;D*SX5?4fgbi)H5Z>4pwmuL4pRcw~c40zNoHl z2!d|JoHbUt9D`#kO6I96(BOEnF_!wm}CY{lSs zvSaL&ncDqPU+d3ft4I!3@s%2x10_M`p$XnHc{HVcOvwg-bzvoR&fnMDR|yb z?e}Y>{!UT_gUglfMM3OMnXum%<0}w*U+<07Pj;&$IRt;#QE@ym+i;yyN9qNRRWJlW z*HN*9j4JWk z*b?7SzqY-czUZeL?IUns0`7X66aW z!7BLQP4rOgU2-zTId_BydaRDq*#@*WDXSlS4*7G&5FSp(ay2pa5yE|Y^sU> z;b4_>Z0A$E!QXYA4YOi!7QAyTm?az!JY<{Lo5sN^=h$XC)dqj}o_o0E;4dHE@qLMc zf#l|R*n5TJZaNNDImb4K<^7*ZsvqqiZN=cPUBt28=B(IfbaOmBe}LGV3y#C5Pb9E| zRa{$SA;l<${(O`bgTHWcjzwQ_JVkj9VsB_V4pwn&MY#d~?&xw6Rt)~C%{dk^I3D)& z|HHv5=h$XbEd_tKujflE27k$T*Y{-K~_C*xUSYqET$_8Ogya&O*ai@gVjVJXqJB zA4GB#*@l}ybrdl;9^OH~Q4)^QHB+ieIf+y&t}Un${j%%H{%x!nf}k7NBp&5r*N|dx zNmxtTWY-H8Y-4U2xUObuhr^oWj6MA78;HFZ z7qjY!{=w{E73UEmn<`hFb~*poX2q$?tMOHsug+W&vUfo2O@d>})!8-J!74e%{{hx; Bk#_(9 diff --git a/resources/house_2/meshes/stl/Wall_0.stl b/resources/house_2/meshes/stl/Wall_0.stl deleted file mode 100644 index f543f0af5421222a815edc4f487a3e87a99a380e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 684 zcmZ>*D9A4=Nlj5mE6UGRaLP%|OGz!#HPJKFGh`qK@PIWn>_^vo_Kc4$NbFfungfu% z7bcHj|Nmca4-0Q;O^SfPX)#190* o3MJfNz6Q~#VTBaZV3&YYAmSXv1L{BtD~K2(tU!EFxG^vQ07#&?g#Z8m diff --git a/resources/house_2/meshes/stl/Wall_1.stl b/resources/house_2/meshes/stl/Wall_1.stl deleted file mode 100644 index 85dca8cb52b38b7284d78f9e1f5f24efbfc78721..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 684 zcmZ>*D9A4=Nlj5mE6UGRaLP%|OGz!#HPJKFGh`qK@PIWn?1$++d&Xxki2Zo!YzGkg zSyY+>hz}D7u_569|9X263#JOH!xmWwj15xP09Fmv0agXm0TKfNphGrLG&JN1%n61-p~J8=*4sN@Mtz6W0DP`fQ>MThB( mQdW8fQz&Oe1sqaQ&Wf&51#Wp(k&AtGZsbLgWW_4&D&ikw7nI)s diff --git a/resources/house_2/meshes/stl/Wall_3_0.stl b/resources/house_2/meshes/stl/Wall_3_0.stl deleted file mode 100644 index b3c0c614e5eb06ad79d54e279ebcf18b55cd724f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 684 zcmbVIF$w}P5KLj|BhCkSa9}GZf`wppZ@5^gC&9u-2)@GF7g%3&;LBvP3{C_s+#;FX zo!Lxwbv}0C#VhuzV z6q84jDX0d|*g#}aff|B!%j`5~=pd&n>zRUB?>Oiz^-j0S297m5>WUcu08Y%GyP`w= txy{G<`3C2z+cz7C9XdfxF>=QDUC|Ypdgr_1roqs?Wr}Q9WT`7)=U#9Eh}QrB diff --git a/resources/house_2/meshes/stl/Wall_3_1.stl b/resources/house_2/meshes/stl/Wall_3_1.stl deleted file mode 100644 index 29ce431ff03f2be28c6dd530b4e574f5771bdeaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 684 zcmZ>*D9A4=Nlj5mE6UGRaLP%|OGz!#HPJKFGh`qK@PIWn?1$;y<>})v;}DC(~@%ILE^}u!5$`q>?#-=~L!ylu2^My4>kR~JduyA3SF!LIF+a;Q6Hp7c z+0X2MJAY=f-)8wPO~OT) z98s6X>uQBdMDIFp5zuvyH-`&C|LI@qO%IakMJ`fFL!fnYTw(vR*-6{<@QkY`R9>43 zO Date: Thu, 7 Nov 2024 15:18:28 +0100 Subject: [PATCH 19/44] Adds documentation strings etc --- demos/playingfield/requester.py | 111 +++++++++++++++++++------------- 1 file changed, 66 insertions(+), 45 deletions(-) diff --git a/demos/playingfield/requester.py b/demos/playingfield/requester.py index d7a3acdc5..007703f45 100644 --- a/demos/playingfield/requester.py +++ b/demos/playingfield/requester.py @@ -6,30 +6,41 @@ import fnmatch import os + import requests from urllib.parse import urljoin from bs4 import BeautifulSoup import rospkg +from typing_extensions import Dict, Set rospack = rospkg.RosPack() filename = rospack.get_path('pycram') + class ProcThorInterface: - def __init__(self,base_url="http://procthor.informatik.uni-bremen.de:5000",source_folder=os.path.join(rospack.get_path('pycram'),"resources/tmp/")): - self.base_url=base_url - self.source_folder=source_folder - self.stored_environments=[] + def __init__(self, base_url="http://procthor.informatik.uni-bremen.de:5000", + source_folder=os.path.join(rospack.get_path('pycram'), "resources/tmp/")): + self.base_url = base_url + self.source_folder = source_folder + self.stored_environments = [] self.stored_environments.extend(self.get_all_environments_stored_below_folder(self.source_folder)) - def _download_file(self, base_url, full_url, folder): - print("base_url:{} full_url:{} folder:{}".format(base_url,full_url,folder)) + def _download_file(self, base_url: str, full_url: str, folder: str) -> str: + """ + Downloads the file given in full_url and stores it into folder. If necessary it will create the same folder + structure. For this purpose the base_url is necessary to decide what is folder structure and what is just url. + + + :param base_url: Base url as string from + :param full_url: Full url of the file to be downloaded + :param folder: Folder where the file should be stored + :return: The local file name of the downloaded file + """ + print("base_url:{} full_url:{} folder:{}".format(base_url, full_url, folder)) tree_structure = full_url.replace(base_url, '') - # print("tree_structure:{}".format(tree_structure)) if tree_structure.startswith("/"): tree_structure = tree_structure[1:] - # print("folder:{} tree_structure:{} joined_path:{}".format(folder,tree_structure,os.path.join(folder, tree_structure))) full_storage_path = os.path.join(folder, tree_structure) - # print("tree_structure:{} full_storage_path:{}".format(tree_structure,full_storage_path)) if not os.path.exists(full_storage_path[:full_storage_path.rfind('/') + 1]): print(full_storage_path[:full_storage_path.rfind('/') + 1]) os.makedirs(full_storage_path[:full_storage_path.rfind('/') + 1], exist_ok=True) @@ -44,7 +55,13 @@ def _download_file(self, base_url, full_url, folder): return local_filename # Function to get the list of files in a directory on the web server - def _get_files_list(self, base_url): + def _get_files_list(self, base_url: str) -> Set[str]: + """ + Function to get the list of files in a directory on the web server. + + :param base_url: Base url as string from + :return: Set of all files found below the given url + """ print("get_files_list({})".format(base_url)) # Send GET request to the URL response = requests.get(base_url) @@ -56,25 +73,23 @@ def _get_files_list(self, base_url): files_urls = set() for link in links: if link.get('href').endswith('/') and not link.get('href').startswith('/'): - # print(10*'§') - # print(os.path.join(base_url, link['href'])) - # print(10 * '§') files_urls = files_urls.union(self._get_files_list(os.path.join(base_url, link['href']))) elif link.get('href').endswith(('.usda', '.urdf', '.stl', '.usd', '.hdr')): - # print(10 * '!') - # print(os.path.join(base_url, link['href'])) - # print(urljoin(base_url, link['href'])) - # print(10 * '!') files_urls.add(os.path.join(base_url, link['href'])) else: print("Ignored File: {}".format(link.get('href'))) - # Filter links that point to files - # file_urls = [urljoin(base_url, link['href']) for link in links if link['href'].endswith()] return files_urls # Main function to download all files from a directory - def download_all_files_from_URL(self, base_url, folder): + def download_all_files_from_URL(self, base_url: str, folder: str) -> None: + """ + Main function to download all files from a given path. Files will be stored in folder. + + :param base_url: Base url as string from + :param folder: folder where the files should be stored + :return: None + """ # Ensure the folder exists os.makedirs(folder, exist_ok=True) # Get the list of files @@ -86,47 +101,53 @@ def download_all_files_from_URL(self, base_url, folder): print(f"Downloading {file_url}...") self._download_file(base_url, file_url, folder) print("All files downloaded.") + return None # Returns a list of all the urdf files in a given folder structure if non is given uses the base_source_folder # only look for urdf, but can be easly adapted - def get_all_environments_stored_below_folder(self, source_folder): + def get_all_environments_stored_below_folder(self, source_folder: str) -> list: + """ + Returns a list of dictionaries that contains the name and the storage_place of all urdf files below a given + folder. Only looks for urdf. + + :param source_folder: Base path as string from + :return: map from name to storage place + """ urdf_files = [] - urdf_file={} - #ToDo:apritrarry depth + urdf_file = {} for root, dirs, files in os.walk(source_folder): for filename in fnmatch.filter(files, '*.urdf'): - urdf_file["name"]=filename.rsplit('.', 1)[0] + urdf_file["name"] = filename.rsplit('.', 1)[0] urdf_file["storage_place"] = os.path.join(root, filename) urdf_files.append(urdf_file.copy()) return urdf_files - def download_one_random_environment(self): - endpoint="GetRandomEnvironment" - full_url=os.path.join(self.base_url,endpoint) + def download_one_random_environment(self) -> Dict[str, str]: + """ + Downloads one random environment currently not present. + + :param: None + :return: Dictionary of name and storage place + """ + endpoint = "GetRandomEnvironment" + full_url = os.path.join(self.base_url, endpoint) response = requests.get(full_url) - self.download_all_files_from_URL(response.json()["storage_place"],self.source_folder) + self.download_all_files_from_URL(response.json()["storage_place"], self.source_folder) self.stored_environments.append(response.json()) return response.json() - def download_num_random_environment(self, num_of_environments): - endpoint="GetNumEnvironment" - full_url=os.path.join(self.base_url,endpoint,str(num_of_environments)) + def download_num_random_environment(self, num_of_environments: int) -> list: + """ + Downloads given amount of random environment currently not present. + + :param num_of_environments: Amount of environments that get downloaded + :return: List of Dictionaries of name and storage place + """ + endpoint = "GetNumEnvironment" + full_url = os.path.join(self.base_url, endpoint, str(num_of_environments)) response = requests.get(full_url) for env in response.json(): print(env) - self.download_all_files_from_URL(env["storage_place"],self.source_folder) + self.download_all_files_from_URL(env["storage_place"], self.source_folder) self.stored_environments.append(env) return response.json() - - - -procThorInterface=ProcThorInterface(base_url="http://127.0.0.1:5000") -# print(procThorInterface.stored_environments) -# print(10*'#') -# print(procThorInterface.download_num_random_environment(3)) -# print(10*'#') -# print(procThorInterface.stored_environments) -# # print(procThorInterface.download_num_random_environment(3)) -# for key in procThorInterface.stored_environments: -# print(key) -# print(key,procThorInterface.stored_environments[key]) \ No newline at end of file From 3518551679ac99451f6de5eb3452535aa5d6c477 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Thu, 7 Nov 2024 15:29:36 +0100 Subject: [PATCH 20/44] Removed unnecessary imports and switched to pycramros lib instead of including ros myself --- demos/playingfield/requester.py | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/demos/playingfield/requester.py b/demos/playingfield/requester.py index 007703f45..4efe5596f 100644 --- a/demos/playingfield/requester.py +++ b/demos/playingfield/requester.py @@ -1,25 +1,17 @@ -# import wget -# import requests -# import bs4 as BeautifulSoup -# from matplotlib.style import available -# from wget import download - import fnmatch import os import requests -from urllib.parse import urljoin from bs4 import BeautifulSoup -import rospkg +from pycram.ros import ros_tools from typing_extensions import Dict, Set -rospack = rospkg.RosPack() -filename = rospack.get_path('pycram') +filename = ros_tools.get_ros_package_path('pycram') class ProcThorInterface: def __init__(self, base_url="http://procthor.informatik.uni-bremen.de:5000", - source_folder=os.path.join(rospack.get_path('pycram'), "resources/tmp/")): + source_folder=os.path.join(ros_tools.get_ros_package_path('pycram'), "resources/tmp/")): self.base_url = base_url self.source_folder = source_folder self.stored_environments = [] From 37e2c4a164557626ab6522079e68893bb8ce1a73 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Thu, 7 Nov 2024 15:39:05 +0100 Subject: [PATCH 21/44] Changes requester to procthor interface and store it at the proper place --- .../requester.py => src/pycram/external_interfaces/procthor.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename demos/playingfield/requester.py => src/pycram/external_interfaces/procthor.py (100%) diff --git a/demos/playingfield/requester.py b/src/pycram/external_interfaces/procthor.py similarity index 100% rename from demos/playingfield/requester.py rename to src/pycram/external_interfaces/procthor.py From 71a469f733eec50c85bc52826cdb41cd859ea50d Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Thu, 7 Nov 2024 15:40:00 +0100 Subject: [PATCH 22/44] Refelct the changes from moving 'requester' to 'external_interface/procthor' --- demos/playingfield/ceo.py | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/demos/playingfield/ceo.py b/demos/playingfield/ceo.py index 082f5bf0f..ef6efa926 100644 --- a/demos/playingfield/ceo.py +++ b/demos/playingfield/ceo.py @@ -1,11 +1,5 @@ -import anytree -import psutil import rospy -from txaio.tx import sleep -import os -import requests -from demos.playingfield.requester import procThorInterface from pycram.worlds.bullet_world import BulletWorld from pycram.datastructures.enums import ObjectType, WorldMode from pycram.world_concepts.world_object import Object @@ -14,16 +8,13 @@ from pycram.datastructures.dataclasses import Color from demos.playingfield.sandcastle import generic_plan from pycram import World -from pycram.external_interfaces.giskard import giskard_wrapper -from pycram.failures import PlanFailure, IKError +from pycram.failures import PlanFailure from pycram.tasktree import task_tree -from sandcastle import param_plan,param_plan2 +from sandcastle import param_plan import traceback -import hashlib import sqlalchemy import pycram.orm.base -import pycram.external_interfaces.giskard as giskard -from requester import ProcThorInterface +from pycram.external_interfaces.procthor import ProcThorInterface # Many Plans in many environments with many robots # Don't know where to store NEEM so I start with the memory db From 0a6db3a1124631ad2bcdcc330b465d3a1f806db8 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Fri, 8 Nov 2024 14:14:30 +0100 Subject: [PATCH 23/44] Deleted old version of function and some other stuff --- demos/playingfield/ceo.py | 92 ++++++++------------------------------- 1 file changed, 19 insertions(+), 73 deletions(-) diff --git a/demos/playingfield/ceo.py b/demos/playingfield/ceo.py index ef6efa926..fae7e14b1 100644 --- a/demos/playingfield/ceo.py +++ b/demos/playingfield/ceo.py @@ -10,7 +10,7 @@ from pycram import World from pycram.failures import PlanFailure from pycram.tasktree import task_tree -from sandcastle import param_plan + import traceback import sqlalchemy import pycram.orm.base @@ -23,96 +23,42 @@ session = session_maker() # ToDo: Many Plans missing, but this needs function pointers and I am not comfortable with it # plans=[] -robots =[] -robot_name="pr2.urdf" +robots = [] +robot_name = "pr2.urdf" robots.append(robot_name) pycram.orm.base.Base.metadata.create_all(engine) session.commit() -#Set up for ProcThor stuff Example usage -base_url = 'http://procthor.informatik.uni-bremen.de/environment/' -download_folder = "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/" -procThorInterface=ProcThorInterface(base_url="http://procthor.informatik.uni-bremen.de:5000/") -number_of_test_environment=5 +# Set up for ProcThor stuff Example usage +procThorInterface = ProcThorInterface(base_url="http://procthor.informatik.uni-bremen.de:5000/") +number_of_test_environment = 5 -#Get Environments -number_of_known_environment=len(procThorInterface.get_all_environments_stored_below_folder(procThorInterface.source_folder)) +# Get Environments +number_of_known_environment = len( + procThorInterface.get_all_environments_stored_below_folder(procThorInterface.source_folder)) print("Number of known Environments:{}".format(number_of_known_environment)) print("Number of needed Testenvironments:{}".format(number_of_test_environment)) if number_of_known_environment < number_of_test_environment: print("Downloading missing environments...") - procThorInterface.download_num_random_environment(number_of_test_environment-number_of_known_environment) - -def run(): - known_environments=procThorInterface.get_all_environments_stored_below_folder(procThorInterface.source_folder) - v=0 - works=0 - fails=0 - for robot in robots: - for environment in known_environments: - v+=1 - print("Trying plan: {} with robot: {} in: {}".format("param_plan", robot, environment["name"])) - try: - param_plan(robot, environment["storage_place"]) - works+=1 - print("Successfully!\n Overall successful tries: {}".format(works)) - - except PlanFailure as e: - traceback.print_exc() - fails+=1 - print("Plan Fail!\n Overall failed tries: {}".format(fails)) - - except rospy.service.ServiceException as service_error: - traceback.print_exc() - fails+=1 - print("Service call failed!\n Overall failed tries: {}".format(fails)) - - # except pycram.plan_failures.IKError as ik_error: - # traceback.print_exc() - # fails+=1 - # print("IK Fail!\n Overall failed tries: {}".format(fails)) - except FileNotFoundError as e2: - traceback.print_exc() - fails += 1 - print("Fail!\n Overall failed tries: {}".format(fails)) - - finally: - try: - process_meta_data = pycram.orm.base.ProcessMetaData() - process_meta_data.description = "CEO Test run number {} robot:{} enviroment:{}".format(v,robot,environment["name"]) - process_meta_data.insert(session) - task_tree.root.insert(session) - except Exception as e: - traceback.print_exc() - print("Error while storing the NEEM. This should not happen.") - task_tree.reset_tree() - if World.current_world is not None: - World.current_world.exit() - # sleep(2) - # giskard.giskard_wrapper.clear_world() - - #clear giskard world? - - print("Resume:\nOverall successful tries: {}\nOverall failed tries: {}".format(works,fails)) - + procThorInterface.download_num_random_environment(number_of_test_environment - number_of_known_environment) def runWorld(): - v = 0 + counter = 0 works = 0 fails = 0 known_environments = procThorInterface.get_all_environments_stored_below_folder(procThorInterface.source_folder) - world=BulletWorld(WorldMode.GUI) - apartment=None + world = BulletWorld(WorldMode.GUI) + apartment = None milk_pos = Pose([1, -1.78, 0.55], [1, 0, 0, 0]) milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55], [1, 0, 0, 0]), color=Color(1, 0, 0, 1)) for robot in robots: - robot_obj=Object("pr2", ObjectType.ROBOT, robot, pose=Pose([1, 2, 0])) + robot_obj = Object("pr2", ObjectType.ROBOT, robot, pose=Pose([1, 2, 0])) for environment in known_environments: - v += 1 + counter += 1 print("Trying plan: {} with robot: {} in: {}".format("param_plan", robot, environment["name"])) try: - apartment = Object(environment["name"], ObjectType.ENVIRONMENT,environment["storage_place"]) + apartment = Object(environment["name"], ObjectType.ENVIRONMENT, environment["storage_place"]) generic_plan(world) works += 1 print("Successfully!\n Overall successful tries: {}".format(works)) @@ -130,7 +76,8 @@ def runWorld(): finally: try: process_meta_data = pycram.orm.base.ProcessMetaData() - process_meta_data.description = "CEO Test run number {} robot:{} enviroment:{}".format(v, robot, + process_meta_data.description = "CEO Test run number {} robot:{} enviroment:{}".format(counter, + robot, environment) process_meta_data.insert(session) task_tree.root.insert(session) @@ -145,9 +92,8 @@ def runWorld(): if World.current_world is None: world.remove_object(robot_obj) - print("Resume:\nOverall successful tries: {}\nOverall failed tries: {}".format(works, fails)) World.current_world.exit() -runWorld() \ No newline at end of file +runWorld() From 23134bdfbd05d30652405e2054e178514ceb0c3e Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Fri, 8 Nov 2024 14:15:02 +0100 Subject: [PATCH 24/44] Adds the first iteration of the procthor interface example --- examples/interface_examples/procthor.md | 120 ++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 examples/interface_examples/procthor.md diff --git a/examples/interface_examples/procthor.md b/examples/interface_examples/procthor.md new file mode 100644 index 000000000..32af9b5fc --- /dev/null +++ b/examples/interface_examples/procthor.md @@ -0,0 +1,120 @@ +# Procthor Interface - Creating a CEO for testing multible robots in mutliple enviromnents + +This Notebook aims to provide an overview of the ProcThor Interface, by giving an easy-to-understand example on how to +use it. We will be executing a simple pick and place plan with hard coded values and store the NEEMs of these +experiments within a local memory database. + +Please be aware that this Notebook (currently) works only when you are connected to the network at the university in +Bremen, otherwise we will not be able to connect to the REST service and the webserver itself. + +If you want to check if you are able to run the Notebook simply try to ping the following server. + +```batch + +ping procthor.informatik.uni-bremen.de + +``` + +If you get a positive answer back from the server everything seems to be all right. + +Now we need to set up the local memory database. +```python +import sqlalchemy +import pycram.orm.base + +engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=False) +session_maker = sqlalchemy.orm.sessionmaker(bind=engine) +session = session_maker() +pycram.orm.base.Base.metadata.create_all(engine) +session.commit() +``` +Time for some more setup, while we can technically use multiple robots in the different environments we for now stick +with only PR2. Afterwards, we will start to set up our ProcThorInterface. Our example will work with 5 different +environments. +```python +from pycram.external_interfaces.procthor import ProcThorInterface +from pycram.ros import ros_tools +pycram_path=ros_tools.get_ros_package_path('pycram') + +robots =[] +robot_name="pr2.urdf" +robots.append(robot_name) + + +procthor_rest_endpoint = "http://procthor.informatik.uni-bremen.de:5000/" +source_folder = pycram_path + "resources/tmp/" +procThorInterface=ProcThorInterface(base_url=procthor_rest_endpoint,source_folder=source_folder) +number_of_test_environment=5 +``` +First let us check how many different environments are already known. + +```python +number_of_known_environment=len(procThorInterface.get_all_environments_stored_below_folder(procThorInterface.source_folder)) +print("Number of known Environments:{}".format(number_of_known_environment)) +print("Number of needed Testenvironments:{}".format(number_of_test_environment)) +``` + +Now depending on if we have to get some more, we will download some additional: +```python +if number_of_known_environment < number_of_test_environment: + print("Downloading missing environments...") + procThorInterface.download_num_random_environment(number_of_test_environment-number_of_known_environment) +``` + +Now that the preparations are met we can start to run our plan for each robot (even though it is only one) and each +environment we know: +```python +v = 0 +works = 0 +fails = 0 +known_environments = procThorInterface.get_all_environments_stored_below_folder(procThorInterface.source_folder) +world=BulletWorld(WorldMode.GUI) +apartment=None +milk_pos = Pose([1, -1.78, 0.55], [1, 0, 0, 0]) +milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55], [1, 0, 0, 0]), + color=Color(1, 0, 0, 1)) +for robot in robots: + robot_obj=Object("pr2", ObjectType.ROBOT, robot, pose=Pose([1, 2, 0])) + for environment in known_environments: + v += 1 + print("Trying plan: {} with robot: {} in: {}".format("param_plan", robot, environment["name"])) + try: + apartment = Object(environment["name"], ObjectType.ENVIRONMENT,environment["storage_place"]) + generic_plan(world) + works += 1 + print("Successfully!\n Overall successful tries: {}".format(works)) + + except PlanFailure as e: + traceback.print_exc() + fails += 1 + print("Plan Fail!\n Overall failed tries: {}".format(fails)) + + except FileNotFoundError as e2: + traceback.print_exc() + fails += 1 + print("Fail!\n Overall failed tries: {}".format(fails)) + + finally: + try: + process_meta_data = pycram.orm.base.ProcessMetaData() + process_meta_data.description = "CEO Test run number {} robot:{} enviroment:{}".format(v, robot, + environment) + process_meta_data.insert(session) + task_tree.root.insert(session) + except Exception as e: + traceback.print_exc() + print("Error while storing the NEEM. This should not happen.") + task_tree.reset_tree() + if World.current_world is not None and apartment is not None: + world.remove_object(apartment) + milk.set_pose(milk_pos) + print("reseting world") +if World.current_world is None: + world.remove_object(robot_obj) + + +print("Resume:\nOverall successful tries: {}\nOverall failed tries: {}".format(works, fails)) +World.current_world.exit() +``` + + From 1c9190d0e4a4d83d6ceac7ba7908278433e46ff9 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Wed, 20 Nov 2024 11:50:46 +0100 Subject: [PATCH 25/44] Refactor function name --- examples/interface_examples/procthor.md | 15 ++++++++------- src/pycram/external_interfaces/procthor.py | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/examples/interface_examples/procthor.md b/examples/interface_examples/procthor.md index 32af9b5fc..edcd051ec 100644 --- a/examples/interface_examples/procthor.md +++ b/examples/interface_examples/procthor.md @@ -49,7 +49,8 @@ number_of_test_environment=5 First let us check how many different environments are already known. ```python -number_of_known_environment=len(procThorInterface.get_all_environments_stored_below_folder(procThorInterface.source_folder)) +number_of_known_environment = len( + procThorInterface.get_all_environments_stored_below_dictionary(procThorInterface.source_folder)) print("Number of known Environments:{}".format(number_of_known_environment)) print("Number of needed Testenvironments:{}".format(number_of_test_environment)) ``` @@ -63,23 +64,24 @@ if number_of_known_environment < number_of_test_environment: Now that the preparations are met we can start to run our plan for each robot (even though it is only one) and each environment we know: + ```python v = 0 works = 0 fails = 0 -known_environments = procThorInterface.get_all_environments_stored_below_folder(procThorInterface.source_folder) -world=BulletWorld(WorldMode.GUI) -apartment=None +known_environments = procThorInterface.get_all_environments_stored_below_dictionary(procThorInterface.source_folder) +world = BulletWorld(WorldMode.GUI) +apartment = None milk_pos = Pose([1, -1.78, 0.55], [1, 0, 0, 0]) milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55], [1, 0, 0, 0]), color=Color(1, 0, 0, 1)) for robot in robots: - robot_obj=Object("pr2", ObjectType.ROBOT, robot, pose=Pose([1, 2, 0])) + robot_obj = Object("pr2", ObjectType.ROBOT, robot, pose=Pose([1, 2, 0])) for environment in known_environments: v += 1 print("Trying plan: {} with robot: {} in: {}".format("param_plan", robot, environment["name"])) try: - apartment = Object(environment["name"], ObjectType.ENVIRONMENT,environment["storage_place"]) + apartment = Object(environment["name"], ObjectType.ENVIRONMENT, environment["storage_place"]) generic_plan(world) works += 1 print("Successfully!\n Overall successful tries: {}".format(works)) @@ -112,7 +114,6 @@ for robot in robots: if World.current_world is None: world.remove_object(robot_obj) - print("Resume:\nOverall successful tries: {}\nOverall failed tries: {}".format(works, fails)) World.current_world.exit() ``` diff --git a/src/pycram/external_interfaces/procthor.py b/src/pycram/external_interfaces/procthor.py index 4efe5596f..2ed08a399 100644 --- a/src/pycram/external_interfaces/procthor.py +++ b/src/pycram/external_interfaces/procthor.py @@ -15,7 +15,7 @@ def __init__(self, base_url="http://procthor.informatik.uni-bremen.de:5000", self.base_url = base_url self.source_folder = source_folder self.stored_environments = [] - self.stored_environments.extend(self.get_all_environments_stored_below_folder(self.source_folder)) + self.stored_environments.extend(self.get_all_environments_stored_below_dictionary(self.source_folder)) def _download_file(self, base_url: str, full_url: str, folder: str) -> str: """ @@ -97,7 +97,7 @@ def download_all_files_from_URL(self, base_url: str, folder: str) -> None: # Returns a list of all the urdf files in a given folder structure if non is given uses the base_source_folder # only look for urdf, but can be easly adapted - def get_all_environments_stored_below_folder(self, source_folder: str) -> list: + def get_all_environments_stored_below_dictionary(self, source_folder: str) -> list: """ Returns a list of dictionaries that contains the name and the storage_place of all urdf files below a given folder. Only looks for urdf. From cd3bf472f04d78990ffe2da8f541c06ee1ebd45e Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Wed, 20 Nov 2024 11:51:45 +0100 Subject: [PATCH 26/44] Removes unnecessary comments and refactors function name --- demos/playingfield/ceo.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/demos/playingfield/ceo.py b/demos/playingfield/ceo.py index fae7e14b1..9f87b4ab9 100644 --- a/demos/playingfield/ceo.py +++ b/demos/playingfield/ceo.py @@ -16,8 +16,6 @@ import pycram.orm.base from pycram.external_interfaces.procthor import ProcThorInterface -# Many Plans in many environments with many robots -# Don't know where to store NEEM so I start with the memory db engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=False) session_maker = sqlalchemy.orm.sessionmaker(bind=engine) session = session_maker() @@ -34,7 +32,7 @@ # Get Environments number_of_known_environment = len( - procThorInterface.get_all_environments_stored_below_folder(procThorInterface.source_folder)) + procThorInterface.get_all_environments_stored_below_dictionary(procThorInterface.source_folder)) print("Number of known Environments:{}".format(number_of_known_environment)) print("Number of needed Testenvironments:{}".format(number_of_test_environment)) @@ -46,7 +44,7 @@ def runWorld(): counter = 0 works = 0 fails = 0 - known_environments = procThorInterface.get_all_environments_stored_below_folder(procThorInterface.source_folder) + known_environments = procThorInterface.get_all_environments_stored_below_dictionary(procThorInterface.source_folder) world = BulletWorld(WorldMode.GUI) apartment = None milk_pos = Pose([1, -1.78, 0.55], [1, 0, 0, 0]) From 700b7a3ef2ff9fc776cf6e5835a2167a047b1489 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Wed, 20 Nov 2024 11:53:26 +0100 Subject: [PATCH 27/44] Removes old iteration, which somehow made it this far --- demos/playingfield/sandcastle.py | 154 ------------------------------- 1 file changed, 154 deletions(-) delete mode 100644 demos/playingfield/sandcastle.py diff --git a/demos/playingfield/sandcastle.py b/demos/playingfield/sandcastle.py deleted file mode 100644 index 5e6fb0e23..000000000 --- a/demos/playingfield/sandcastle.py +++ /dev/null @@ -1,154 +0,0 @@ -from pycram.worlds.bullet_world import BulletWorld -from pycram.designators.action_designator import * -from pycram.designators.location_designator import * -from pycram.designators.object_designator import * -from pycram.datastructures.enums import ObjectType, WorldMode -from pycram.datastructures.pose import Pose -from pycram.process_module import simulated_robot, with_simulated_robot -from pycram.object_descriptors.urdf import ObjectDescription -from pycram.world_concepts.world_object import Object -from pycram.datastructures.dataclasses import Color -from pycram.worlds.multiverse import Multiverse - - -def param_plan(robot_path,environment_path): - world = BulletWorld(WorldMode.GUI) - # world= Multiverse(simulation='pycram_test') - apartment = Object(environment_path[:environment_path.find(".")], ObjectType.ENVIRONMENT, environment_path) - robot = Object("pr2", ObjectType.ROBOT, robot_path, pose=Pose([1, 2, 0])) - - - milk_pos=Pose([1, -1.78, 0.55],[1,0,0,0]) - milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55],[1,0,0,0]), - color=Color(1, 0, 0, 1)) - - pick_pose = Pose([1, -1.78, 0.55]) - - robot_desig = BelieveObject(names=["pr2"]) - apartment_desig = BelieveObject(names=["apartment"]) - - - @with_simulated_robot - def move_and_detect(obj_type): - NavigateAction(target_locations=[Pose([2, -1.89, 0])]).resolve().perform() - - LookAtAction(targets=[pick_pose]).resolve().perform() - - object_desig = DetectAction(BelieveObject(types=[obj_type])).resolve().perform() - - return object_desig - - - with simulated_robot: - ParkArmsAction([Arms.BOTH]).resolve().perform() - - MoveTorsoAction([0.25]).resolve().perform() - - milk_desig = move_and_detect(ObjectType.MILK) - - TransportAction(milk_desig, [Arms.LEFT], [Pose([4.8, 3.55, 0.8])]).resolve().perform() - - ParkArmsAction([Arms.BOTH]).resolve().perform() - -# param_plan("pr2.urdf","tmp/house_666/house_666.urdf") - - -def param_plan2(robot_path, environment_path): - cheatcode={"/home/nleusmann/catkin_ws/src/pycram/resources/apartment.urdf":[Pose([2.62,2.22,1.1]),Pose([4.8, 3.55, 0.8])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_1/house_1.urdf": [Pose([9.16,-1.07,1.20]), Pose([11.82,-6.2,0.8])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_2/house_2.urdf":[Pose([1, -1.78, 0.55]),Pose([2.71,-0.22,0.75])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_3/house_3.urdf":[Pose([6.02, -5.41, 1]),Pose([10.49,-5.83,0.80])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_4/house_4.urdf":[Pose([5.33, -8.81, 1]),Pose([3.78,-8.71,0.75])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_5/house_5.urdf": [Pose([0.5, -6.61, 1]), Pose([4.46, -4.42, 0.85])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_6/house_6.urdf": [Pose([9.73, -9, 0.80]), Pose([7.17, -5.57, 0.85])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_7/house_7.urdf": [Pose([8.77, -2.88, 1]), Pose([9.34, -4.44, 0.80])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_8/house_8.urdf": [Pose([12.28, -7.76, 1]), Pose([10.02, -12.34, 1])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_9/house_9.urdf": [Pose([6.54, -8.51, 1]), Pose([3.5, -7.8, 0.85])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_10/house_10.urdf": [Pose([8.74, -1.3, 1]), Pose([5.74, -2.91, 1])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_11/house_11.urdf": [Pose([7.03, -2.19, 1]), Pose([3.66, -5.84, 0.75],[1,0,0,0]),Pose([6.7, -3.5, 0])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_42/house_42.urdf":[Pose([7.43,-9.37,1.05]),Pose([11.12,-8.35,0.9])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_666/house_666.urdf":[Pose([7.06,-6.82,1]),Pose([1.25,-3.92,0.75],[1,0,0,0]),Pose([7.17,-7.77,0])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_1337/house_1337.urdf":[Pose([2.45,-0.36,0.9]),Pose([0.61,-5.82,0.8],[1,0,0,0]),Pose([2.34,-1.47,0])]} - world = BulletWorld(WorldMode.GUI) - # world= Multiverse(simulation='pycram_test') - print(environment_path+35*'#') - apartment = Object(environment_path[:environment_path.find(".")], ObjectType.ENVIRONMENT, environment_path) - robot = Object("pr2", ObjectType.ROBOT, robot_path, pose=Pose([1, 2, 0])) - milk_pos = cheatcode[environment_path][0] - put_down_pos=cheatcode[environment_path][1] - move_pos=milk_pos.copy() - move_pos.pose.position.x=move_pos.pose.position.x-0.7 - move_pos.pose.position.z=0 - milk = Object("milk", ObjectType.MILK, "milk.stl", pose=milk_pos,color=Color(1, 0, 0, 1)) - - pick_pose = Pose([1, -1.78, 0.55]) - - robot_desig = BelieveObject(names=["pr2"]) - apartment_desig = BelieveObject(names=["apartment"]) - - @with_simulated_robot - def move_and_detect(obj_type): - NavigateAction(target_locations=[cheatcode[environment_path][2]]).resolve().perform() - - LookAtAction(targets=[milk_pos]).resolve().perform() - - object_desig = DetectAction(BelieveObject(types=[obj_type])).resolve().perform() - - return object_desig - - with simulated_robot: - ParkArmsAction([Arms.BOTH]).resolve().perform() - - MoveTorsoAction([0.25]).resolve().perform() - - milk_desig = move_and_detect(ObjectType.MILK) - - TransportAction(milk_desig, [Arms.LEFT], [put_down_pos]).resolve().perform() - - ParkArmsAction([Arms.BOTH]).resolve().perform() - -# param_plan2("pr2.urdf","/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_6/house_6.urdf") - -def loader(): - for i in range(15): - print(i) - world = BulletWorld(WorldMode.GUI) - # world= Multiverse(simulation='pycram_test') - apartment = Object("house6", ObjectType.ENVIRONMENT,"/home/nleusmann/catkin_ws/src/pycram/resources/apartment.urdf") - world.remove_object_from_simulator(apartment) - -# loader() - - -def generic_plan(inWorld): - world = inWorld - - # milk_pos = Pose([1, -1.78, 0.55], [1, 0, 0, 0]) - # milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55], [1, 0, 0, 0]), - # color=Color(1, 0, 0, 1)) - - pick_pose = Pose([1, -1.78, 0.55]) - - robot_desig = BelieveObject(names=["pr2"]) - apartment_desig = BelieveObject(names=["apartment"]) - - @with_simulated_robot - def move_and_detect(obj_type): - NavigateAction(target_locations=[Pose([2, -1.89, 0])]).resolve().perform() - - LookAtAction(targets=[pick_pose]).resolve().perform() - - object_desig = DetectAction(BelieveObject(types=[obj_type])).resolve().perform() - - return object_desig - - with simulated_robot: - ParkArmsAction([Arms.BOTH]).resolve().perform() - - MoveTorsoAction([0.25]).resolve().perform() - - milk_desig = move_and_detect(ObjectType.MILK) - - TransportAction(milk_desig, [Arms.LEFT], [Pose([4.8, 3.55, 0.8])]).resolve().perform() - - ParkArmsAction([Arms.BOTH]).resolve().perform() \ No newline at end of file From 6a056a5484d24516b4742a309ebe3d852adb7a79 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Wed, 20 Nov 2024 11:56:18 +0100 Subject: [PATCH 28/44] Removes old iteration, which somehow made it this far --- demos/playingfield/ceo.py | 97 --------------------------------------- 1 file changed, 97 deletions(-) delete mode 100644 demos/playingfield/ceo.py diff --git a/demos/playingfield/ceo.py b/demos/playingfield/ceo.py deleted file mode 100644 index 9f87b4ab9..000000000 --- a/demos/playingfield/ceo.py +++ /dev/null @@ -1,97 +0,0 @@ -import rospy - -from pycram.worlds.bullet_world import BulletWorld -from pycram.datastructures.enums import ObjectType, WorldMode -from pycram.world_concepts.world_object import Object -from pycram.datastructures.pose import Pose - -from pycram.datastructures.dataclasses import Color -from demos.playingfield.sandcastle import generic_plan -from pycram import World -from pycram.failures import PlanFailure -from pycram.tasktree import task_tree - -import traceback -import sqlalchemy -import pycram.orm.base -from pycram.external_interfaces.procthor import ProcThorInterface - -engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=False) -session_maker = sqlalchemy.orm.sessionmaker(bind=engine) -session = session_maker() -# ToDo: Many Plans missing, but this needs function pointers and I am not comfortable with it -# plans=[] -robots = [] -robot_name = "pr2.urdf" -robots.append(robot_name) -pycram.orm.base.Base.metadata.create_all(engine) -session.commit() -# Set up for ProcThor stuff Example usage -procThorInterface = ProcThorInterface(base_url="http://procthor.informatik.uni-bremen.de:5000/") -number_of_test_environment = 5 - -# Get Environments -number_of_known_environment = len( - procThorInterface.get_all_environments_stored_below_dictionary(procThorInterface.source_folder)) -print("Number of known Environments:{}".format(number_of_known_environment)) -print("Number of needed Testenvironments:{}".format(number_of_test_environment)) - -if number_of_known_environment < number_of_test_environment: - print("Downloading missing environments...") - procThorInterface.download_num_random_environment(number_of_test_environment - number_of_known_environment) - -def runWorld(): - counter = 0 - works = 0 - fails = 0 - known_environments = procThorInterface.get_all_environments_stored_below_dictionary(procThorInterface.source_folder) - world = BulletWorld(WorldMode.GUI) - apartment = None - milk_pos = Pose([1, -1.78, 0.55], [1, 0, 0, 0]) - milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55], [1, 0, 0, 0]), - color=Color(1, 0, 0, 1)) - for robot in robots: - robot_obj = Object("pr2", ObjectType.ROBOT, robot, pose=Pose([1, 2, 0])) - for environment in known_environments: - counter += 1 - print("Trying plan: {} with robot: {} in: {}".format("param_plan", robot, environment["name"])) - try: - apartment = Object(environment["name"], ObjectType.ENVIRONMENT, environment["storage_place"]) - generic_plan(world) - works += 1 - print("Successfully!\n Overall successful tries: {}".format(works)) - - except PlanFailure as e: - traceback.print_exc() - fails += 1 - print("Plan Fail!\n Overall failed tries: {}".format(fails)) - - except FileNotFoundError as e2: - traceback.print_exc() - fails += 1 - print("Fail!\n Overall failed tries: {}".format(fails)) - - finally: - try: - process_meta_data = pycram.orm.base.ProcessMetaData() - process_meta_data.description = "CEO Test run number {} robot:{} enviroment:{}".format(counter, - robot, - environment) - process_meta_data.insert(session) - task_tree.root.insert(session) - except Exception as e: - traceback.print_exc() - print("Error while storing the NEEM. This should not happen.") - task_tree.reset_tree() - if World.current_world is not None and apartment is not None: - world.remove_object(apartment) - milk.set_pose(milk_pos) - print("reseting world") - if World.current_world is None: - world.remove_object(robot_obj) - - print("Resume:\nOverall successful tries: {}\nOverall failed tries: {}".format(works, fails)) - World.current_world.exit() - - -runWorld() From 39537b98969d4032d1e88c521ba1335e79d7ab18 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Wed, 20 Nov 2024 12:03:51 +0100 Subject: [PATCH 29/44] Renames CEO in to demo --- demos/pycram_procthor_demo/demo.py | 97 ++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 demos/pycram_procthor_demo/demo.py diff --git a/demos/pycram_procthor_demo/demo.py b/demos/pycram_procthor_demo/demo.py new file mode 100644 index 000000000..9f87b4ab9 --- /dev/null +++ b/demos/pycram_procthor_demo/demo.py @@ -0,0 +1,97 @@ +import rospy + +from pycram.worlds.bullet_world import BulletWorld +from pycram.datastructures.enums import ObjectType, WorldMode +from pycram.world_concepts.world_object import Object +from pycram.datastructures.pose import Pose + +from pycram.datastructures.dataclasses import Color +from demos.playingfield.sandcastle import generic_plan +from pycram import World +from pycram.failures import PlanFailure +from pycram.tasktree import task_tree + +import traceback +import sqlalchemy +import pycram.orm.base +from pycram.external_interfaces.procthor import ProcThorInterface + +engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=False) +session_maker = sqlalchemy.orm.sessionmaker(bind=engine) +session = session_maker() +# ToDo: Many Plans missing, but this needs function pointers and I am not comfortable with it +# plans=[] +robots = [] +robot_name = "pr2.urdf" +robots.append(robot_name) +pycram.orm.base.Base.metadata.create_all(engine) +session.commit() +# Set up for ProcThor stuff Example usage +procThorInterface = ProcThorInterface(base_url="http://procthor.informatik.uni-bremen.de:5000/") +number_of_test_environment = 5 + +# Get Environments +number_of_known_environment = len( + procThorInterface.get_all_environments_stored_below_dictionary(procThorInterface.source_folder)) +print("Number of known Environments:{}".format(number_of_known_environment)) +print("Number of needed Testenvironments:{}".format(number_of_test_environment)) + +if number_of_known_environment < number_of_test_environment: + print("Downloading missing environments...") + procThorInterface.download_num_random_environment(number_of_test_environment - number_of_known_environment) + +def runWorld(): + counter = 0 + works = 0 + fails = 0 + known_environments = procThorInterface.get_all_environments_stored_below_dictionary(procThorInterface.source_folder) + world = BulletWorld(WorldMode.GUI) + apartment = None + milk_pos = Pose([1, -1.78, 0.55], [1, 0, 0, 0]) + milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55], [1, 0, 0, 0]), + color=Color(1, 0, 0, 1)) + for robot in robots: + robot_obj = Object("pr2", ObjectType.ROBOT, robot, pose=Pose([1, 2, 0])) + for environment in known_environments: + counter += 1 + print("Trying plan: {} with robot: {} in: {}".format("param_plan", robot, environment["name"])) + try: + apartment = Object(environment["name"], ObjectType.ENVIRONMENT, environment["storage_place"]) + generic_plan(world) + works += 1 + print("Successfully!\n Overall successful tries: {}".format(works)) + + except PlanFailure as e: + traceback.print_exc() + fails += 1 + print("Plan Fail!\n Overall failed tries: {}".format(fails)) + + except FileNotFoundError as e2: + traceback.print_exc() + fails += 1 + print("Fail!\n Overall failed tries: {}".format(fails)) + + finally: + try: + process_meta_data = pycram.orm.base.ProcessMetaData() + process_meta_data.description = "CEO Test run number {} robot:{} enviroment:{}".format(counter, + robot, + environment) + process_meta_data.insert(session) + task_tree.root.insert(session) + except Exception as e: + traceback.print_exc() + print("Error while storing the NEEM. This should not happen.") + task_tree.reset_tree() + if World.current_world is not None and apartment is not None: + world.remove_object(apartment) + milk.set_pose(milk_pos) + print("reseting world") + if World.current_world is None: + world.remove_object(robot_obj) + + print("Resume:\nOverall successful tries: {}\nOverall failed tries: {}".format(works, fails)) + World.current_world.exit() + + +runWorld() From 87e3a980896d5430be75f55c35302ed91fd5fb58 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Wed, 27 Nov 2024 14:57:38 +0100 Subject: [PATCH 30/44] First iteration of the experiment Interface --- demos/playfield/ceo.py | 105 +++++++++++++ demos/playfield/experiment.py | 63 ++++++++ demos/playfield/sandcastle.py | 208 +++++++++++++++++++++++++ demos/playfield/task_tree_publisher.py | 38 +++++ 4 files changed, 414 insertions(+) create mode 100644 demos/playfield/ceo.py create mode 100644 demos/playfield/experiment.py create mode 100644 demos/playfield/sandcastle.py create mode 100644 demos/playfield/task_tree_publisher.py diff --git a/demos/playfield/ceo.py b/demos/playfield/ceo.py new file mode 100644 index 000000000..667516e9f --- /dev/null +++ b/demos/playfield/ceo.py @@ -0,0 +1,105 @@ +import rospy +from sympy.codegen import Print + +from demos.playfield.experiment import Experiment +from pycram.worlds.bullet_world import BulletWorld +from pycram.datastructures.enums import ObjectType, WorldMode +from pycram.world_concepts.world_object import Object +from pycram.datastructures.pose import Pose +from pycram.language import Code +from pycram.datastructures.dataclasses import Color +from demos.playfield.sandcastle import generic_plan, GenericCode, languagePlanTest +from pycram import World +from pycram.failures import PlanFailure +from pycram.tasktree import task_tree + +import traceback +import sqlalchemy +import pycram.orm.base +from pycram.external_interfaces.procthor import ProcThorInterface + +print("We start by creating stuff"*10) + +engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=False) +session_maker = sqlalchemy.orm.sessionmaker(bind=engine) +session = session_maker() +# ToDo: Many Plans missing, but this needs function pointers and I am not comfortable with it +# plans=[] +robots = [] +robot_name = "pr2.urdf" +robots.append(robot_name) +pycram.orm.base.Base.metadata.create_all(engine) +session.commit() +# Set up for ProcThor stuff Example usage +procThorInterface = ProcThorInterface(base_url="http://procthor.informatik.uni-bremen.de:5000/") +number_of_test_environment = 5 + +print("We Check for environmnets"*10) +# Get Environments +number_of_known_environment = len( + procThorInterface.get_all_environments_stored_below_dictionary(procThorInterface.source_folder)) +print("Number of known Environments:{}".format(number_of_known_environment)) +print("Number of needed Testenvironments:{}".format(number_of_test_environment)) + + +if number_of_known_environment < number_of_test_environment: + print("Downloading missing environments...") + procThorInterface.download_num_random_environment(number_of_test_environment - number_of_known_environment) + +print("before Function"*10) +def runWorld(): + counter = 0 + works = 0 + fails = 0 + known_environments = procThorInterface.get_all_environments_stored_below_dictionary(procThorInterface.source_folder) + world = BulletWorld(WorldMode.GUI) + milk_pos = Pose([1, -1.78, 0.55], [1, 0, 0, 0]) + milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55], [1, 0, 0, 0]), + color=Color(1, 0, 0, 1)) + for robot in robots: # ToDo: Generic + # robot_obj = Object("pr2", ObjectType.ROBOT, robot, pose=Pose([1, 2, 0])) + for environment in known_environments: + counter += 1 + print("Trying plan: {} with robot: {} in: {}".format("param_plan", robot, environment["name"])) + try: + # apartment = Object(environment["name"], ObjectType.ENVIRONMENT, environment["storage_place"]) + print("enviroment: {}\n Robot:{}\n languagePlan:{}".format(environment, robot,languagePlanTest)) + setupNr1=Experiment(environment["name"],robot,Code(languagePlanTest)) + + setupNr1.plan.perform() + works += 1 + print("Successfully!\n Overall successful tries: {}".format(works)) + + except PlanFailure as e: + traceback.print_exc() + fails += 1 + print("Plan Fail!\n Overall failed tries: {}".format(fails)) + + except FileNotFoundError as e2: + traceback.print_exc() + fails += 1 + print("Fail!\n Overall failed tries: {}".format(fails)) + + finally: + try: + process_meta_data = pycram.orm.base.ProcessMetaData() + process_meta_data.description = "CEO Test run number {} robot:{} enviroment:{}".format(counter, + robot, + environment) + process_meta_data.insert(session) + task_tree.root.insert(session) + except Exception as e: + traceback.print_exc() + print("Error while storing the NEEM. This should not happen.") + task_tree.reset_tree() + if World.current_world is not None: + setupNr1.close() + print("reseting world") + # if World.current_world is None: + # world.remove_object(robot_obj) + + print("Resume:\nOverall successful tries: {}\nOverall failed tries: {}".format(works, fails)) + World.current_world.exit() + +print("We start now") +runWorld() \ No newline at end of file diff --git a/demos/playfield/experiment.py b/demos/playfield/experiment.py new file mode 100644 index 000000000..cc03b1ea7 --- /dev/null +++ b/demos/playfield/experiment.py @@ -0,0 +1,63 @@ +from pycram.language import Language +from pycram.world_concepts.world_object import Object, World +from pycram.datastructures.enums import ObjectType +from pycram.datastructures.pose import Pose +# from gymnasium import core +import gymnasium as gym + +# from gymnasium_interface.pycram_gym_env import PyCRAMGymEnv + +class Experiment(gym.Env): + """ + Class that takes a pointer to the world and a robot name. Will take care of (de)spawning the desired robot + and running the plan. Plan needs to be proper defined and of the plan language. + + :ivar world: filename of the enviroment that should be loaded + :ivar robot: Name of the robot that executes the plan + :ivar plan: pycram.planlanguage object that contains the whole plan if present + """ + + def __init__(self, inWorld: str, inRobot: str, inPlan: Language): + super().__init__() + if World.current_world is not None: + if inRobot.endswith('.urdf'): + self.robot = Object(inRobot.split('.urdf')[0], ObjectType.ROBOT, inRobot, pose=Pose([1, 2, 0])) + else: + self.robot = Object(inRobot, ObjectType.ROBOT, inRobot+".urdf", pose=Pose([1, 2, 0])) + self.world = Object(inWorld, ObjectType.ENVIRONMENT, inWorld + ".urdf") + self.plan = inPlan + + def step(self, action: gym.core.ActType): + """ + Class that takes a pointer to the world and a robot name. Will take care of (de)spawning the desired robot + and running the plan. Plan needs to be proper defined and of the plan language. + + :ivar world: filename of the enviroment that should be loaded + :ivar robot: Name of the robot that executes the plan + :ivar plan: pycram.planlanguage object that contains the whole plan if present + """ + return None + + def reset(self): + """ + Class that takes a pointer to the world and a robot name. Will take care of (de)spawning the desired robot + and running the plan. Plan needs to be proper defined and of the plan language. + + :ivar world: filename of the enviroment that should be loaded + :ivar robot: Name of the robot that executes the plan + :ivar plan: pycram.planlanguage object that contains the whole plan if present + """ + self.world.reset() + + def close(self): + """ + Class that takes a pointer to the world and a robot name. Will take care of (de)spawning the desired robot + and running the plan. Plan needs to be proper defined and of the plan language. + + :ivar world: filename of the enviroment that should be loaded + :ivar robot: Name of the robot that executes the plan + :ivar plan: pycram.planlanguage object that contains the whole plan if present + """ + if World.current_world is not None and self.world is not None: + World.current_world.remove_object(self.world) + World.current_world.remove_object(self.robot) diff --git a/demos/playfield/sandcastle.py b/demos/playfield/sandcastle.py new file mode 100644 index 000000000..744fffd7a --- /dev/null +++ b/demos/playfield/sandcastle.py @@ -0,0 +1,208 @@ +from pycram.worlds.bullet_world import BulletWorld +from pycram.designators.action_designator import * +from pycram.designators.location_designator import * +from pycram.designators.object_designator import * +from pycram.datastructures.enums import ObjectType, WorldMode +from pycram.datastructures.pose import Pose +from pycram.process_module import simulated_robot, with_simulated_robot +from pycram.object_descriptors.urdf import ObjectDescription +from pycram.world_concepts.world_object import Object +from pycram.datastructures.dataclasses import Color +from pycram.worlds.multiverse import Multiverse +from pycram.language import Code + +def param_plan(robot_path,environment_path): + world = BulletWorld(WorldMode.GUI) + # world= Multiverse(simulation='pycram_test') + apartment = Object(environment_path[:environment_path.find(".")], ObjectType.ENVIRONMENT, environment_path) + robot = Object("pr2", ObjectType.ROBOT, robot_path, pose=Pose([1, 2, 0])) + + + milk_pos=Pose([1, -1.78, 0.55],[1,0,0,0]) + milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55],[1,0,0,0]), + color=Color(1, 0, 0, 1)) + + pick_pose = Pose([1, -1.78, 0.55]) + + robot_desig = BelieveObject(names=["pr2"]) + apartment_desig = BelieveObject(names=["apartment"]) + + + @with_simulated_robot + def move_and_detect(obj_type): + NavigateAction(target_locations=[Pose([2, -1.89, 0])]).resolve().perform() + + LookAtAction(targets=[pick_pose]).resolve().perform() + + object_desig = DetectAction(BelieveObject(types=[obj_type])).resolve().perform() + + return object_desig + + + with simulated_robot: + ParkArmsAction([Arms.BOTH]).resolve().perform() + + MoveTorsoAction([0.25]).resolve().perform() + + milk_desig = move_and_detect(ObjectType.MILK) + + TransportAction(milk_desig, [Arms.LEFT], [Pose([4.8, 3.55, 0.8])]).resolve().perform() + + ParkArmsAction([Arms.BOTH]).resolve().perform() + +# param_plan("pr2.urdf","tmp/house_666/house_666.urdf") + + +def param_plan2(robot_path, environment_path): + cheatcode={"/home/nleusmann/catkin_ws/src/pycram/resources/apartment.urdf":[Pose([2.62,2.22,1.1]),Pose([4.8, 3.55, 0.8])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_1/house_1.urdf": [Pose([9.16,-1.07,1.20]), Pose([11.82,-6.2,0.8])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_2/house_2.urdf":[Pose([1, -1.78, 0.55]),Pose([2.71,-0.22,0.75])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_3/house_3.urdf":[Pose([6.02, -5.41, 1]),Pose([10.49,-5.83,0.80])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_4/house_4.urdf":[Pose([5.33, -8.81, 1]),Pose([3.78,-8.71,0.75])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_5/house_5.urdf": [Pose([0.5, -6.61, 1]), Pose([4.46, -4.42, 0.85])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_6/house_6.urdf": [Pose([9.73, -9, 0.80]), Pose([7.17, -5.57, 0.85])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_7/house_7.urdf": [Pose([8.77, -2.88, 1]), Pose([9.34, -4.44, 0.80])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_8/house_8.urdf": [Pose([12.28, -7.76, 1]), Pose([10.02, -12.34, 1])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_9/house_9.urdf": [Pose([6.54, -8.51, 1]), Pose([3.5, -7.8, 0.85])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_10/house_10.urdf": [Pose([8.74, -1.3, 1]), Pose([5.74, -2.91, 1])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_11/house_11.urdf": [Pose([7.03, -2.19, 1]), Pose([3.66, -5.84, 0.75],[1,0,0,0]),Pose([6.7, -3.5, 0])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_42/house_42.urdf":[Pose([7.43,-9.37,1.05]),Pose([11.12,-8.35,0.9])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_666/house_666.urdf":[Pose([7.06,-6.82,1]),Pose([1.25,-3.92,0.75],[1,0,0,0]),Pose([7.17,-7.77,0])], + "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_1337/house_1337.urdf":[Pose([2.45,-0.36,0.9]),Pose([0.61,-5.82,0.8],[1,0,0,0]),Pose([2.34,-1.47,0])]} + world = BulletWorld(WorldMode.GUI) + # world= Multiverse(simulation='pycram_test') + print(environment_path+35*'#') + apartment = Object(environment_path[:environment_path.find(".")], ObjectType.ENVIRONMENT, environment_path) + robot = Object("pr2", ObjectType.ROBOT, robot_path, pose=Pose([1, 2, 0])) + milk_pos = cheatcode[environment_path][0] + put_down_pos=cheatcode[environment_path][1] + move_pos=milk_pos.copy() + move_pos.pose.position.x=move_pos.pose.position.x-0.7 + move_pos.pose.position.z=0 + milk = Object("milk", ObjectType.MILK, "milk.stl", pose=milk_pos,color=Color(1, 0, 0, 1)) + + pick_pose = Pose([1, -1.78, 0.55]) + + robot_desig = BelieveObject(names=["pr2"]) + apartment_desig = BelieveObject(names=["apartment"]) + + @with_simulated_robot + def move_and_detect(obj_type): + NavigateAction(target_locations=[cheatcode[environment_path][2]]).resolve().perform() + + LookAtAction(targets=[milk_pos]).resolve().perform() + + object_desig = DetectAction(BelieveObject(types=[obj_type])).resolve().perform() + + return object_desig + + with simulated_robot: + ParkArmsAction([Arms.BOTH]).resolve().perform() + + MoveTorsoAction([0.25]).resolve().perform() + + milk_desig = move_and_detect(ObjectType.MILK) + + TransportAction(milk_desig, [Arms.LEFT], [put_down_pos]).resolve().perform() + + ParkArmsAction([Arms.BOTH]).resolve().perform() + +# param_plan2("pr2.urdf","/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_6/house_6.urdf") + +def loader(): + for i in range(15): + print(i) + world = BulletWorld(WorldMode.GUI) + # world= Multiverse(simulation='pycram_test') + apartment = Object("house6", ObjectType.ENVIRONMENT,"/home/nleusmann/catkin_ws/src/pycram/resources/apartment.urdf") + world.remove_object_from_simulator(apartment) + +# loader() + + +def generic_plan(inWorld): + world = inWorld + + # milk_pos = Pose([1, -1.78, 0.55], [1, 0, 0, 0]) + # milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55], [1, 0, 0, 0]), + # color=Color(1, 0, 0, 1)) + + pick_pose = Pose([1, -1.78, 0.55]) + + robot_desig = BelieveObject(names=["pr2"]) + apartment_desig = BelieveObject(names=["apartment"]) + + @with_simulated_robot + def move_and_detect(obj_type): + NavigateAction(target_locations=[Pose([2, -1.89, 0])]).resolve().perform() + + LookAtAction(targets=[pick_pose]).resolve().perform() + + object_desig = DetectAction(BelieveObject(types=[obj_type])).resolve().perform() + + return object_desig + + with simulated_robot: + ParkArmsAction([Arms.BOTH]).resolve().perform() + + MoveTorsoAction([0.25]).resolve().perform() + + milk_desig = move_and_detect(ObjectType.MILK) + + TransportAction(milk_desig, [Arms.LEFT], [Pose([4.8, 3.55, 0.8])]).resolve().perform() + + ParkArmsAction([Arms.BOTH]).resolve().perform() + + +def languagePlanTest(): + print("My Plan gets called") + pick_pose = Pose([1, -1.78, 0.55]) + @with_simulated_robot + def move_and_detect(obj_type): + NavigateAction(target_locations=[Pose([2, -1.89, 0])]).resolve().perform() + + LookAtAction(targets=[pick_pose]).resolve().perform() + + object_desig = DetectAction(BelieveObject(types=[obj_type])).resolve().perform() + + return object_desig + + with simulated_robot: + ParkArmsAction([Arms.BOTH]).resolve().perform() + + MoveTorsoAction([0.25]).resolve().perform() + + milk_desig = move_and_detect(ObjectType.MILK) + + TransportAction(milk_desig, [Arms.LEFT], [Pose([4.8, 3.55, 0.8])]).resolve().perform() + + ParkArmsAction([Arms.BOTH]).resolve().perform() + + +class GenericCode(Code): + def __init__(self): + super().__init__() + + def perform(self): + pick_pose = Pose([1, -1.78, 0.55]) + + @with_simulated_robot + def move_and_detect(obj_type): + NavigateAction(target_locations=[Pose([2, -1.89, 0])]).resolve().perform() + + LookAtAction(targets=[pick_pose]).resolve().perform() + + object_desig = DetectAction(BelieveObject(types=[obj_type])).resolve().perform() + + return object_desig + + with simulated_robot: + ParkArmsAction([Arms.BOTH]).resolve().perform() + + MoveTorsoAction([0.25]).resolve().perform() + + milk_desig = move_and_detect(ObjectType.MILK) + + TransportAction(milk_desig, [Arms.LEFT], [Pose([4.8, 3.55, 0.8])]).resolve().perform() + + ParkArmsAction([Arms.BOTH]).resolve().perform() \ No newline at end of file diff --git a/demos/playfield/task_tree_publisher.py b/demos/playfield/task_tree_publisher.py new file mode 100644 index 000000000..90c484a33 --- /dev/null +++ b/demos/playfield/task_tree_publisher.py @@ -0,0 +1,38 @@ +from pycram.ros import ros_tools +from pycram.designators.action_designator import MoveTorsoActionPerformable, PickUpActionPerformable, \ + NavigateActionPerformable +from pycram.datastructures.pose import Pose +from pycram.datastructures.enums import Arms, Grasp, GripperState, WorldMode, ObjectType +from pycram.world_concepts.world_object import Object +from pycram.process_module import simulated_robot +import pycram.tasktree +from pycram.tasktree import with_tree +import pycram.failures +from pycram.designators import object_designator, action_designator +from anytree import RenderTree +from pycram.robot_description import RobotDescription,RobotDescriptionManager + +from pycram.worlds.bullet_world import BulletWorld + + +rdm = RobotDescriptionManager() +rdm.load_description("pr2") +world = BulletWorld(WorldMode.GUI) +robot_obj = Object(RobotDescription.current_robot_description.name, ObjectType.ROBOT, RobotDescription.current_robot_description.name+".urdf", pose=Pose([1, 2, 0])) +milk_obj = Object("milk", ObjectType.MILK,"milk.stl",pose=Pose([1.3, 1, 0.9])) +@with_tree +def plan(): + object_description = object_designator.ObjectDesignatorDescription(names=["milk"]) + description = action_designator.PlaceAction(object_description, [Pose([1.3, 1, 0.9], [0, 0, 0, 1])], [Arms.LEFT]) + with simulated_robot: + NavigateActionPerformable(Pose([0.6, 0.4, 0], [0, 0, 0, 1])).perform() + MoveTorsoActionPerformable(0.3).perform() + PickUpActionPerformable(object_description.resolve(), Arms.LEFT, Grasp.FRONT).perform() + description.resolve().perform() + + +plan() +tt = pycram.tasktree.task_tree.root + +print(RenderTree(tt)) + From 200eb144607526be8aae93d56ebedaccd768d000 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Wed, 4 Dec 2024 11:04:05 +0100 Subject: [PATCH 31/44] Changes prints to log messages --- demos/pycram_procthor_demo/demo.py | 4 ++-- src/pycram/external_interfaces/procthor.py | 14 +++++--------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/demos/pycram_procthor_demo/demo.py b/demos/pycram_procthor_demo/demo.py index 9f87b4ab9..af1bfd61a 100644 --- a/demos/pycram_procthor_demo/demo.py +++ b/demos/pycram_procthor_demo/demo.py @@ -6,7 +6,7 @@ from pycram.datastructures.pose import Pose from pycram.datastructures.dataclasses import Color -from demos.playingfield.sandcastle import generic_plan +from demos.playfield.sandcastle import generic_plan from pycram import World from pycram.failures import PlanFailure from pycram.tasktree import task_tree @@ -94,4 +94,4 @@ def runWorld(): World.current_world.exit() -runWorld() +runWorld() \ No newline at end of file diff --git a/src/pycram/external_interfaces/procthor.py b/src/pycram/external_interfaces/procthor.py index 2ed08a399..f210877f0 100644 --- a/src/pycram/external_interfaces/procthor.py +++ b/src/pycram/external_interfaces/procthor.py @@ -5,6 +5,7 @@ from bs4 import BeautifulSoup from pycram.ros import ros_tools from typing_extensions import Dict, Set +from pycram.ros import logging as log filename = ros_tools.get_ros_package_path('pycram') @@ -20,7 +21,7 @@ def __init__(self, base_url="http://procthor.informatik.uni-bremen.de:5000", def _download_file(self, base_url: str, full_url: str, folder: str) -> str: """ Downloads the file given in full_url and stores it into folder. If necessary it will create the same folder - structure. For this purpose the base_url is necessary to decide what is folder structure and what is just url. + structure. For this purpose the base_url is necessary to decide what is folder structure and what is just url. :param base_url: Base url as string from @@ -28,13 +29,11 @@ def _download_file(self, base_url: str, full_url: str, folder: str) -> str: :param folder: Folder where the file should be stored :return: The local file name of the downloaded file """ - print("base_url:{} full_url:{} folder:{}".format(base_url, full_url, folder)) tree_structure = full_url.replace(base_url, '') if tree_structure.startswith("/"): tree_structure = tree_structure[1:] full_storage_path = os.path.join(folder, tree_structure) if not os.path.exists(full_storage_path[:full_storage_path.rfind('/') + 1]): - print(full_storage_path[:full_storage_path.rfind('/') + 1]) os.makedirs(full_storage_path[:full_storage_path.rfind('/') + 1], exist_ok=True) local_filename = os.path.join(folder, full_url.split('/')[-1]) # Send HTTP GET request to fetch the file @@ -54,7 +53,6 @@ def _get_files_list(self, base_url: str) -> Set[str]: :param base_url: Base url as string from :return: Set of all files found below the given url """ - print("get_files_list({})".format(base_url)) # Send GET request to the URL response = requests.get(base_url) # Parse the HTML response @@ -70,7 +68,7 @@ def _get_files_list(self, base_url: str) -> Set[str]: elif link.get('href').endswith(('.usda', '.urdf', '.stl', '.usd', '.hdr')): files_urls.add(os.path.join(base_url, link['href'])) else: - print("Ignored File: {}".format(link.get('href'))) + log.logwarn("Ignored File: {}".format(link.get('href'))) return files_urls # Main function to download all files from a directory @@ -88,11 +86,10 @@ def download_all_files_from_URL(self, base_url: str, folder: str) -> None: files = self._get_files_list(base_url) # create_folder_structure(base_url,folder,files) # Download each file - print(files) for file_url in files: - print(f"Downloading {file_url}...") + log.loginfo(f"Downloading {file_url}...") self._download_file(base_url, file_url, folder) - print("All files downloaded.") + log.loginfo("All files downloaded.") return None # Returns a list of all the urdf files in a given folder structure if non is given uses the base_source_folder @@ -139,7 +136,6 @@ def download_num_random_environment(self, num_of_environments: int) -> list: full_url = os.path.join(self.base_url, endpoint, str(num_of_environments)) response = requests.get(full_url) for env in response.json(): - print(env) self.download_all_files_from_URL(env["storage_place"], self.source_folder) self.stored_environments.append(env) return response.json() From f09593539f1a413eab7ecb3de6ca1bcf0d2cdc63 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Wed, 4 Dec 2024 12:03:54 +0100 Subject: [PATCH 32/44] First draft of the PyCRAMGym class --- demos/playfield/experiment.py | 63 --------------------- src/pycram/external_interfaces/pycramgym.py | 48 ++++++++++++++++ 2 files changed, 48 insertions(+), 63 deletions(-) delete mode 100644 demos/playfield/experiment.py create mode 100644 src/pycram/external_interfaces/pycramgym.py diff --git a/demos/playfield/experiment.py b/demos/playfield/experiment.py deleted file mode 100644 index cc03b1ea7..000000000 --- a/demos/playfield/experiment.py +++ /dev/null @@ -1,63 +0,0 @@ -from pycram.language import Language -from pycram.world_concepts.world_object import Object, World -from pycram.datastructures.enums import ObjectType -from pycram.datastructures.pose import Pose -# from gymnasium import core -import gymnasium as gym - -# from gymnasium_interface.pycram_gym_env import PyCRAMGymEnv - -class Experiment(gym.Env): - """ - Class that takes a pointer to the world and a robot name. Will take care of (de)spawning the desired robot - and running the plan. Plan needs to be proper defined and of the plan language. - - :ivar world: filename of the enviroment that should be loaded - :ivar robot: Name of the robot that executes the plan - :ivar plan: pycram.planlanguage object that contains the whole plan if present - """ - - def __init__(self, inWorld: str, inRobot: str, inPlan: Language): - super().__init__() - if World.current_world is not None: - if inRobot.endswith('.urdf'): - self.robot = Object(inRobot.split('.urdf')[0], ObjectType.ROBOT, inRobot, pose=Pose([1, 2, 0])) - else: - self.robot = Object(inRobot, ObjectType.ROBOT, inRobot+".urdf", pose=Pose([1, 2, 0])) - self.world = Object(inWorld, ObjectType.ENVIRONMENT, inWorld + ".urdf") - self.plan = inPlan - - def step(self, action: gym.core.ActType): - """ - Class that takes a pointer to the world and a robot name. Will take care of (de)spawning the desired robot - and running the plan. Plan needs to be proper defined and of the plan language. - - :ivar world: filename of the enviroment that should be loaded - :ivar robot: Name of the robot that executes the plan - :ivar plan: pycram.planlanguage object that contains the whole plan if present - """ - return None - - def reset(self): - """ - Class that takes a pointer to the world and a robot name. Will take care of (de)spawning the desired robot - and running the plan. Plan needs to be proper defined and of the plan language. - - :ivar world: filename of the enviroment that should be loaded - :ivar robot: Name of the robot that executes the plan - :ivar plan: pycram.planlanguage object that contains the whole plan if present - """ - self.world.reset() - - def close(self): - """ - Class that takes a pointer to the world and a robot name. Will take care of (de)spawning the desired robot - and running the plan. Plan needs to be proper defined and of the plan language. - - :ivar world: filename of the enviroment that should be loaded - :ivar robot: Name of the robot that executes the plan - :ivar plan: pycram.planlanguage object that contains the whole plan if present - """ - if World.current_world is not None and self.world is not None: - World.current_world.remove_object(self.world) - World.current_world.remove_object(self.robot) diff --git a/src/pycram/external_interfaces/pycramgym.py b/src/pycram/external_interfaces/pycramgym.py new file mode 100644 index 000000000..cee87ac0b --- /dev/null +++ b/src/pycram/external_interfaces/pycramgym.py @@ -0,0 +1,48 @@ +from pycram.language import Language +from pycram.world_concepts.world_object import Object, World +from pycram.datastructures.enums import ObjectType +from pycram.datastructures.pose import Pose +import gymnasium as gym + +class PyCRAMGym(gym.Env): + """ + First small implementation of the PyCRAMGYM, this class can either be used to store necessary information for an experiment or let + a robot explore an environment, with a set of actions. The exploration will be done via reinforcement learning. + """ + + world: str # should be World currently not possible because spawning multiple bullet worlds leads to problems + robot: str # name to search for robot + plan: Language # plan language object that can performed + + + def __init__(self, inWorld: str, inRobot: str, inPlan: Language): + super().__init__() + if World.current_world is not None: + if inRobot.endswith('.urdf'): + self.robot = Object(inRobot.split('.urdf')[0], ObjectType.ROBOT, inRobot, pose=Pose([1, 2, 0])) + else: + self.robot = Object(inRobot, ObjectType.ROBOT, inRobot+".urdf", pose=Pose([1, 2, 0])) + self.world = Object(inWorld, ObjectType.ENVIRONMENT, inWorld + ".urdf") + self.plan = inPlan + + def step(self, action: gym.core.ActType): + """ + Ticks the world, in our case this means we pick one possible action and perform it. + + :ivar action: The action to take. + """ + return None + + def reset(self): + """ + Returns the environment to the normal state. + """ + self.world.reset() + + def close(self): + """ + Resets the world to a completely empty state. (Should close world at some point) + """ + if World.current_world is not None and self.world is not None: + World.current_world.remove_object(self.world) + World.current_world.remove_object(self.robot) From bf5a53059915c0fbfc4d79a56bedd924a8a3f9eb Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Wed, 4 Dec 2024 12:35:42 +0100 Subject: [PATCH 33/44] Delete unnecessary files again --- demos/playfield/ceo.py | 105 ----------------- demos/playfield/sandcastle.py | 208 ---------------------------------- 2 files changed, 313 deletions(-) delete mode 100644 demos/playfield/ceo.py delete mode 100644 demos/playfield/sandcastle.py diff --git a/demos/playfield/ceo.py b/demos/playfield/ceo.py deleted file mode 100644 index 667516e9f..000000000 --- a/demos/playfield/ceo.py +++ /dev/null @@ -1,105 +0,0 @@ -import rospy -from sympy.codegen import Print - -from demos.playfield.experiment import Experiment -from pycram.worlds.bullet_world import BulletWorld -from pycram.datastructures.enums import ObjectType, WorldMode -from pycram.world_concepts.world_object import Object -from pycram.datastructures.pose import Pose -from pycram.language import Code -from pycram.datastructures.dataclasses import Color -from demos.playfield.sandcastle import generic_plan, GenericCode, languagePlanTest -from pycram import World -from pycram.failures import PlanFailure -from pycram.tasktree import task_tree - -import traceback -import sqlalchemy -import pycram.orm.base -from pycram.external_interfaces.procthor import ProcThorInterface - -print("We start by creating stuff"*10) - -engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=False) -session_maker = sqlalchemy.orm.sessionmaker(bind=engine) -session = session_maker() -# ToDo: Many Plans missing, but this needs function pointers and I am not comfortable with it -# plans=[] -robots = [] -robot_name = "pr2.urdf" -robots.append(robot_name) -pycram.orm.base.Base.metadata.create_all(engine) -session.commit() -# Set up for ProcThor stuff Example usage -procThorInterface = ProcThorInterface(base_url="http://procthor.informatik.uni-bremen.de:5000/") -number_of_test_environment = 5 - -print("We Check for environmnets"*10) -# Get Environments -number_of_known_environment = len( - procThorInterface.get_all_environments_stored_below_dictionary(procThorInterface.source_folder)) -print("Number of known Environments:{}".format(number_of_known_environment)) -print("Number of needed Testenvironments:{}".format(number_of_test_environment)) - - -if number_of_known_environment < number_of_test_environment: - print("Downloading missing environments...") - procThorInterface.download_num_random_environment(number_of_test_environment - number_of_known_environment) - -print("before Function"*10) -def runWorld(): - counter = 0 - works = 0 - fails = 0 - known_environments = procThorInterface.get_all_environments_stored_below_dictionary(procThorInterface.source_folder) - world = BulletWorld(WorldMode.GUI) - milk_pos = Pose([1, -1.78, 0.55], [1, 0, 0, 0]) - milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55], [1, 0, 0, 0]), - color=Color(1, 0, 0, 1)) - for robot in robots: # ToDo: Generic - # robot_obj = Object("pr2", ObjectType.ROBOT, robot, pose=Pose([1, 2, 0])) - for environment in known_environments: - counter += 1 - print("Trying plan: {} with robot: {} in: {}".format("param_plan", robot, environment["name"])) - try: - # apartment = Object(environment["name"], ObjectType.ENVIRONMENT, environment["storage_place"]) - print("enviroment: {}\n Robot:{}\n languagePlan:{}".format(environment, robot,languagePlanTest)) - setupNr1=Experiment(environment["name"],robot,Code(languagePlanTest)) - - setupNr1.plan.perform() - works += 1 - print("Successfully!\n Overall successful tries: {}".format(works)) - - except PlanFailure as e: - traceback.print_exc() - fails += 1 - print("Plan Fail!\n Overall failed tries: {}".format(fails)) - - except FileNotFoundError as e2: - traceback.print_exc() - fails += 1 - print("Fail!\n Overall failed tries: {}".format(fails)) - - finally: - try: - process_meta_data = pycram.orm.base.ProcessMetaData() - process_meta_data.description = "CEO Test run number {} robot:{} enviroment:{}".format(counter, - robot, - environment) - process_meta_data.insert(session) - task_tree.root.insert(session) - except Exception as e: - traceback.print_exc() - print("Error while storing the NEEM. This should not happen.") - task_tree.reset_tree() - if World.current_world is not None: - setupNr1.close() - print("reseting world") - # if World.current_world is None: - # world.remove_object(robot_obj) - - print("Resume:\nOverall successful tries: {}\nOverall failed tries: {}".format(works, fails)) - World.current_world.exit() - -print("We start now") -runWorld() \ No newline at end of file diff --git a/demos/playfield/sandcastle.py b/demos/playfield/sandcastle.py deleted file mode 100644 index 744fffd7a..000000000 --- a/demos/playfield/sandcastle.py +++ /dev/null @@ -1,208 +0,0 @@ -from pycram.worlds.bullet_world import BulletWorld -from pycram.designators.action_designator import * -from pycram.designators.location_designator import * -from pycram.designators.object_designator import * -from pycram.datastructures.enums import ObjectType, WorldMode -from pycram.datastructures.pose import Pose -from pycram.process_module import simulated_robot, with_simulated_robot -from pycram.object_descriptors.urdf import ObjectDescription -from pycram.world_concepts.world_object import Object -from pycram.datastructures.dataclasses import Color -from pycram.worlds.multiverse import Multiverse -from pycram.language import Code - -def param_plan(robot_path,environment_path): - world = BulletWorld(WorldMode.GUI) - # world= Multiverse(simulation='pycram_test') - apartment = Object(environment_path[:environment_path.find(".")], ObjectType.ENVIRONMENT, environment_path) - robot = Object("pr2", ObjectType.ROBOT, robot_path, pose=Pose([1, 2, 0])) - - - milk_pos=Pose([1, -1.78, 0.55],[1,0,0,0]) - milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55],[1,0,0,0]), - color=Color(1, 0, 0, 1)) - - pick_pose = Pose([1, -1.78, 0.55]) - - robot_desig = BelieveObject(names=["pr2"]) - apartment_desig = BelieveObject(names=["apartment"]) - - - @with_simulated_robot - def move_and_detect(obj_type): - NavigateAction(target_locations=[Pose([2, -1.89, 0])]).resolve().perform() - - LookAtAction(targets=[pick_pose]).resolve().perform() - - object_desig = DetectAction(BelieveObject(types=[obj_type])).resolve().perform() - - return object_desig - - - with simulated_robot: - ParkArmsAction([Arms.BOTH]).resolve().perform() - - MoveTorsoAction([0.25]).resolve().perform() - - milk_desig = move_and_detect(ObjectType.MILK) - - TransportAction(milk_desig, [Arms.LEFT], [Pose([4.8, 3.55, 0.8])]).resolve().perform() - - ParkArmsAction([Arms.BOTH]).resolve().perform() - -# param_plan("pr2.urdf","tmp/house_666/house_666.urdf") - - -def param_plan2(robot_path, environment_path): - cheatcode={"/home/nleusmann/catkin_ws/src/pycram/resources/apartment.urdf":[Pose([2.62,2.22,1.1]),Pose([4.8, 3.55, 0.8])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_1/house_1.urdf": [Pose([9.16,-1.07,1.20]), Pose([11.82,-6.2,0.8])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_2/house_2.urdf":[Pose([1, -1.78, 0.55]),Pose([2.71,-0.22,0.75])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_3/house_3.urdf":[Pose([6.02, -5.41, 1]),Pose([10.49,-5.83,0.80])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_4/house_4.urdf":[Pose([5.33, -8.81, 1]),Pose([3.78,-8.71,0.75])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_5/house_5.urdf": [Pose([0.5, -6.61, 1]), Pose([4.46, -4.42, 0.85])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_6/house_6.urdf": [Pose([9.73, -9, 0.80]), Pose([7.17, -5.57, 0.85])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_7/house_7.urdf": [Pose([8.77, -2.88, 1]), Pose([9.34, -4.44, 0.80])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_8/house_8.urdf": [Pose([12.28, -7.76, 1]), Pose([10.02, -12.34, 1])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_9/house_9.urdf": [Pose([6.54, -8.51, 1]), Pose([3.5, -7.8, 0.85])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_10/house_10.urdf": [Pose([8.74, -1.3, 1]), Pose([5.74, -2.91, 1])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_11/house_11.urdf": [Pose([7.03, -2.19, 1]), Pose([3.66, -5.84, 0.75],[1,0,0,0]),Pose([6.7, -3.5, 0])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_42/house_42.urdf":[Pose([7.43,-9.37,1.05]),Pose([11.12,-8.35,0.9])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_666/house_666.urdf":[Pose([7.06,-6.82,1]),Pose([1.25,-3.92,0.75],[1,0,0,0]),Pose([7.17,-7.77,0])], - "/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_1337/house_1337.urdf":[Pose([2.45,-0.36,0.9]),Pose([0.61,-5.82,0.8],[1,0,0,0]),Pose([2.34,-1.47,0])]} - world = BulletWorld(WorldMode.GUI) - # world= Multiverse(simulation='pycram_test') - print(environment_path+35*'#') - apartment = Object(environment_path[:environment_path.find(".")], ObjectType.ENVIRONMENT, environment_path) - robot = Object("pr2", ObjectType.ROBOT, robot_path, pose=Pose([1, 2, 0])) - milk_pos = cheatcode[environment_path][0] - put_down_pos=cheatcode[environment_path][1] - move_pos=milk_pos.copy() - move_pos.pose.position.x=move_pos.pose.position.x-0.7 - move_pos.pose.position.z=0 - milk = Object("milk", ObjectType.MILK, "milk.stl", pose=milk_pos,color=Color(1, 0, 0, 1)) - - pick_pose = Pose([1, -1.78, 0.55]) - - robot_desig = BelieveObject(names=["pr2"]) - apartment_desig = BelieveObject(names=["apartment"]) - - @with_simulated_robot - def move_and_detect(obj_type): - NavigateAction(target_locations=[cheatcode[environment_path][2]]).resolve().perform() - - LookAtAction(targets=[milk_pos]).resolve().perform() - - object_desig = DetectAction(BelieveObject(types=[obj_type])).resolve().perform() - - return object_desig - - with simulated_robot: - ParkArmsAction([Arms.BOTH]).resolve().perform() - - MoveTorsoAction([0.25]).resolve().perform() - - milk_desig = move_and_detect(ObjectType.MILK) - - TransportAction(milk_desig, [Arms.LEFT], [put_down_pos]).resolve().perform() - - ParkArmsAction([Arms.BOTH]).resolve().perform() - -# param_plan2("pr2.urdf","/home/nleusmann/catkin_ws/src/pycram/resources/tmp/house_6/house_6.urdf") - -def loader(): - for i in range(15): - print(i) - world = BulletWorld(WorldMode.GUI) - # world= Multiverse(simulation='pycram_test') - apartment = Object("house6", ObjectType.ENVIRONMENT,"/home/nleusmann/catkin_ws/src/pycram/resources/apartment.urdf") - world.remove_object_from_simulator(apartment) - -# loader() - - -def generic_plan(inWorld): - world = inWorld - - # milk_pos = Pose([1, -1.78, 0.55], [1, 0, 0, 0]) - # milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55], [1, 0, 0, 0]), - # color=Color(1, 0, 0, 1)) - - pick_pose = Pose([1, -1.78, 0.55]) - - robot_desig = BelieveObject(names=["pr2"]) - apartment_desig = BelieveObject(names=["apartment"]) - - @with_simulated_robot - def move_and_detect(obj_type): - NavigateAction(target_locations=[Pose([2, -1.89, 0])]).resolve().perform() - - LookAtAction(targets=[pick_pose]).resolve().perform() - - object_desig = DetectAction(BelieveObject(types=[obj_type])).resolve().perform() - - return object_desig - - with simulated_robot: - ParkArmsAction([Arms.BOTH]).resolve().perform() - - MoveTorsoAction([0.25]).resolve().perform() - - milk_desig = move_and_detect(ObjectType.MILK) - - TransportAction(milk_desig, [Arms.LEFT], [Pose([4.8, 3.55, 0.8])]).resolve().perform() - - ParkArmsAction([Arms.BOTH]).resolve().perform() - - -def languagePlanTest(): - print("My Plan gets called") - pick_pose = Pose([1, -1.78, 0.55]) - @with_simulated_robot - def move_and_detect(obj_type): - NavigateAction(target_locations=[Pose([2, -1.89, 0])]).resolve().perform() - - LookAtAction(targets=[pick_pose]).resolve().perform() - - object_desig = DetectAction(BelieveObject(types=[obj_type])).resolve().perform() - - return object_desig - - with simulated_robot: - ParkArmsAction([Arms.BOTH]).resolve().perform() - - MoveTorsoAction([0.25]).resolve().perform() - - milk_desig = move_and_detect(ObjectType.MILK) - - TransportAction(milk_desig, [Arms.LEFT], [Pose([4.8, 3.55, 0.8])]).resolve().perform() - - ParkArmsAction([Arms.BOTH]).resolve().perform() - - -class GenericCode(Code): - def __init__(self): - super().__init__() - - def perform(self): - pick_pose = Pose([1, -1.78, 0.55]) - - @with_simulated_robot - def move_and_detect(obj_type): - NavigateAction(target_locations=[Pose([2, -1.89, 0])]).resolve().perform() - - LookAtAction(targets=[pick_pose]).resolve().perform() - - object_desig = DetectAction(BelieveObject(types=[obj_type])).resolve().perform() - - return object_desig - - with simulated_robot: - ParkArmsAction([Arms.BOTH]).resolve().perform() - - MoveTorsoAction([0.25]).resolve().perform() - - milk_desig = move_and_detect(ObjectType.MILK) - - TransportAction(milk_desig, [Arms.LEFT], [Pose([4.8, 3.55, 0.8])]).resolve().perform() - - ParkArmsAction([Arms.BOTH]).resolve().perform() \ No newline at end of file From b26e94c8684708ac368bc5d2da4b10206d8d7b21 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Thu, 5 Dec 2024 12:56:02 +0100 Subject: [PATCH 34/44] Adds the tests for the procthor interface --- test/test_procthor_interface.py | 66 +++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 test/test_procthor_interface.py diff --git a/test/test_procthor_interface.py b/test/test_procthor_interface.py new file mode 100644 index 000000000..e99e42242 --- /dev/null +++ b/test/test_procthor_interface.py @@ -0,0 +1,66 @@ +import unittest +import os + +from pycram.external_interfaces.procthor import ProcThorInterface +from pycram.ros import ros_tools +import socket +import shutil + + +def is_server_reachable(host, port): + """Check if a server is reachable by attempting to open a socket connection.""" + try: + with socket.create_connection((host, port), timeout=5): + return True + except (socket.timeout, OSError): + return False + + +class TestProcThorInterface(unittest.TestCase): + @unittest.skipIf(not(is_server_reachable("procthor.informatik.uni-bremen.de", 5000)),"Host unreachable") + @classmethod + def setUpClass(cls) -> None: + super().setUpClass() + cls.test_folder_path = os.path.join(ros_tools.get_ros_package_path('pycram') + "/tmp") + cls.procThorInterface = ProcThorInterface(base_url="http://procthor.informatik.uni-bremen.de:5000/", + source_folder=cls.test_folder_path) + + def setUp(self) -> None: + super().setUp() + if not os.path.exists(self.test_folder_path): + os.mkdir(self.test_folder_path) + + def tearDown(self) -> None: + if os.path.exists(self.test_folder_path): + shutil.rmtree(self.test_folder_path) + + @classmethod + def TearDownClass(cls): + super().TearDownClass() + + + def test_download_one(self): + self.procThorInterface.download_one_random_environment() + found_dir=[name for name in os.listdir(self.test_folder_path) if os.path.isdir(os.path.join(self.test_folder_path,name))] + self.assertTrue(1==len(found_dir)) + + def test_download_multiple(self): + self.procThorInterface.download_num_random_environment(3) + found_dir = [name for name in os.listdir(self.test_folder_path) if + os.path.isdir(os.path.join(self.test_folder_path, name))] + self.assertTrue(3 == len(found_dir)) + + def test_get_all_environments_stored_below_dictionary(self): + before=self.procThorInterface.get_all_environments_stored_below_dictionary(self.test_folder_path) + self.procThorInterface.download_one_random_environment() + after=self.procThorInterface.get_all_environments_stored_below_dictionary(self.test_folder_path) + print(40*'§') + print(before) + print(after) + print(len(after)-len(before)) + print(40*'§') + self.assertTrue(1==len(after)-len(before)) + + +if __name__ == '__main__': + unittest.main() From 123d14c71f6e1c6d2f79d2503269da784874f26f Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Thu, 5 Dec 2024 13:54:27 +0100 Subject: [PATCH 35/44] Change function name and remove prints --- demos/pycram_procthor_demo/demo.py | 4 ++-- examples/interface_examples/procthor.md | 4 ++-- src/pycram/external_interfaces/procthor.py | 4 ++-- test/test_procthor_interface.py | 9 ++------- 4 files changed, 8 insertions(+), 13 deletions(-) diff --git a/demos/pycram_procthor_demo/demo.py b/demos/pycram_procthor_demo/demo.py index af1bfd61a..21a880334 100644 --- a/demos/pycram_procthor_demo/demo.py +++ b/demos/pycram_procthor_demo/demo.py @@ -32,7 +32,7 @@ # Get Environments number_of_known_environment = len( - procThorInterface.get_all_environments_stored_below_dictionary(procThorInterface.source_folder)) + procThorInterface.get_all_environments_stored_below_directory(procThorInterface.source_folder)) print("Number of known Environments:{}".format(number_of_known_environment)) print("Number of needed Testenvironments:{}".format(number_of_test_environment)) @@ -44,7 +44,7 @@ def runWorld(): counter = 0 works = 0 fails = 0 - known_environments = procThorInterface.get_all_environments_stored_below_dictionary(procThorInterface.source_folder) + known_environments = procThorInterface.get_all_environments_stored_below_directory(procThorInterface.source_folder) world = BulletWorld(WorldMode.GUI) apartment = None milk_pos = Pose([1, -1.78, 0.55], [1, 0, 0, 0]) diff --git a/examples/interface_examples/procthor.md b/examples/interface_examples/procthor.md index edcd051ec..fd2bd0e1b 100644 --- a/examples/interface_examples/procthor.md +++ b/examples/interface_examples/procthor.md @@ -50,7 +50,7 @@ First let us check how many different environments are already known. ```python number_of_known_environment = len( - procThorInterface.get_all_environments_stored_below_dictionary(procThorInterface.source_folder)) + procThorInterface.get_all_environments_stored_below_directory(procThorInterface.source_folder)) print("Number of known Environments:{}".format(number_of_known_environment)) print("Number of needed Testenvironments:{}".format(number_of_test_environment)) ``` @@ -69,7 +69,7 @@ environment we know: v = 0 works = 0 fails = 0 -known_environments = procThorInterface.get_all_environments_stored_below_dictionary(procThorInterface.source_folder) +known_environments = procThorInterface.get_all_environments_stored_below_directory(procThorInterface.source_folder) world = BulletWorld(WorldMode.GUI) apartment = None milk_pos = Pose([1, -1.78, 0.55], [1, 0, 0, 0]) diff --git a/src/pycram/external_interfaces/procthor.py b/src/pycram/external_interfaces/procthor.py index f210877f0..711418a47 100644 --- a/src/pycram/external_interfaces/procthor.py +++ b/src/pycram/external_interfaces/procthor.py @@ -16,7 +16,7 @@ def __init__(self, base_url="http://procthor.informatik.uni-bremen.de:5000", self.base_url = base_url self.source_folder = source_folder self.stored_environments = [] - self.stored_environments.extend(self.get_all_environments_stored_below_dictionary(self.source_folder)) + self.stored_environments.extend(self.get_all_environments_stored_below_directory(self.source_folder)) def _download_file(self, base_url: str, full_url: str, folder: str) -> str: """ @@ -94,7 +94,7 @@ def download_all_files_from_URL(self, base_url: str, folder: str) -> None: # Returns a list of all the urdf files in a given folder structure if non is given uses the base_source_folder # only look for urdf, but can be easly adapted - def get_all_environments_stored_below_dictionary(self, source_folder: str) -> list: + def get_all_environments_stored_below_directory(self, source_folder: str) -> list: """ Returns a list of dictionaries that contains the name and the storage_place of all urdf files below a given folder. Only looks for urdf. diff --git a/test/test_procthor_interface.py b/test/test_procthor_interface.py index e99e42242..fedcf5f8c 100644 --- a/test/test_procthor_interface.py +++ b/test/test_procthor_interface.py @@ -51,14 +51,9 @@ def test_download_multiple(self): self.assertTrue(3 == len(found_dir)) def test_get_all_environments_stored_below_dictionary(self): - before=self.procThorInterface.get_all_environments_stored_below_dictionary(self.test_folder_path) + before=self.procThorInterface.get_all_environments_stored_below_directory(self.test_folder_path) self.procThorInterface.download_one_random_environment() - after=self.procThorInterface.get_all_environments_stored_below_dictionary(self.test_folder_path) - print(40*'§') - print(before) - print(after) - print(len(after)-len(before)) - print(40*'§') + after=self.procThorInterface.get_all_environments_stored_below_directory(self.test_folder_path) self.assertTrue(1==len(after)-len(before)) From 35593c8522bf9d4aac19e27e14868e67256f889a Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Mon, 9 Dec 2024 14:43:55 +0100 Subject: [PATCH 36/44] Changes print to log --- src/pycram/external_interfaces/giskard.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pycram/external_interfaces/giskard.py b/src/pycram/external_interfaces/giskard.py index 20570d453..f9554ccbf 100644 --- a/src/pycram/external_interfaces/giskard.py +++ b/src/pycram/external_interfaces/giskard.py @@ -18,6 +18,8 @@ from typing_extensions import List, Dict, Callable, Optional from geometry_msgs.msg import PoseStamped, PointStamped, QuaternionStamped, Vector3Stamped from threading import Lock, RLock +from pycram.ros import logging as log + try: from giskardpy.python_interface.old_python_interface import OldGiskardWrapper as GiskardWrapper @@ -173,7 +175,7 @@ def spawn_object(object: Object) -> None: spawn_mesh(object.name, filename, object.get_pose()) else: ww = spawn_urdf(object.name, object.path, object.get_pose()) - print("GiskardSpawnURDF Return value: {} ObjectName:{}".format(ww,object.name)) + log.loginfo("GiskardSpawnURDF Return value: {} ObjectName:{}".format(ww,object.name)) @init_giskard_interface From 242ae861135f380bef52e437cd3a9d1b9b38fe52 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Mon, 9 Dec 2024 14:46:59 +0100 Subject: [PATCH 37/44] Updates the example to properly log instead of print and use the newe PyCRAMGym --- examples/interface_examples/procthor.md | 107 ++++++++++++------------ 1 file changed, 54 insertions(+), 53 deletions(-) diff --git a/examples/interface_examples/procthor.md b/examples/interface_examples/procthor.md index fd2bd0e1b..b3f538220 100644 --- a/examples/interface_examples/procthor.md +++ b/examples/interface_examples/procthor.md @@ -1,4 +1,4 @@ -# Procthor Interface - Creating a CEO for testing multible robots in mutliple enviromnents +# Procthor Interface - Creating a Manager for testing multible robots in mutliple enviromnents This Notebook aims to provide an overview of the ProcThor Interface, by giving an easy-to-understand example on how to use it. We will be executing a simple pick and place plan with hard coded values and store the NEEMs of these @@ -51,71 +51,72 @@ First let us check how many different environments are already known. ```python number_of_known_environment = len( procThorInterface.get_all_environments_stored_below_directory(procThorInterface.source_folder)) -print("Number of known Environments:{}".format(number_of_known_environment)) -print("Number of needed Testenvironments:{}".format(number_of_test_environment)) +log.loginfo("Number of known Environments:{}".format(number_of_known_environment)) +log.loginfo("Number of needed Testenvironments:{}".format(number_of_test_environment)) ``` Now depending on if we have to get some more, we will download some additional: ```python if number_of_known_environment < number_of_test_environment: - print("Downloading missing environments...") - procThorInterface.download_num_random_environment(number_of_test_environment-number_of_known_environment) + log.loginfo("Downloading missing environments...") + procThorInterface.download_num_random_environment(number_of_test_environment - number_of_known_environment) ``` Now that the preparations are met we can start to run our plan for each robot (even though it is only one) and each environment we know: ```python -v = 0 -works = 0 -fails = 0 -known_environments = procThorInterface.get_all_environments_stored_below_directory(procThorInterface.source_folder) -world = BulletWorld(WorldMode.GUI) -apartment = None -milk_pos = Pose([1, -1.78, 0.55], [1, 0, 0, 0]) -milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55], [1, 0, 0, 0]), - color=Color(1, 0, 0, 1)) -for robot in robots: - robot_obj = Object("pr2", ObjectType.ROBOT, robot, pose=Pose([1, 2, 0])) - for environment in known_environments: - v += 1 - print("Trying plan: {} with robot: {} in: {}".format("param_plan", robot, environment["name"])) - try: - apartment = Object(environment["name"], ObjectType.ENVIRONMENT, environment["storage_place"]) - generic_plan(world) - works += 1 - print("Successfully!\n Overall successful tries: {}".format(works)) - - except PlanFailure as e: - traceback.print_exc() - fails += 1 - print("Plan Fail!\n Overall failed tries: {}".format(fails)) - - except FileNotFoundError as e2: - traceback.print_exc() - fails += 1 - print("Fail!\n Overall failed tries: {}".format(fails)) - - finally: +from pycram.external_interfaces.pycramgym import PyCRAMGym + counter = 0 + works = 0 + fails = 0 + known_environments = procThorInterface.get_all_environments_stored_below_directory(procThorInterface.source_folder) + world = BulletWorld(WorldMode.GUI) # If we spawn and despawn the bulletworld in quick sucession we will have missing object references + milk_pos = Pose([1, -1.78, 0.55], [1, 0, 0, 0]) + milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55], [1, 0, 0, 0]), + color=Color(1, 0, 0, 1)) + for robot in robots: + for environment in known_environments: + counter += 1 + log.loginfo("Trying plan: {} with robot: {} in: {}".format("param_plan", robot, environment["name"])) try: - process_meta_data = pycram.orm.base.ProcessMetaData() - process_meta_data.description = "CEO Test run number {} robot:{} enviroment:{}".format(v, robot, - environment) - process_meta_data.insert(session) - task_tree.root.insert(session) - except Exception as e: + # apartment = Object(environment["name"], ObjectType.ENVIRONMENT, environment["storage_place"]) + setupNr1=PyCRAMGym(environment["name"], robot, Code(language_plan_test)) + + setupNr1.plan.perform() + works += 1 + log.loginfo("Successfully!\n Overall successful tries: {}".format(works)) + + except PlanFailure as e: + traceback.print_exc() + fails += 1 + log.loginfo("Plan Fail!\n Overall failed tries: {}".format(fails)) + + except FileNotFoundError as e2: traceback.print_exc() - print("Error while storing the NEEM. This should not happen.") - task_tree.reset_tree() - if World.current_world is not None and apartment is not None: - world.remove_object(apartment) - milk.set_pose(milk_pos) - print("reseting world") -if World.current_world is None: - world.remove_object(robot_obj) - -print("Resume:\nOverall successful tries: {}\nOverall failed tries: {}".format(works, fails)) -World.current_world.exit() + fails += 1 + log.loginfo("Fail!\n Overall failed tries: {}".format(fails)) + + finally: + try: + process_meta_data = pycram.orm.base.ProcessMetaData() + process_meta_data.description = "CEO Test run number {} robot:{} enviroment:{}".format(counter, + robot, + environment) + process_meta_data.insert(session) + task_tree.root.insert(session) + except Exception as e: + traceback.print_exc() + log.logerr("Error while storing the NEEM. This should not happen.") + task_tree.reset_tree() + if World.current_world is not None: + setupNr1.close() + log.loginfo("reseting world") + # if World.current_world is None: + # world.remove_object(robot_obj) + + log.loginfo("Resume:\nOverall successful tries: {}\nOverall failed tries: {}".format(works, fails)) + World.current_world.exit() ``` From 924f9e193aa3af08e0d831c297614e90b30a7a3c Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Mon, 9 Dec 2024 14:57:39 +0100 Subject: [PATCH 38/44] Adds the example code for testig purposes --- demos/pycram_procthor_demo/code_example.py | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 demos/pycram_procthor_demo/code_example.py diff --git a/demos/pycram_procthor_demo/code_example.py b/demos/pycram_procthor_demo/code_example.py new file mode 100644 index 000000000..a94b7513c --- /dev/null +++ b/demos/pycram_procthor_demo/code_example.py @@ -0,0 +1,29 @@ +from pycram.designators.action_designator import NavigateAction,LookAtAction,ParkArmsAction,MoveTorsoAction,DetectAction,TransportAction +from pycram.datastructures.enums import Arms +from pycram.designators.object_designator import BelieveObject +from pycram.datastructures.enums import ObjectType +from pycram.datastructures.pose import Pose +from pycram.process_module import simulated_robot, with_simulated_robot + +def language_plan_test(): + pick_pose = Pose([1, -1.78, 0.55]) + @with_simulated_robot + def move_and_detect(obj_type): + NavigateAction(target_locations=[Pose([2, -1.89, 0])]).resolve().perform() + + LookAtAction(targets=[pick_pose]).resolve().perform() + + object_desig = DetectAction(BelieveObject(types=[obj_type])).resolve().perform() + + return object_desig + + with simulated_robot: + ParkArmsAction([Arms.BOTH]).resolve().perform() + + MoveTorsoAction([0.25]).resolve().perform() + + milk_desig = move_and_detect(ObjectType.MILK) + + TransportAction(milk_desig, [Arms.LEFT], [Pose([4.8, 3.55, 0.8])]).resolve().perform() + + ParkArmsAction([Arms.BOTH]).resolve().perform() \ No newline at end of file From bf2c1a4767ecbb30d35cf14813da4f01d69a3e10 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Mon, 9 Dec 2024 15:00:32 +0100 Subject: [PATCH 39/44] Moves example code to the proper file and import that one --- demos/pycram_procthor_demo/code_example.py | 10 ++++++++-- demos/pycram_procthor_demo/demo.py | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/demos/pycram_procthor_demo/code_example.py b/demos/pycram_procthor_demo/code_example.py index a94b7513c..81e70e5a6 100644 --- a/demos/pycram_procthor_demo/code_example.py +++ b/demos/pycram_procthor_demo/code_example.py @@ -5,8 +5,13 @@ from pycram.datastructures.pose import Pose from pycram.process_module import simulated_robot, with_simulated_robot -def language_plan_test(): +def generic_plan(inWorld): + world = inWorld pick_pose = Pose([1, -1.78, 0.55]) + + robot_desig = BelieveObject(names=["pr2"]) + apartment_desig = BelieveObject(names=["apartment"]) + @with_simulated_robot def move_and_detect(obj_type): NavigateAction(target_locations=[Pose([2, -1.89, 0])]).resolve().perform() @@ -26,4 +31,5 @@ def move_and_detect(obj_type): TransportAction(milk_desig, [Arms.LEFT], [Pose([4.8, 3.55, 0.8])]).resolve().perform() - ParkArmsAction([Arms.BOTH]).resolve().perform() \ No newline at end of file + ParkArmsAction([Arms.BOTH]).resolve().perform() + diff --git a/demos/pycram_procthor_demo/demo.py b/demos/pycram_procthor_demo/demo.py index 21a880334..19ca545b8 100644 --- a/demos/pycram_procthor_demo/demo.py +++ b/demos/pycram_procthor_demo/demo.py @@ -6,7 +6,7 @@ from pycram.datastructures.pose import Pose from pycram.datastructures.dataclasses import Color -from demos.playfield.sandcastle import generic_plan +from demos.pycram_procthor_demo.code_example import generic_plan from pycram import World from pycram.failures import PlanFailure from pycram.tasktree import task_tree From e2725ee1c944598bf51b11b5863a353078e0ebc3 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Tue, 10 Dec 2024 16:18:07 +0100 Subject: [PATCH 40/44] Switches from Enum to pyCRAP --- demos/pycram_procthor_demo/code_example.py | 17 +++++++++++------ demos/pycram_procthor_demo/demo.py | 7 ++++--- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/demos/pycram_procthor_demo/code_example.py b/demos/pycram_procthor_demo/code_example.py index 81e70e5a6..beb66272b 100644 --- a/demos/pycram_procthor_demo/code_example.py +++ b/demos/pycram_procthor_demo/code_example.py @@ -1,8 +1,10 @@ +import pycrap from pycram.designators.action_designator import NavigateAction,LookAtAction,ParkArmsAction,MoveTorsoAction,DetectAction,TransportAction -from pycram.datastructures.enums import Arms +from pycram.datastructures.enums import Arms, DetectionTechnique from pycram.designators.object_designator import BelieveObject from pycram.datastructures.enums import ObjectType from pycram.datastructures.pose import Pose +from pycram.failures import PerceptionObjectNotFound from pycram.process_module import simulated_robot, with_simulated_robot def generic_plan(inWorld): @@ -18,18 +20,21 @@ def move_and_detect(obj_type): LookAtAction(targets=[pick_pose]).resolve().perform() - object_desig = DetectAction(BelieveObject(types=[obj_type])).resolve().perform() + object_desig = DetectAction(technique=DetectionTechnique.TYPES, object_designator_description=BelieveObject(types=[obj_type])).resolve().perform() - return object_desig + if len(object_desig)==0: + raise PerceptionObjectNotFound - with simulated_robot: + return object_desig[0] + + with (simulated_robot): ParkArmsAction([Arms.BOTH]).resolve().perform() MoveTorsoAction([0.25]).resolve().perform() - milk_desig = move_and_detect(ObjectType.MILK) + milk_desig = move_and_detect(pycrap.Milk) - TransportAction(milk_desig, [Arms.LEFT], [Pose([4.8, 3.55, 0.8])]).resolve().perform() + TransportAction(milk_desig,[Pose([4.8, 3.55, 0.8])], [Arms.LEFT]).resolve().perform() ParkArmsAction([Arms.BOTH]).resolve().perform() diff --git a/demos/pycram_procthor_demo/demo.py b/demos/pycram_procthor_demo/demo.py index 19ca545b8..8c0f6a682 100644 --- a/demos/pycram_procthor_demo/demo.py +++ b/demos/pycram_procthor_demo/demo.py @@ -15,6 +15,7 @@ import sqlalchemy import pycram.orm.base from pycram.external_interfaces.procthor import ProcThorInterface +import pycrap engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=False) session_maker = sqlalchemy.orm.sessionmaker(bind=engine) @@ -48,15 +49,15 @@ def runWorld(): world = BulletWorld(WorldMode.GUI) apartment = None milk_pos = Pose([1, -1.78, 0.55], [1, 0, 0, 0]) - milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1, -1.78, 0.55], [1, 0, 0, 0]), + milk = Object("milk", pycrap.Milk, "milk.stl", pose=Pose([1, -1.78, 0.55], [1, 0, 0, 0]), color=Color(1, 0, 0, 1)) for robot in robots: - robot_obj = Object("pr2", ObjectType.ROBOT, robot, pose=Pose([1, 2, 0])) + robot_obj = Object("pr2", pycrap.Robot, robot, pose=Pose([1, 2, 0])) for environment in known_environments: counter += 1 print("Trying plan: {} with robot: {} in: {}".format("param_plan", robot, environment["name"])) try: - apartment = Object(environment["name"], ObjectType.ENVIRONMENT, environment["storage_place"]) + apartment = Object(environment["name"], pycrap.Apartment, environment["storage_place"]) # Is appartment correct? generic_plan(world) works += 1 print("Successfully!\n Overall successful tries: {}".format(works)) From cb46fc62cfcf16e28361f22f477be46aff55eefe Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Wed, 11 Dec 2024 12:35:05 +0100 Subject: [PATCH 41/44] Changes imports to be realtive --- src/pycram/external_interfaces/procthor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pycram/external_interfaces/procthor.py b/src/pycram/external_interfaces/procthor.py index 711418a47..3faeae6b2 100644 --- a/src/pycram/external_interfaces/procthor.py +++ b/src/pycram/external_interfaces/procthor.py @@ -3,9 +3,9 @@ import requests from bs4 import BeautifulSoup -from pycram.ros import ros_tools +from ..ros import ros_tools from typing_extensions import Dict, Set -from pycram.ros import logging as log +from ..ros import logging as log filename = ros_tools.get_ros_package_path('pycram') From 3cff20ccef5bf76e312d9a5604418d4635e7e33c Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Wed, 11 Dec 2024 12:35:49 +0100 Subject: [PATCH 42/44] Changes from ObjectTypes to PyCRAP and adds some documentation --- src/pycram/external_interfaces/pycramgym.py | 28 +++++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/pycram/external_interfaces/pycramgym.py b/src/pycram/external_interfaces/pycramgym.py index cee87ac0b..9eac9bdce 100644 --- a/src/pycram/external_interfaces/pycramgym.py +++ b/src/pycram/external_interfaces/pycramgym.py @@ -1,8 +1,9 @@ -from pycram.language import Language -from pycram.world_concepts.world_object import Object, World -from pycram.datastructures.enums import ObjectType -from pycram.datastructures.pose import Pose +from ..language import Language +from ..world_concepts.world_object import Object, World +from ..datastructures.enums import ObjectType +from ..datastructures.pose import Pose import gymnasium as gym +import pycrap class PyCRAMGym(gym.Env): """ @@ -11,18 +12,29 @@ class PyCRAMGym(gym.Env): """ world: str # should be World currently not possible because spawning multiple bullet worlds leads to problems + """ + The world should be an real World Object, but sadly this is not possible, because if we close and open multiple + bulletworlds in quick succession, then there is a problem with objects not being loaded properly. Thus we decided to + let the user create the world they want to use and just load the environment urdf of the file they give to this class + """ robot: str # name to search for robot + """ + The robot should be a real Robot Object, but in order to stay in line with the world it is just the name of the + urdf that will be loaded as a robot. + """ plan: Language # plan language object that can performed - + """ + Plan langauge object that can get executed. + """ def __init__(self, inWorld: str, inRobot: str, inPlan: Language): super().__init__() if World.current_world is not None: if inRobot.endswith('.urdf'): - self.robot = Object(inRobot.split('.urdf')[0], ObjectType.ROBOT, inRobot, pose=Pose([1, 2, 0])) + self.robot = Object(inRobot.split('.urdf')[0], pycrap.Robot, inRobot, pose=Pose([1, 2, 0])) else: - self.robot = Object(inRobot, ObjectType.ROBOT, inRobot+".urdf", pose=Pose([1, 2, 0])) - self.world = Object(inWorld, ObjectType.ENVIRONMENT, inWorld + ".urdf") + self.robot = Object(inRobot, pycrap.Robot, inRobot+".urdf", pose=Pose([1, 2, 0])) + self.world = Object(inWorld, pycrap.Apartment, inWorld + ".urdf") self.plan = inPlan def step(self, action: gym.core.ActType): From f518323af60a7e6b0a4b611a4ada2bb32a781735 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Wed, 11 Dec 2024 12:36:39 +0100 Subject: [PATCH 43/44] Adds gymnasium to the requirements --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index ff7fc5ea9..84eda8e6a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -24,6 +24,6 @@ probabilistic_model>=6.0.2 random_events>=3.1.2 sympy pint>=0.21.1 - Pygments~=2.14.0 -typeguard~=4.3.0 \ No newline at end of file +typeguard~=4.3.0 +gymnasium \ No newline at end of file From 00105e53f48646864ed3022485f8d03bf7c9b25d Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Wed, 11 Dec 2024 15:19:43 +0100 Subject: [PATCH 44/44] Restes the camera back to its default position --- src/pycram/worlds/bullet_world.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pycram/worlds/bullet_world.py b/src/pycram/worlds/bullet_world.py index 0f23c02c0..c3a3b5f86 100755 --- a/src/pycram/worlds/bullet_world.py +++ b/src/pycram/worlds/bullet_world.py @@ -475,8 +475,8 @@ def run(self): # Disable the side windows of the GUI p.configureDebugVisualizer(p.COV_ENABLE_GUI, 0, physicsClientId=self.world.id) # Change the init camera pose - p.resetDebugVisualizerCamera(cameraDistance=1.5, cameraYaw=63, cameraPitch=-48.75, - cameraTargetPosition=[7.24, -1.1, 6.75], physicsClientId=self.world.id) + p.resetDebugVisualizerCamera(cameraDistance=1.5, cameraYaw=270.0, cameraPitch=-50, + cameraTargetPosition=[-2, 0, 1], physicsClientId=self.world.id) # Get the initial camera target location camera_target_position = p.getDebugVisualizerCamera(physicsClientId=self.world.id)[11]

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 LQ6@0$vW@=%)9#R5 diff --git a/resources/house_2/meshes/stl/Bin_26.stl b/resources/house_2/meshes/stl/Bin_26.stl deleted file mode 100644 index 74f888bcaee328186f52ef0567820df23f4cd48c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37984 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 diff --git a/resources/house_2/meshes/stl/Doorway_9.stl b/resources/house_2/meshes/stl/Doorway_9.stl deleted file mode 100644 index dcf49ca924f9fdf431eeb07c8c14baa9032c69c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56084 zcmbWAdE8#Z`Ts|Ps0Km#+C?MQEG0?PG$>Xhs^6a*L$vIu9-7)O`elo zPCMzuQ+_-AsIEt!a^k42I~_m#grkO^(z9=`9eVBH{(t@(wz6}-o!cXOuvh-s~IQQf`%PLpFs$cvoB~(hS zb?)tr2UPxR$Nt&r_w~rM-|ubkWYE!T!#QlzKR5od0nUBXeL!Uk=;%;wBMMQn$sgc z0Av0o##{-NQhm<-2|8|tj_0}!sA<1OyL&dP8ZmXZEvwFb1syHWv8Y6-lac&0?ie))Or(bbPes3p4DA>Y%rpV+ApB%NP18p;Bt0 zbG^T}xN^cxS$@{)i~W1hb*}pNAZHZYd@oi0iFZ_=S*`AWX5k&RRj0+3m2S@RbMPl~ z)CiS&=U4X!;yk_wullrG_R!=kKWt9#iat4IYVM`z6EmMZvF+S1L97R>p1Ut4R7!O_ z_xw`mn3UzG%Oh$SF~Tg0c;i zsQvOyX5)OrnRuTgufmukOLEH+B~(iFIrlk;b1{NLFoN2z(Hub|IR4J{SlTTg3Su6j ztb|IbKIgixvADM6#wk$se{p3IbgYh;X}>z7bUr%wz#5Ay^y6AYR|%C;ea;=dazFn@ zJ8PAGnf1&4AltTwXHR~|;rGv40xj>NeoLZxgL zgkAXjT~GBo&L2CrqED1acdrW~F}6ggl+I1ek4PLjc5E_hl`wr_Z8u_AiBKuCHV_u8 zb5`k>>k}m`ZeiEg9-&ee^+5bRj`^+dN1rHBj6e6(uSeqM5}{H>_K}QaYul zZrNvvCzvHls8sqsM<#lLnW#^cFn#rG_XM+D36(P4f#CeZt}p-Olle1jRdd)C-QV|- z@P55^^4!b!i2JMM-23o9?Avqxsf0@D4u^95uPwh|@%+B}Lp|uR{ry zGTq_LX~ZFm5A0_vGWUajpY~YrW8$faPpJ+iOoxN#rh^el37@arb7CK5?Y5H+o~!x_ zV%Rk!{n^0wR4S#q3u3=d=FhY@B>mWV%+qy0R9```rG!dZo7Sd;z3J)UKHofBA9K~$ zKA}>oyC9}4nLk5!EMxu|_lC$N)mIQ~DWOtoZ9y=v>y zus$B#f0*ZQY`96HuOQg6n2=DbRCh|)NO8wv?R}2ymgp;pC$AalPpP)2Qma&VL2UKO z{QCT$RhEhLL-iE|Tb83FRLa_6e-)T8Yi;ImJZwgBJXBw*LkX2q-SsMGZdJ~CUoEV1 zCF7}a@W3~#cIIR|?AuR8UG(8z{qv5ol4=CcoF>J!l0Oebta9d7<+OgeavIHd3EN>O z6Dz5?RZ@*mDW0SG^H7<15mnA*J^Sa|$0}$2iS*0pdL6zl8Y`)}RZ@*mDYpI3QEhQ9 zRylL4a@rFm_--%!I02Q^uVB?hv65k}ooN2$ln{TRf_ zAP$XnQR_>kSj*tgL%rlpR3LxZyMKOHta92DCAin3jxd4?QL#G)I^HP}D#iK?dkVyN z(D75~*eg~!?THemFYExWf{xpv!kRmDI&O`sd%oN~#emWqB3qKI2g3TpwA|p%$u~B&^;V z@)iBYJPv*wfJ*8ch}D|0l4^uX+58B8OhJ{i4a9@7%4t?9Ve>JJ$F``X{s=_(SV=WP zrEHZ5B6E zlu#-AIjgGaDr!%t!`hUxELpJ*m9pFob5PfI>z6uIDxFd75h`VL7!MN7Vx>}MVN$bf zh?Pp2wMosgflw)n^on(;l#OQL2lu=5$NJSVr&ME>G$T~XbcFHPXwAiyJ8#Ug!|^Bc zb#UjZe-FmDXqEf9_~xvJy6DDTP#e1;%g$aqB@!vjTJ{v)YU_X5Evx-G%kHVwtDL@H z)yK>yLH|%y12GcBgn22UQgJ^YiAO&5)FP;ngK~zBK6D8t~ zERM&7TJPG$u&O((QbMJ;YMZsrby<6H?Gwc6D~_Z*Q6lav{WxIlSz^0>_T!ly({~Jm;$26l6t+>_iK3^ z{CF0`qaZdc5s6fs=fRJ;KUiG(HHhEAbG~2A4<*tW^@nv9SI$IqH$u#mP$`{{&Y>EW zaXqxUD0TRZ(-jBpVlP^*q$*)j)WLSh-Ex)FM-esFB5vXSBkWOF!DpxtFgMI1j zVw-eW+h0KajU#wztcxmPQmIwtDkll{Wqxoz8WCpg%TdS3SQk}-Iw+M|g<7AtinTuN z*T#bxZk~s1w^&&vl{(n3N~KnntDK%dzeQe!`A7@HtSwhkl`tvQhgyEA%1OfaCG%1D zzKxYsC48)+g{H5VgY;ZytFW3=ebomJ%Q-z`jPtksA14_}dBEuj!N8Nj0g9W>QJ@o?E|^Qhh;#>9F;j z`$5w|pNvkel1i%Iv8Yt6&r}_%s)Y`za{7Ig>T6DrAJzANBUCEZ{hEwc?EAV*Rp|iRuS) zN%b`+q>@@Cp;D$V%|z<3_;CMWaUlGA*qzbjnzo@%>UXlsdD=Lj_PYpkh5{- zo=T2lElA7%F*stYr>IXI1ykmS+-~WwJDVvXBJZ_6C9PiiS zlUB}WlVUqv8E%inBPBwmV!Ji0aPLH71FY2gL*R>y!wUGHU}d6gRt!(*@Ws zMsHiW%9!VD8y(iGUq|BH5}{J2BM{xr3HRr#?iTL0Sv}`!VB^fT>T|AFBs!J|l~QY+ z+y9(!f9^oU?DKwDCejbp=iKg*SgAy)RBU@|orC8&V@1#7Eb?P+Gm74-KIaf!PcXVl zsFYfZzf%-t@WN~)PXF?ZRT(cY(}xI`r0Q{O08w@{4cD#!#;hab?}t6S|307 z&f19BKK0CzdB34M4dTz)4)Vqnw{C< zQQto3rB&-A81yKiQvG93XIxPxY&^Ulam*JVxJ~Vq^A@$zr-N?WMs$2L@!1`fP^tNm z2+{RXwK0K*HU|H^>JHzYH(=YEwZGi|$9^u6iScSec&Yev&BV6sM_pIFd*Oyh`hIts ze`xkbw1jQ5HYKP@iA1WY4icMoIJUyMc2H}l+N^Jm@$Ie;wPs^xT8FlSKE+OXloobAtA2e9YP#-u-z=hY~7fZ65`i@AInm>}u2geEX+9f42PbF4=a+ z?(J<~|NX()O(%r*?!DA1l1ix5<=cMgdz$cmIj?LC&bV`*WIP(JvN2aerL3KLKH&XI z-?!p8Z@uI<`6=JL>GSp8j-%^qjBnHY`dnAS##{;ZLxW&R1j zyG};XvvC%YNTlM=3&PIMHiCZU#O&jW^M0Hwsa0Nw%ny~acA-6UIsj)mP|v`nsOel~5^- zdO@%?`iL-}>EZ8Vo3T24qcCfWJp*HP%7XKMq=ZTx5Q!pIZLb`eZGZH8m1Z-_=PR+ zf>!MSt1RPayN#x`Q>*Ct)=dbLI_l*~6>A4S&IQp0R_REYKKf)tVbvc%bSM!j#h&Uu zxkba@t6c_y+O%J5(+{J=c)S2&ViQ88tX)`TvC{bH_&1K=nb5HvVpS$AKK!}0L#)mR zu@*enan`t{o|EC2cWy#he9|mg<xb0vS0lj#rM^Yo$!04$g4A+ z9fFwdGiLeRYd#y5oxAzmgh-@fUiIp}Cx|hfrw$wet9F9t=7(Pa;v0bbE9NwHEPinv zC{=ls%2+U$5p=_JaCsqM`pjXUQVe%mAa_l!Z={sK~==q;Od{rV;%5(&)em{9g>($%ulZ`y}2X!4>0W>r8+=kz~n>3_#5{RQp zgi7fd&bbb-=CGNAvTt{uKT!MCEYXu5Y8fB($liKjP`1XqDWOuT50$&)I?S00&+kH% zwO@-H*QoRaxzorFb8Z7MtwgAl>T~W7ko*pWj=5j^;+QjTspnUKSOQ|kyz&0bY3ra$ zsXpi40&y#dwh7nWt20Mut)APQ`wNJFfVlA&*C&KZ=^4(sPfx$2vi13UWaFQ3$(ms+ z4p%ih-G%dDpEK^LEI)6LY)*+#Db?rPu^97>G3Jbw_G@jfYDR|>h{tPFmI8!+Lz{@Snlp(j@7P5`k!{P?e}uTKb-Qhmr?mcAwZ0%R)eCqjq z=z9iqT(Rv-387M|&(Az(E4A(JxbEsMOwUw-;2Vc;10__-&QW3Aoear$K|C_^%Dc5+ z-M8r}45t(jYhXP7_Q-1qp;D?ZSamsce2bCPe$7Iz^JZ0XVwnhnZv!P%O7)?p56Ra- zP@DE^ZN|;$;5pX9Y+(~ZrK}ySIt#?g@cg!!SN2h>G;Vrsa}LqX7~Ov7?UN8HrDwPh zs}Df@8Bx}L_1&%~y+FLzgitBf=iD{u`y&vSo;c-h?N{Hm=?U_D5G!#lnQ}`)sFdmp zR$T@i9CPhgB{T~5bE~(LiWT9goo6+ZVvW@H^F@`j8KF|v=1H$^m5%{;dh;f)RpspDPOsc9 zc9zhQpZ?w!J2oRI#r-bnl$dq#Q`5M6;S<*MxqD%oReA1~*e+`NsLA9vuRd@GB~*%g zI1;=ODE!#*H=#mrHyErfS(~$f?W7tNMjz2_Diwe3PpnZ%_&eJiH6yHTHEaGnsp$tD zLhz(#Qr1rDiJsuOmQsFfBTXF~fBxLJ6RQ$Jq&VjFo)Ut)7aw=j^tpRs+jdKACpG>2 z_~GwNYerCtdpHuj5h%vPx5Rd}(Ar65JBbxNR4I#98r^wszwB%J)Xthd-}-E`D$iX8 z+eJ;Ec{T3F89Q*FV1!C>@57(-Mj-XWqR5$}R#`ilgWiv31f}ff1wpH*jjJU`imRxN zv$m7fr(J?lT>02jBVqmedV9C{Eh{W_ff(!gR_Wl2I@;{`uXT@YyK9%{7@;@lkMlJAAG--ZTImJ z|JooeB&W^D}OA0>jbtIee1>?*Ro8;A#nhMK;` z%7}V>1~l8j^DRNlDG`1@7o{|YfuL3NLuZlSw@0fuvULmVek>{xDrLD)_^}mq+zYF8 zoc&%jT4nkQKj``WB|@dl+OYbZ56K-t&^&#jgth(HxXVEFUI9TV>#6X=Mo>Le&y(@@ zvDyea-bSpHP^n}E_XJ0<2J3XBbObeS9&i>bB~(hI?%c|!EuTB{^HKS-4MT;Vd1d=V zj&r>xhjysx&$_TdJr6t0$-Kt;I9rjmUh8h>%e_wJ%^`VPL<=r+-36-*)OxTf)9#A*{Mqvb}yE5p7S#-+g;g zb>QY8#+C?`((G~W!euzo&m5G0|C(5#N55P%^kk8qCjJQGO%TVO6mJ0{p;9^@!;E?r z#KdK>rVoOvff9D!DNZb}ftXMt5-DBh-35?*4}{kyPn58Bc%P30@y-eeFBN+#R?%@F zK1Kv=7V(Mpt8ojSpAX`b5}{JM5;=FT_Sh#M@;|Yrk62l4nr}<{yI5?8lh;rX zM}au7MCkcU*A?e>{IEy1;K4!pTW`k-J#;W%mC%zOzLNG$k8GcN2IcqfloBeXIp*9Z zBRb5v0iNH2DC-j?^!(}E%eV#j3y43Lh(sz`;gGvIbN5%nriThW{II(M#)s!xJ-s@2 zCWxgVG)qV%Qc(w^jyo?9FM$|+V64zX2iFWeg{3F2mqF0;MdRWvKqOR3=e%=kp{D=T z`FrFqJ|1iOAh^~lVQ0f|9=vVz9hL7u+)^S`%2vCuQp59XN%UNwC}HhTJwF^o7mPV$ z)r_E&{XDGHpP)j&9*CbK0{TSz)wp5IaSOmPf1pIDl&-t-mxickHDjkns!}HGYGJpUkQSqul)6Kp+XPOsa;QD>B;L<5MP71eAz__p;GC1 z(0;z1`99YtN;IAaZOoNWsdUdU8hw98&##FU`Z$70==l?0Jq7U(5W`Q3w*Zk)sq|e- zKQ02n_qje%LgPkx%ykfapDUqKnmvKw`Fyo)clUowkNZSB*IK*%N)cn#Oo~-*{yeFk zhqszkYxK0GJr!21H}tOQRwH43N2S`=k=Tp3B`xt)uGmhkI%NKtGnx^UYF`KUS9K3# z+gG5(zrqjSQbMHuvkv?FSJcNnyq&y?>L5o@btvJbqVA$1Y_+9>&wjMZy$IKgBV(Jh zcF2NV=kn*pe%Ev;p;Fc^R-fR1TQ*_)_iMDhp*9Vxc*jy$)gEC|?8(|eHWI!T$|rsd zWIRl_RtL!-UQs)rsFdk2B1RTWS&BZf8fk>Dm-6pYhp}iv&_X5J*I`l?H`8IUYP8A- zi;oe(D*8;XpI&|7wBd1VxmW+*+7J5i=U)AP{}^(ixMLyl&c#pdpoB`;^H_@~!Ic2C@!*s5s(1Jt<2l;e=`BEe1f{Ge zi!NnDga;gPr03d3kZ^Gx5jRDs|YtxeER?&ZxBB4^&PCXy~er3jjIL>?z9)00I ze7@@Yqw&T>2^(`Iih3eFzv!(^`tJ;@qKsTpfCs7-Y>TGtrk`WB~;3Oo)U}3o^ZE%tA6PC7k-R< z-}O;KrEL6*Rn%f-PZ%pDR9~TEXWYstp;8*df?(^lzlQlt58sS!#%j-7!mLgA3`gNs zMhTVLITA&zSUrCW)xl;n%I7PxJ-wUQ6a?>B%7jVr=hhB>u-?v_2Affgl}3SW5=B+5 zJBWErh`Lm?svztZz%q`u+h|%lwaRW~%7jU+{_UiiwSynDiuVROQbyA!BMPg22!gju zN~jcnUiZnpi>Ph@g4(oSYts*-!|Cod5Uf*|36-*TVHG`p1Ej`BN3(GR+aoMK?8(|8 zRvh!W@Lb1PqmX(|rai*qlV-{M3p=*DnWOSr>BdCgK3h**=<_PvvHbM3<%62t$|O=T zuR^Wwg-%mvuL?iDK&;FUzXHTJK>hb7kh|fIW!%Si&E~Dlc5DtG%1JG}A@Ze^~-t&9>X)$gk?9^v;UCc&ERVHKmS z{aTxE0HZ_YZXpQEE0a=7C}l*j>YkH#pUpY=BuFFJujLruOAD3;o zxRp^trA$Y#>hmR6wBC;!lWlQhqT{SlNIif4s)?-eW5cq0hj%3NI{R7!nv?rKyfUPjg6H@Gp;tk!v_XG7<%2k|0^&2cNEgi7f-kt2<7 z8i2S0r1r}-*k-DoCW`lm)nt@VDb?rPji`E9HA?%nHdh>@!yD&15cI>F*TfP^8Btip zI^1HA+OI~T(R0>hSh-U|rA$Y#>e3sBRC!}^KYAkG8vHEv9F z=IE@|bDO`F$#^R><*e%yLZ$Q!hrib~`i|O%xG|ZI8x!rW7|Ko%;=lWgz~y^Ysa#QmW6nma{vz@QwvJoNK>2SJIPkc1|EJD-kNC z`kWiIR?ln-ZcK*a#zgzoD5Rd}$o8vXRae}~D4|lS&(A!+wzJ-DyF2a&br+^*szAH} z9rQy9m9leGSa)%M<8SrPz2{1Qj8867;gTV&d2QfdjMj0jfoc8TxWOYXVSpM-74 zs^g*OHs^5jlk?{1t>Kp@gi7fdF2suKE^o=SUwu>SNiPt*m7#S?sFdn+?yrdIlOWE( zjfwWF@7nYPIT-|_yA5t-lu#+v7p&qf8ShxMUmeXx&q;6xpoB`PzM#X-=k%QQPoAA_ zf8sFT=1oIVXNpK${_bY$*Q*93REqvtPlb+2llt9l6%W>WREO#=h(p%M6GEl*q*oAZ zsU@m|?{-?1-m#R4L@E+#Rqc$?2lrJe)uH~SRwbgi2YPb;i0?zQvuMeVd9qi*mczS)v-%EP2cusrOLTe|L?QF|S=j^E7s+7g5F}i%~Q#)(= zeCxB#syufYY$rAS?2hhV-KB&|aqmMS`MnA6hegpU^o%HNHw%+F*e*dS>#338YRP`N zirNTjJ6V0aj%Ea2)1kltwL}8 za;0Y5`xKGzn_Q?WrKx;v3lrm1?eo1b0QuINKqy%^ebVWY(r!`2N+NUBfMa5h}%fqWwG& zcz#-^mDwX7dCpd!qnw5@}j(vKt^eKx+M%XDx%1T7$AH)w(KXNQ7J%7j)i3rG_E)zaeR$=eg(I`W@MR-=r}F*k z>lz?fmG`w8v_tj$$9s*awBqYYeem@pB~;4Z3}Mf}ygCb3G0yr#32TSy`A6{BzMj;K zpp^YQ?BO2#?cmwF;mbxN@MR-?qW$_h3j7E){XI_FeKu$9X0T2Pm9h*CZ?(0qpV;~r zeA(#tzY7(5Mv)_>BdBq6?vgLAXuSbnPr40XPtvhfDUG3X_f4pJtKLEcRJ&T0jKAyp z$Eweg=Szf2CAr}KiZ2Mff$ssFj4vDMoY1pKdYYI5;-4U{!Pk?NP$`{{VMg(53paw) zCra2^q&Va7+X?&@k`jrOuJi6ze9z!b5MG-+QNr4x`f(cw`!a>iRIX8pRP3o(MfvT7 zMtBRz$sC$HNl52;=W;`kDwQks>} z@llWbDSX+e7rtzyPn6J;o^$JA9EQvsl)ZqjCn=#)nq&A%^T-Y@{D#m>korUki(9Da z?}b|cem&{V5|K#7@dzs%zb&!|#F^*clYH4o35^@>qd@R09-1ZWE0Kyi!d)u9Y?SfK zM!&u&R_NoJp{KC)q#B(EhHsWN~4Y) zJFHn1eq69dtkB1IpAvdvMO`$;YIl4+N&8Z%)Q^i$)1L#+uLP-2l+bgub5EeA&#x!( z3p7fol+HBg{)XJ03}QIGY@|<=(6~9bTbG{MRD3<@YJ5FO36;_q7Hj(?Sf%?xJySKF zifnCHLZx&E82oq`etgzxWT?<%Jh)OTp{KC$g})C$%){4{v@ey?{ao;avzBYSK2gGa zDr)+F1i>%qD4|m3UwD7uD}p({B1moeLq+W|N@)y3tnB+&`a}sm=>>v1_*E+phJ9(kHdH@WZ!6yGs3M9jxi=j@;Uf)j_jL2`?3Ohl=ph`0vCm z!M}Vmru&<2;_+Yi~F49GvJ$ytM*?Qr1%-7}X^pmaf__Yp^})JFWYDb=_e+J_7Mo ziBKuF8Ij;QV&(IevC=0KR=>9%H?|AU5vz6ylk)oN(S_%k#Y+1vTg4dGW0hH~nh}(; zpBJ$j(y?ED{i^+PjiSY^%d~TA<{#T3R=a?hTq0D;EDSo1iT|R`S;!XcSI611BoMtK zF{=r|SW(Jbi*~T8cl;NQNT`PmR@I5&k!Wi|PzU>EPo^(;eiNvjFp@D=KC8_VW`_41 zbjT7iH-Ol!M5t7ZRh%FD!I~?gWfl{ggBa&RAKD>S|B0ZK^;9P^)1lhUTk5m+|BaxO z^%Mwt{x$sgH!{WI!-!hkniHRc_@qQ=zrI}`LF%x3&M4*AlBgqT7gnu^5Ub*h3Oc-= zFy?V=sl!$S>b7B zF`{Nwm{CDTBcW1kTTjKmvOz}Ypyrab!`r~TZjZ1`q>e!F_ZcY7|1_)FrWC!kc3sB` z2})T{fjIf^>*fzWzHUDH@9Q?a2km{OT)WtIZZk-43mr#;u)g@jbkzNb zJvq0*OTDtc;a#}e(JhrP7d}`UymUu;7< zwBK#Ee!d>jjrM=R>)<%y-&z8(6RbJ`QC32wRG%Ng{Cwy*A2HK@XH{PCIylY)uYNK3 z;m7>kmwM#~fS86XQ9`9upL5+nJO|>Tqgra(uhH)6HL6B*U2R?bOPId^aSMp=N`y+O zKAZ=?SzbFE#QKPU_G?k-dRq6Yc|LDZFX$Na_43+JR_m8#%Thw6RG)JrMzqxShmM0` zo%U;^`ApwlRU5%)x(tAh1;~;GAikd8NHDJ`rTU!fa%@Xw9awc62<_MMn0{C$20s>J z9FBvI<6)H&DwSGw_t(oS-JoMnc&`20?BaOXj0)qiEi&*C=yjz>6tkZsN)ZCdjwD>l4Y|(KLZhm0@&p_POjEGXI&$*uu zZ>b#w;*TJ-->xY9MXD>y&?nf(#&oP3Zmk5RhwE>8E_*46}C@g;P z&}!ZD$Bu!HE|44q;?@$OQmPOCD*G`lwY4yU_hDtwer^26uX#dPuQ2A%JTe+OI$*te z3B>Bnh$yA{@XbW5K3{=YfCy;6mdEs?o{8R%8i-Huj`}dJS6l~aiAq^s1*>Y9gBQZ{ zEf}*n@7V7tai(%SY(|Cgz}jA!1Y*Myp;D^Pxo?r>%=Uj{1hrpX8FXE7?g|jcLC4Y~ zQ$nRwpWjO3f8jKtYl*FDe23dA+7|Xc9%{>`{`XZglu#*)2xoAiV@j8^`{@%UY@EX0 zCosV(B~+^3#!3|A?QfXslX@F_DtoJ?estdNsu^`D^rcdkp{XC#rcacxw{zJ0s2@tG zl+OPkZ{wj)lt_0OszV8t(iJ1sp-+@Bec@fJI+Rc;T`^J}`a}tfTi7$04va@%B~;2{ z$eEVv&?idR$cDX->ENGAsFbxi|5F|M#Mgy19=Z@R)DAzaBZ)?;p>(q?PA3+z;a1F$Qb2sp&o_R)kuWLs34g2f*DbY`I%Bu=T-aY(zdwKF z>3XdEnV}x5vq3!hJ)A#YObL~ug{BX6AMCz&Lv(jqzPzIS&bazHuY+Ub&p!3&PX20n z?J?-M2P3G2N~u2Q#^SAfFvepT#zXrZckT1_G4N-&I5y7R^kT34An2$bnG!0c`kdg4a1*R)@Y!qgvZ zQ8mwbrotB&LA-{#==kL+p;D?31m64|;rW+{fc9&7HLTmVet*Rgwxw)bRvHP@gEFZy)DAh{V52 zgi85#J+F|vUdOJ;M17)!=?n7%x$B7|N`y+8wSkDYGP&H!RCxx7QdLSt-PMro@#ZI& zn;%c8R6JQkBHqg2_qOY|GQQtSHPkZV%}*{jKb}yjn4#6M(~q|@x!lV5CrZRKZuBGG{N!@;;|Z0DGcEcNZ)I}1 zmGMuMh-Y;lH{8TwCx)A!TyB0mp;B?h@G*2Q-pb^1E90Li5o-={1d%1Y`N`$x#}g_Q z*ThJ~TbW#LW&9H*OkX%V$D5yAZhkzWQszgPgYi}-ms^=CpD1B*3pIdv^OMWXk0(^h z#v`mH@m406TbU}KC}HCtY8mn7CzqQaPpFjTRag__txPVrGF3iN!tyxy5pRBSx%u&g zO4o1a{6emtR4 zx~@2P+AF=XBk*S11$SSpn9jTPlq&CWVl|@5o0wR!h?#g2h+{zSA+ObiBPFnpNoDh#tHZ>5Szhs zeWCmsZr=5Y5~eTQ8}tWpT@ym3V!gD=TLtvXL#dL-6;z_F0$`DrMOdYOiM<*HYOF z#EBsEi4yfZ_I^AFq6JoQT$E5Ln+3s-+cBd)1;Lo<6D4duhVkfte0miGGBF`kD%MNm zcx-_zp9|tE+saj?CfiD;`n=cYyCnG&H= zmRDhgyD!eD9`M{|4#&V|6x*uLM>k`1w=EGWrPlfp^aMvxZ*_HLP<^3#LmkW#B~(hS zb&i!463j$_G159q0 zJfZ#iQRDf{{tiq1tj4}+mE2VO{YRa^Ewbth@+9OI+4pPjMEYTS_`(nSo2>PIi+g8( zqO1Sh|4qQ4rOo@H{pudY&LWMTE1^=2R?!dY(tdT1qGzhY^D?1QsxKw9U)`e^k=%27 ztCUbF)mP|{TV($hwkYteZ=NUjwO)r>qEf1_(7~4WYoo^9i?x$`=VSzFiAt%yLWkTU zSJ|)SF=@-hMn9}yxp%Ho%6{HxmG-MU4x3SpKJ~SfP${-?PgMMSf(RyX^H|`3BIjKO&${lwdWgi0&zG^vXB;u5bP<#zP5}iuYe}JicDk zE58dww-f5O$o`2ErY}@Kwt$YaK-^g(RLXRRyP`4he8#fAdCyhxXSkQI@`(}_w@}6D z4kAOWY9xhFDT{iziF@idEw$A^?E7Z@7P)Ho*^CeSweb(tsNaohsXdNte*;n0zEsL` zA>6ASb5cv?5fIZr=o2L@kAok3gSZBse*>$OP^oy2=dH!xHNgCy24Z`}N}niUb3Tm6 zl`FgK6?lFMVx@#i*$fWj@jm7S{cwnYK2ai_wbQXOe2Ovu3C3IrmC`vM);NoQBvi_Np45OWFaqWW`?4r-JvYz8+Wz}UjA%ko2c=T0 z<}}_S*WXL@!|p;zhj-M92$M>!`a`^T9*+oEzOpZ7A9c_w%f#TviU{+=@+w#b&ojEHj};NrL8;U#dL902%MSY!ey`zg=kwoDw01SNEBLu@n>7DyAnH=+iEZCg`n#|3 zNx9!#2;{l_{Vr;0La<*YFn0DXk3`uIBlvUb4m$Av@E>%P2`?3Y&Ng%u|Fx-hYkOkv zO+KUNQAc}(O2u|-uxjPjS^WalmhZR8XLWmH+eZ^qQy!K#};Y_)DFC9EB+g6Ele-i)A>{k-r4R%NuxMoMDUN=qW)+rbZb zp8cgns8qD7HFzGQ>thgO<@-{7)~@@(5p0*Bl=W06=(#6UyIN)KK*Z>_OHj&s3PkWd z?2vWl*ci}T9seND{nh0^-F}7=DutihjPkY=l;%~m-RG|P5wgVOsiz6yBWNuVcN!HZaV9VQiH zRhJSX#L7$4x+b~gJ-587$7)4{_rr)JRylP+Fqh=amSQ|eO2u}x>i+?MhEbgW diff --git a/resources/house_2/meshes/stl/Houseplant_18.stl b/resources/house_2/meshes/stl/Houseplant_18.stl deleted file mode 100644 index 21082e5c27166c660f0544ccc15e459ed77f8478..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93184 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 G0saG4UnCj; diff --git a/resources/house_2/meshes/stl/Pillow_3.stl b/resources/house_2/meshes/stl/Pillow_3.stl deleted file mode 100644 index d118f3061ad25dc626dce801065b454d0c953d72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45284 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 J(ZNvD{sYaM?+E|^ diff --git a/resources/house_2/meshes/stl/RobothorBasketballRhodeIslandNovelty.stl b/resources/house_2/meshes/stl/RobothorBasketballRhodeIslandNovelty.stl deleted file mode 100644 index 75e8d89ba7a2998638ca78356ad6927bfdeb94d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48084 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