From 839d84e4557d45e3e6c2166e11334075d2a858b8 Mon Sep 17 00:00:00 2001 From: as-ling Date: Wed, 21 Apr 2021 00:31:51 +0200 Subject: [PATCH] Assignment_05 --- .../assignment_05/asling/Assignment_05.3dm | Bin 0 -> 3948003 bytes .../assignment_05/asling/Assignment_05.ghx | 15092 ++++++++++++++++ lecture_06/assignment_05/asling/assembly.json | 9817 ++++++++++ .../assignment_05/asling/vacuum_gripper.stl | Bin 0 -> 9884 bytes 4 files changed, 24909 insertions(+) create mode 100644 lecture_06/assignment_05/asling/Assignment_05.3dm create mode 100644 lecture_06/assignment_05/asling/Assignment_05.ghx create mode 100644 lecture_06/assignment_05/asling/assembly.json create mode 100644 lecture_06/assignment_05/asling/vacuum_gripper.stl diff --git a/lecture_06/assignment_05/asling/Assignment_05.3dm b/lecture_06/assignment_05/asling/Assignment_05.3dm new file mode 100644 index 0000000000000000000000000000000000000000..de3397b36498f78fd228477b289ad578caa01bc3 GIT binary patch literal 3948003 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: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 y{sW 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%0DtBWaLpFsv#quzR67zc<{V98?@Xi}+%w8LRK999e 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 literal 0 HcmV?d00001 diff --git a/lecture_06/assignment_05/asling/Assignment_05.ghx b/lecture_06/assignment_05/asling/Assignment_05.ghx new file mode 100644 index 0000000..a4e465f --- /dev/null +++ b/lecture_06/assignment_05/asling/Assignment_05.ghx @@ -0,0 +1,15092 @@ + + + + + + + + 0 + 2 + 2 + + + + + + + 1 + 0 + 7 + + + + + + c4f913db-409d-41a9-88e1-f6f90989047d + Shaded + 1 + + 100;150;0;0 + + + 100;0;150;0 + + + + + + 637527254194888879 + + Assignment_05.ghx + + + + + 0 + + + + + + 77 + -148 + + 0.310324728 + + + + + 0 + + + + + + + 0 + + + + + 1 + + + + + GhPython, Version=6.32.20340.21002, Culture=neutral, PublicKeyToken=null + 6.32.20340.21002 + + 00000000-0000-0000-0000-000000000000 + + + + + + + + + 128 + + + + + 2e78987b-9dfb-42a2-8b76-3923ac8bd91a + Boolean Toggle + + + + + Boolean (true/false) toggle + 47c152bc-c823-4835-aad3-3bf5c281e892 + Boolean Toggle + Connect + false + 0 + true + + + + + + 27 + 85 + 107 + 22 + + + + + + + + + + 2e78987b-9dfb-42a2-8b76-3923ac8bd91a + Boolean Toggle + + + + + Boolean (true/false) toggle + d19cf29a-0512-4632-b4e0-ecc00c5b8487 + Boolean Toggle + Load robot + false + 0 + true + + + + + + 29 + 134 + 119 + 22 + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + import Grasshopper +import System +from ghpythonlib.componentbase import executingcomponent as component +from scriptcontext import sticky as st + +from compas_fab.backends import RosClient +from compas_fab.ghpython.components import create_id + + +class ROSConnect(component): + def SetUpParam(self, p, name, nickname, description): + p.Name = name + p.NickName = nickname + p.Description = description + p.Optional = True + + def RegisterInputParams(self, pManager): + + p = Grasshopper.Kernel.Parameters.Param_String() + self.SetUpParam(p, "ip", "ip", "The ip address of ROS master. Defaults to 127.0.0.1") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_Integer() + self.SetUpParam(p, "port", "port", "The port of ROS master. Defaults to 9090.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_Boolean() + self.SetUpParam(p, "connect", "connect", "If `True`, connect to ROS. If `False`, disconnect from ROS. Defaults to False.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + def RegisterOutputParams(self, pManager): + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "ros_client", "ros_client", "The ROS client.") + self.Params.Output.Add(p) + + def SolveInstance(self, DA): + p0 = self.marshal.GetInput(DA, 0) + p1 = self.marshal.GetInput(DA, 1) + p2 = self.marshal.GetInput(DA, 2) + result = self.RunScript(p0, p1, p2) + + if result is not None: + self.marshal.SetOutput(result, DA, 0, True) + + def RunScript(self, ip, port, connect): + ros_client = None + + ip = ip or '127.0.0.1' + port = port or 9090 + + key = create_id(self, 'ros_client') + ros_client = st.get(key, None) + + if ros_client: + st[key].close() + if connect: + st[key] = RosClient(ip, port) + st[key].run(5) + + ros_client = st.get(key, None) + self.Message = 'Connected' if ros_client and ros_client.is_connected else 'Not connected' + return ros_client + + GhPython provides a Python script component + + 229 + 390 + + + 684 + 571 + + true + true + 1 + 3ed3a5e2-d78a-43c5-99e3-a602e5221e79 + true + true + GhPython Script + ROS Connect + + + + + + 211 + 86 + 127 + 89 + + + 270 + 131 + + + + + + 3 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + Script variable Python + 39f76aa4-b4b1-4eff-8540-c659df1e991b + ip + ip + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 213 + 88 + 42 + 28 + + + 235.5 + 102.1667 + + + + + + + + true + Script input port. + 745e0055-1456-4b6f-8e8f-d5f74af38e8d + port + port + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 213 + 116 + 42 + 28 + + + 235.5 + 130.5 + + + + + + + + true + Script input connect. + 140a303b-ef70-4b59-a913-724c0d0505cb + connect + connect + true + 0 + true + 47c152bc-c823-4835-aad3-3bf5c281e892 + 1 + 35915213-5534-4277-81b8-1bdc9e7383d2 + + + + + + 213 + 144 + 42 + 29 + + + 235.5 + 158.8333 + + + + + + + + Script output ros_client. + 54922ac8-ee9c-400b-ac86-feaf21cb04a2 + ros_client + ros_client + false + 0 + + + + + + 285 + 88 + 51 + 85 + + + 310.5 + 130.5 + + + + + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + import Grasshopper +import System +from ghpythonlib.componentbase import executingcomponent as component +from scriptcontext import sticky as st + +import compas +from compas_fab.ghpython.components import create_id +from compas_fab.ghpython.components.icons import ros_robot_icon +from compas_ghpython.artists import RobotModelArtist + + +class ROSRobot(component): + def SetUpParam(self, p, name, nickname, description): + p.Name = name + p.NickName = nickname + p.Description = description + p.Optional = True + + def RegisterInputParams(self, pManager): + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "ros_client", "ros_client", "The ROS client.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_Boolean() + self.SetUpParam(p, "load", "load", "If `True`, loads the robot from ROS. Defaults to False.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + def RegisterOutputParams(self, pManager): + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "robot", "robot", "The robot.") + self.Params.Output.Add(p) + + def SolveInstance(self, DA): + p0 = self.marshal.GetInput(DA, 0) + p1 = self.marshal.GetInput(DA, 1) + result = self.RunScript(p0, p1) + + if result is not None: + self.marshal.SetOutput(result, DA, 0, True) + + def get_Internal_Icon_24x24(self): + return ros_robot_icon + + def RunScript(self, ros_client, load): + self.Message = "Loading..." + compas.PRECISION = '12f' + + key = create_id(self, 'robot') + + if ros_client and ros_client.is_connected and load: + # Load URDF from ROS + robot = ros_client.load_robot(load_geometry=True) + robot.artist = RobotModelArtist(robot.model) + self.Message = "{} loaded".format(robot.name) + st[key] = robot + else: + if st.get(key): + self.Message = "{} loaded".format(st.get(key).name) + else: + self.Message = "No robot" + + robot = st.get(key, None) + if robot: # client sometimes need to be restarted, without needing to reload geometry + robot.client = ros_client + return robot + + GhPython provides a Python script component + + 234 + 234 + + + 558 + 571 + + true + true + 1 + 1cb74eb0-a053-4919-a55e-3175350e261c + true + true + GhPython Script + Load robot + + + + + + 631 + 98 + 113 + 74 + + + 696 + 135 + + + + + + 2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + Script variable Python + fcf0c1b8-fa76-4032-92b0-ef2ada751e62 + ros_client + ros_client + true + 0 + true + 54922ac8-ee9c-400b-ac86-feaf21cb04a2 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + 1 + + + + + + 633 + 100 + 48 + 35 + + + 658.5 + 117.5 + + + + + + + + true + Script input load. + 4b059742-6fce-4e6a-b6b0-cd2e2ccfdb08 + load + load + true + 0 + true + d19cf29a-0512-4632-b4e0-ecc00c5b8487 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + 1 + + + + + + 633 + 135 + 48 + 35 + + + 658.5 + 152.5 + + + + + + + + Script output robot. + 9a9900f7-c5de-485a-9791-63a5e1930c86 + robot + robot + false + 0 + + + + + + 711 + 100 + 31 + 70 + + + 726.5 + 135 + + + + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + 3ed3a5e2-d78a-43c5-99e3-a602e5221e79 + 47c152bc-c823-4835-aad3-3bf5c281e892 + d19cf29a-0512-4632-b4e0-ecc00c5b8487 + 1cb74eb0-a053-4919-a55e-3175350e261c + 052e844a-59bc-4346-a9d3-a1965fe01a5c + 5 + 8f601091-89b0-4be9-9194-7191c9078d9e + Group + + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + import Grasshopper +import System +from ghpythonlib.componentbase import executingcomponent as component +from scriptcontext import sticky as st + +from compas.geometry import Frame +from compas.geometry import Transformation +from compas_ghpython.artists import MeshArtist +from compas_ghpython import draw_frame +from compas_fab.ghpython.components import create_id +from compas_fab.ghpython.components.icons import robot_visualize_icon + +class RobotVisualize(component): + def SetUpParam(self, p, name, nickname, description): + p.Name = name + p.NickName = nickname + p.Description = description + p.Optional = True + + def RegisterInputParams(self, pManager): + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "robot", "robot", "The robot.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_String() + self.SetUpParam(p, "group", "group", "The planning group used for end-effector and base visualization.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "configuration", "configuration", "The robot's full configuration.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_Boolean() + self.SetUpParam(p, "reload_scene", "reload_scene", "Whether or not to reload the scene information from the client.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + def RegisterOutputParams(self, pManager): + + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "visual", "visual", "The robot's visual meshes.") + self.Params.Output.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "frames", "frames", "The robot's joint frames.") + self.Params.Output.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "attached_collision_meshes", "attached_collision_meshes", "Attached collision meshes in the scene.") + self.Params.Output.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "collision_meshes", "collision_meshes", "Collision meshes in the scene.") + self.Params.Output.Add(p) + + def SolveInstance(self, DA): + p0 = self.marshal.GetInput(DA, 0) + p1 = self.marshal.GetInput(DA, 1) + p2 = self.marshal.GetInput(DA, 2) + p3 = self.marshal.GetInput(DA, 3) + result = self.RunScript(p0, p1, p2, p3) + + if result is not None: + if not hasattr(result, '__getitem__'): + self.marshal.SetOutput(result, DA, 0, True) + else: + self.marshal.SetOutput(result[0], DA, 0, True) + self.marshal.SetOutput(result[1], DA, 1, True) + self.marshal.SetOutput(result[2], DA, 2, True) + self.marshal.SetOutput(result[3], DA, 3, True) + + def get_Internal_Icon_24x24(self): + return robot_visualize_icon + + def RunScript(self, robot, group, configuration, reload_scene): + + visual = None + frames = None + collision_meshes = [] + attached_collision_meshes = [] + + if robot: + configuration = configuration or robot.zero_configuration() + + robot.update(configuration, visual=True, collision=False) + frames = [draw_frame(f) for f in robot.transformed_frames(configuration, group)] + + visual = robot.artist.draw_visual() + + scene_key = create_id(self, 'scene') + + if robot and (reload_scene or scene_key not in st): + st[scene_key] = robot.client.get_planning_scene() + + scene = st.get(scene_key, None) + + if scene: + scene_key_co = scene_key + '_co' + if reload_scene or scene_key_co not in st: + for co in scene.world.collision_objects: + # HACK: Little workaround to a bug in to_collision_meshes() + header = co.header + frame_id = header.frame_id + co.header = dict(frame_id=frame_id) + cms = co.to_collision_meshes() + # HACK: Restore proper header + co.header = header + + for cm in cms: + if frame_id != '/world': + raise NotImplementedException('Only world-referenced collision meshes are supported') + + if cm.frame != Frame.worldXY(): + t = Transformation.from_frame(cm.frame) + mesh = cm.mesh.transformed(t) + else: + mesh = cm.mesh + + rhino_mesh = MeshArtist(mesh).draw() + collision_meshes.append(rhino_mesh) + st[scene_key_co] = collision_meshes + + collision_meshes = st.get(scene_key_co, None) + + for aco in scene.robot_state.attached_collision_objects: + for acm in aco.to_attached_collision_meshes(): + frame_id = aco.object['header']['frame_id'] + frame = robot.forward_kinematics(configuration, options=dict(link=frame_id)) + t = Transformation.from_frame(frame) + + # Local CM frame + if acm.collision_mesh.frame and acm.collision_mesh.frame != Frame.worldXY(): + t = t * Transformation.from_frame(acm.collision_mesh.frame) + + mesh = acm.collision_mesh.mesh.transformed(t) + + rhino_mesh = MeshArtist(mesh).draw() + attached_collision_meshes.append(rhino_mesh) + + return (visual, frames, attached_collision_meshes, collision_meshes) + + GhPython provides a Python script component + + 776 + 53 + + + 821 + 880 + + true + true + 1 + 49f90167-2646-4d22-86bb-012cb0fa4ce7 + true + true + GhPython Script + Visualize + + + + + + 2234 + 86 + 235 + 84 + + + 2318 + 128 + + + + + + 4 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 4 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + Script variable Python + cf579257-0392-4efa-8abc-cd5056adcf57 + robot + robot + true + 0 + true + 9a9900f7-c5de-485a-9791-63a5e1930c86 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 2236 + 88 + 67 + 20 + + + 2271 + 98 + + + + + + + + true + Script input group. + 1bfd0eaf-087b-48f8-94ab-ec1f66301ff5 + group + group + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 2236 + 108 + 67 + 20 + + + 2271 + 118 + + + + + + + + true + Script input configuration. + 2b362d36-7eb3-4375-b95e-a6ac847f62ba + configuration + configuration + true + 0 + true + 4f71d325-568e-44cb-a557-d39b0f640dcd + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 2236 + 128 + 67 + 20 + + + 2271 + 138 + + + + + + + + true + Script input reload_scene. + e0c5dc07-2e68-4c56-b256-f4d6f758b13b + reload_scene + reload_scene + true + 0 + true + 11f438a0-e803-417d-8e51-4bf9fdfb3f32 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 2236 + 148 + 67 + 20 + + + 2271 + 158 + + + + + + + + Script output visual. + 7fb0382a-e34f-49af-8952-9248a6d53e87 + visual + visual + false + 0 + + + + + + 2333 + 88 + 134 + 20 + + + 2400 + 98 + + + + + + + + Script output frames. + a94910e2-c32f-4b57-b31b-4b2bb61f886c + frames + frames + false + 0 + + + + + + 2333 + 108 + 134 + 20 + + + 2400 + 118 + + + + + + + + Script output attached_collision_meshes. + ece8fe7d-7f3d-4b20-a022-3c3f798472a2 + attached_collision_meshes + attached_collision_meshes + false + 0 + + + + + + 2333 + 128 + 134 + 20 + + + 2400 + 138 + + + + + + + + Script output collision_meshes. + 5425d29f-9702-41b7-b855-110be3410f3f + collision_meshes + collision_meshes + false + 0 + + + + + + 2333 + 148 + 134 + 20 + + + 2400 + 158 + + + + + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + true + + 28.50171 + 30.30629 + + + 112.3435 + 30.30629 + + + 112.3435 + 60.67592 + + + 28.50171 + 60.67592 + + A quick note + Arial + 052e844a-59bc-4346-a9d3-a1965fe01a5c + false + Scribble + Scribble + 41 + ROS + + + + + + 23.50171 + 25.30629 + 93.8418 + 40.36963 + + + 28.50171 + 30.30629 + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + true + + 33.45305 + 533.9657 + + + 114.412 + 533.9657 + + + 114.412 + 563.7948 + + + 33.45305 + 563.7948 + + A quick note + Arial + 5d32bed8-8ecb-420b-94ff-7e259c6e0271 + false + Scribble + Scribble + 41 + Pick + + + + + + 28.45305 + 528.9657 + 90.95898 + 39.8291 + + + 33.45305 + 533.9657 + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + 3b7f60e5-51c9-490b-9ebc-e5ee462e7ba4 + 5d32bed8-8ecb-420b-94ff-7e259c6e0271 + 22f65f1a-2960-4e61-af15-fe921d28a85e + 34e985cd-859f-4d13-a639-0f4a1845fc21 + 4a2d4712-07e1-486a-83c8-6f48dc97b0fb + 8236f508-23ec-490e-87aa-044817e10e3d + aed8c6c7-f405-4348-b43b-ddbf751f09ac + 7 + 51d0885c-388f-4eed-b92e-203da09abd43 + Group + + + + + + + + + + + fbac3e32-f100-4292-8692-77240a42fd1a + Point + + + + + Contains a collection of three-dimensional points + 34e985cd-859f-4d13-a639-0f4a1845fc21 + Point + Pt Pick + false + 0 + + + + + + 129 + 535 + 50 + 20 + + + 154.8627 + 545.0902 + + + + + + 1 + + + + + 1 + {0} + + + + + + + + 6e5f3eb2-34c1-41bc-840b-a63224d35c01 + -1 + 0 + 0 + point_object + + + + + + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + import Grasshopper +import System +from ghpythonlib.componentbase import executingcomponent as component +from scriptcontext import sticky as st + +from compas_fab.ghpython.components import coerce_frame +from compas_fab.backends import RosValidationError + +class InverseKinematics(component): + def SetUpParam(self, p, name, nickname, description): + p.Name = name + p.NickName = nickname + p.Description = description + p.Optional = True + + def RegisterInputParams(self, pManager): + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "robot", "robot", "The robot.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "plane", "plane", "The plane or frame to calculate the inverse kinematic for.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "start_configuration", "start_configuration", + "If passed, the inverse will be calculated such that the calculated joint positions \ + differ the least from the start_configuration. Defaults to the zero configuration.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_String() + self.SetUpParam(p, "group", "group", "The planning group used for calculation. Defaults to the robot's main planning group.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + def RegisterOutputParams(self, pManager): + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "a", "configuration", "The planning group's configuration.") + self.Params.Output.Add(p) + + def SolveInstance(self, DA): + p0 = self.marshal.GetInput(DA, 0) + p1 = self.marshal.GetInput(DA, 1) + p2 = self.marshal.GetInput(DA, 2) + p3 = self.marshal.GetInput(DA, 3) + result = self.RunScript(p0, p1, p2, p3) + + if result is not None: + self.marshal.SetOutput(result, DA, 0, True) + + def get_Internal_Icon_24x24(self): + return inverse_kinematics_icon + + def RunScript(self, robot, plane, start_configuration, group): + configuration = None + self.Message = '' + if robot and robot.client and robot.client.is_connected and plane: + frame = coerce_frame(plane) + try: + configuration = robot.inverse_kinematics(frame, start_configuration, group) + except RosValidationError as e: + self.Message = 'No solution found' + raise + + if configuration: + self.Message = 'Solution found' + return configuration + + GhPython provides a Python script component + + 416 + 248 + + + 684 + 571 + + true + true + 1 + e4f9217d-c7c3-49af-9a83-834638eb0d4d + true + true + GhPython Script + IK + + + + + + 617 + 1995 + 198 + 84 + + + 728 + 2037 + + + + + + 4 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + Script variable Python + 29fc4f93-58c2-4192-8f02-3ecdf4a1be23 + robot + robot + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 619 + 1997 + 94 + 20 + + + 667.5 + 2007 + + + + + + + + true + Script input plane. + c75f16a9-ac28-43bf-a9b6-95a50d2b00f1 + plane + plane + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 619 + 2017 + 94 + 20 + + + 667.5 + 2027 + + + + + + + + true + Script input start_configuration. + 79ab0fb8-9433-4fe1-a38b-0c119815d935 + start_configuration + start_configuration + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 619 + 2037 + 94 + 20 + + + 667.5 + 2047 + + + + + + + + true + Script input group. + 14fc99fc-0ac5-4bf2-9d18-9cfab5caf53b + group + group + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 619 + 2057 + 94 + 20 + + + 667.5 + 2067 + + + + + + + + Script output configuration. + 9f3010dd-f68e-4afc-ad16-9a448e090c7b + configuration + configuration + false + 0 + + + + + + 743 + 1997 + 70 + 80 + + + 778 + 2037 + + + + + + + + + + + + + + 2e78987b-9dfb-42a2-8b76-3923ac8bd91a + Boolean Toggle + + + + + Boolean (true/false) toggle + 11f438a0-e803-417d-8e51-4bf9fdfb3f32 + Boolean Toggle + reload + false + 0 + true + + + + + + 2082 + 147 + 97 + 22 + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + from compas.geometry import Box +from compas.datastructures import Mesh +from compas_ghpython.artists import MeshArtist + +shape = Box.from_width_height_depth(w, h, d) +brick = Mesh.from_shape(shape) + +mesh = MeshArtist(brick).draw() + GhPython provides a Python script component + + 597 + 249 + + + 558 + 571 + + true + true + 7ab9dd8f-ef96-4fa7-83c6-73bbfa8256ad + false + true + GhPython Script + Python + + + + + + 280 + 1317 + 79 + 64 + + + 307 + 1349 + + + + + + 3 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 3 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + Script variable Python + d5445420-7f73-489a-a402-f534142329eb + h + h + true + 0 + true + 38da7932-bace-4722-99e8-41530a8b7e79 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 282 + 1319 + 10 + 20 + + + 288.5 + 1329 + + + + + + + + true + Script input w. + 6282d3f3-b08b-4ead-81a5-16f764732ae7 + w + w + true + 0 + true + e65f93ac-4a14-4fef-afc6-44d78530e45e + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 282 + 1339 + 10 + 20 + + + 288.5 + 1349 + + + + + + + + true + Script input d. + a8705f46-83b1-4be5-83ca-a074b9e5c0a4 + d + d + true + 0 + true + d87fb28a-1fe7-43f1-9815-d869f233b385 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 282 + 1359 + 10 + 20 + + + 288.5 + 1369 + + + + + + + + Script output shape. + e42c965a-b5a0-4604-b779-6619359cf9a2 + shape + shape + false + 0 + + + + + + 322 + 1319 + 35 + 20 + + + 339.5 + 1329 + + + + + + + + Script output brick. + 5499898c-9def-41d8-a767-7d5681a3af05 + brick + brick + false + 0 + + + + + + 322 + 1339 + 35 + 20 + + + 339.5 + 1349 + + + + + + + + Script output mesh. + 6088143e-d145-4a47-8c41-51e32cd53990 + mesh + mesh + false + 0 + + + + + + 322 + 1359 + 35 + 20 + + + 339.5 + 1369 + + + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + e65f93ac-4a14-4fef-afc6-44d78530e45e + Number Slider + + false + 0 + + + + + + 60 + 1339 + 160 + 20 + + + 60.42279 + 1339.628 + + + + + + 3 + 1 + 0 + 0.05 + 0.01 + 0 + 0.016 + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 38da7932-bace-4722-99e8-41530a8b7e79 + Number Slider + + false + 0 + + + + + + 60 + 1320 + 193 + 20 + + + 60.45255 + 1320.055 + + + + + + 3 + 1 + 0 + 0.05 + 0.01 + 0 + 0.012 + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + d87fb28a-1fe7-43f1-9815-d869f233b385 + Number Slider + + false + 0 + + + + + + 60 + 1360 + 194 + 20 + + + 60.89997 + 1360.944 + + + + + + 3 + 1 + 0 + 0.05 + 0.01 + 0 + 0.031 + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + 7ab9dd8f-ef96-4fa7-83c6-73bbfa8256ad + e65f93ac-4a14-4fef-afc6-44d78530e45e + 38da7932-bace-4722-99e8-41530a8b7e79 + d87fb28a-1fe7-43f1-9815-d869f233b385 + c298b20b-20d4-4283-a7af-ce44bd5e2c27 + 5 + cb5a6baa-4860-4b69-a01f-eb01a0538eaa + Group + + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + true + + 62.41566 + 1276.415 + + + 218.4279 + 1276.415 + + + 218.4279 + 1306.244 + + + 62.41566 + 1306.244 + + A quick note + Arial + c298b20b-20d4-4283-a7af-ce44bd5e2c27 + false + Scribble + Scribble + 41 + Element + + + + + + 57.41566 + 1271.415 + 166.0122 + 39.8291 + + + 62.41566 + 1276.415 + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + 49f90167-2646-4d22-86bb-012cb0fa4ce7 + 11f438a0-e803-417d-8e51-4bf9fdfb3f32 + aeeed025-274e-42d7-99ae-3705f3d7fe2d + 3 + 12f678ce-2c29-4d3c-a571-1a207a507731 + Group + + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + true + + 2080.473 + 42.71185 + + + 2327.594 + 42.71185 + + + 2327.594 + 72.54095 + + + 2080.473 + 72.54095 + + A quick note + Arial + aeeed025-274e-42d7-99ae-3705f3d7fe2d + false + Scribble + Scribble + 41 + Visualization + + + + + + 2075.473 + 37.71185 + 257.1211 + 39.8291 + + + 2080.473 + 42.71185 + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + from compas_fab.robots import Configuration + +config = Configuration.from_revolute_values(j) + GhPython provides a Python script component + + 26 + 26 + + + 558 + 571 + + true + true + 1 + 9bde434b-367e-491f-9f01-040b116c4562 + false + true + GhPython Script + Home config + + + + + + 253 + 1607 + 79 + 86 + + + 279 + 1650 + + + + + + 1 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + 1 + true + Script variable Pickup config + 24655f45-8c71-4631-8530-a0bc0f33ad9f + j + j + true + 1 + true + 6a7e4d1a-ceb2-4c60-bd73-b1fd7e57a88d + 453254b0-f451-4808-a6c8-f678281679fd + c789e886-ac48-44a7-8696-71249b62e335 + ffdf9a6f-f4a6-417e-96df-c38d59b6a4da + 4bbbdf99-354b-448e-8eb7-59249cc4e3d0 + b6ce1f01-cf45-408d-b8ba-45a08f564742 + 6 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 255 + 1609 + 9 + 82 + + + 261 + 1650 + + + + + + + + Script output config. + f956b690-65c4-4b82-ac9a-488e4afed703 + config + config + false + 0 + + + + + + 294 + 1609 + 36 + 82 + + + 312 + 1650 + + + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 6a7e4d1a-ceb2-4c60-bd73-b1fd7e57a88d + Number Slider + + false + 0 + + + + + + 54 + 1594 + 160 + 20 + + + 54.31252 + 1594.704 + + + + + + 2 + 1 + 0 + 3.14 + -3.14 + 0 + 1.57 + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 453254b0-f451-4808-a6c8-f678281679fd + Number Slider + + false + 0 + + + + + + 54 + 1616 + 160 + 20 + + + 54.31247 + 1616.304 + + + + + + 2 + 1 + 0 + 3.14 + -3.14 + 0 + -1.57 + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + c789e886-ac48-44a7-8696-71249b62e335 + Number Slider + + false + 0 + + + + + + 54 + 1637 + 160 + 20 + + + 54.31247 + 1637.904 + + + + + + 2 + 1 + 0 + 3.14 + -3.14 + 0 + 1.57 + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + ffdf9a6f-f4a6-417e-96df-c38d59b6a4da + Number Slider + + false + 0 + + + + + + 54 + 1659 + 160 + 20 + + + 54.31247 + 1659.504 + + + + + + 2 + 1 + 0 + 3.14 + -3.14 + 0 + -1.57 + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 4bbbdf99-354b-448e-8eb7-59249cc4e3d0 + Number Slider + + false + 0 + + + + + + 54 + 1681 + 160 + 20 + + + 54.31247 + 1681.104 + + + + + + 2 + 1 + 0 + 3.14 + -3.14 + 0 + -1.57 + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + b6ce1f01-cf45-408d-b8ba-45a08f564742 + Number Slider + + false + 0 + + + + + + 53 + 1702 + 160 + 20 + + + 53.9474 + 1702.744 + + + + + + 2 + 1 + 0 + 3.14 + -3.14 + 0 + -3.14 + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + true + + 57.82938 + 1433.227 + + + 371.6755 + 1433.227 + + + 371.6755 + 1471.164 + + + 57.82938 + 1471.164 + + A quick note + Arial + 726245b8-cd81-4793-93c4-5a74c6fadea6 + false + Scribble + Scribble + 41 + Approach offset + + + + + + 52.82938 + 1428.227 + 323.8462 + 47.93701 + + + 57.82938 + 1433.227 + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;204;255;0 + + A group of Grasshopper objects + e4f9217d-c7c3-49af-9a83-834638eb0d4d + d42341b5-06d6-414d-8a72-d1a48effb96f + c6ffa12e-83a0-4af7-8681-e213e9c0ba9f + 87380de2-badc-4b2b-a438-aac8de443f24 + e37b5872-2136-4007-9701-3851c1cc4a87 + 5 + e51bc20f-e909-47bb-815c-1f0988524d39 + Group + + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + true + + 192.4649 + 1931.508 + + + 347.5762 + 1931.508 + + + 347.5762 + 1961.337 + + + 192.4649 + 1961.337 + + A quick note + Arial + d42341b5-06d6-414d-8a72-d1a48effb96f + false + Scribble + Scribble + 41 + Toolbox + + + + + + 187.4649 + 1926.508 + 165.1113 + 39.8291 + + + 192.4649 + 1931.508 + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + import Grasshopper +import System +from ghpythonlib.componentbase import executingcomponent as component +from scriptcontext import sticky as st + +from compas_fab.ghpython.components import create_id +from compas_fab.ghpython.components import coerce_frame +from compas_fab.ghpython.components.icons import plan_cartesian_motion_icon + +class PlanCartesianMotion(component): + def SetUpParam(self, p, name, nickname, description): + p.Name = name + p.NickName = nickname + p.Description = description + p.Optional = True + + def RegisterInputParams(self, pManager): + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "robot", "robot", "The robot.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "planes", "planes", "The planes or frames through which the path is defined.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.list + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "start_configuration", "start_configuration", + "The robot's full configuration, i.e. values for all configurable joints of the entire robot, at the starting position. Defaults to the all-zero configuration.") # noqa E501 + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_String() + self.SetUpParam(p, "group", "group", "The planning group used for calculation. Defaults to the robot's main planning group.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + +# p = Grasshopper.Kernel.Parameters.Param_GenericObject() +# self.SetUpParam(p, "attached_collision_meshes", "attached_collision_meshes", "A list of attached collision meshes to be included for planning.") +# p.Access = Grasshopper.Kernel.GH_ParamAccess.list +# self.Params.Input.Add(p) + +# p = Grasshopper.Kernel.Parameters.Param_GenericObject() +# self.SetUpParam(p, "path_constraints", "path_constraints", +# "Optional constraints that can be imposed along the solution path. Note that path calculation won't work if the start_configuration violates these constraints. Defaults to None.") # noqa E501 +# p.Access = Grasshopper.Kernel.GH_ParamAccess.list +# self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_Number() + self.SetUpParam(p, "max_step", "max_step", "The approximate distance between the calculated points. (Defined in the robot's units.) Defaults to 0.01.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_Boolean() + self.SetUpParam(p, "compute", "compute", "If `True`, calculates a trajectory.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + def RegisterOutputParams(self, pManager): + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "trajectory", "trajectory", "The calculated trajectory.") + self.Params.Output.Add(p) + + def SolveInstance(self, DA): + p0 = self.marshal.GetInput(DA, 0) + p1 = self.marshal.GetInput(DA, 1) + p2 = self.marshal.GetInput(DA, 2) + p3 = self.marshal.GetInput(DA, 3) + p4 = self.marshal.GetInput(DA, 4) + p5 = self.marshal.GetInput(DA, 5) +# p6 = self.marshal.GetInput(DA, 6) +# p7 = self.marshal.GetInput(DA, 7) +# result = self.RunScript(p0, p1, p2, p3, p4, p5, p6, p7) + result = self.RunScript(p0, p1, p2, p3, p4, p5) + + if result is not None: + self.marshal.SetOutput(result, DA, 0, True) + + def get_Internal_Icon_24x24(self): + return plan_cartesian_motion_icon + + def RunScript(self, robot, planes, start_configuration, group, max_step, compute): + + key = create_id(self, 'trajectory') + + max_step = float(max_step) if max_step else 0.01 + # NOTE: Read from scene + attached_collision_meshes = None + path_constraints = None + attached_collision_meshes = list(attached_collision_meshes) if attached_collision_meshes else None + + if robot and robot.client and robot.client.is_connected and start_configuration and planes and compute: + frames = [coerce_frame(plane) for plane in planes] + st[key] = robot.plan_cartesian_motion(frames, + start_configuration=start_configuration, + group=group, + options=dict( + max_step=max_step, + path_constraints=path_constraints, + attached_collision_meshes=attached_collision_meshes + )) + + trajectory = st.get(key, None) + + if trajectory and trajectory.fraction < 1.0: + raise Exception('Incomplete trajectory. Fraction={}'.format(trajectory.fraction)) + + return trajectory + GhPython provides a Python script component + + 380 + 257 + + + 684 + 571 + + true + true + 1 + edaa4174-c047-4295-b443-89dc75c38874 + true + true + GhPython Script + Plan Cartesian Motion + + + + + + 1515 + 475 + 180 + 142 + + + 1626 + 546 + + + + + + 6 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + Script variable Python + 7a8e0849-6408-4019-bd04-ecec1357ce2f + robot + robot + true + 0 + true + 9a9900f7-c5de-485a-9791-63a5e1930c86 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1517 + 477 + 94 + 23 + + + 1565.5 + 488.5 + + + + + + + + 1 + true + Script input planes. + 9c32ec77-4568-488d-be79-c66ed33c1c5e + planes + planes + true + 1 + true + 7709d326-8e7a-49da-a1d7-d642545c5ad8 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1517 + 500 + 94 + 23 + + + 1565.5 + 511.5 + + + + + + + + true + Script input start_configuration. + 323e5583-c859-4458-83cb-a31129c59de5 + start_configuration + start_configuration + true + 0 + true + f956b690-65c4-4b82-ac9a-488e4afed703 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1517 + 523 + 94 + 23 + + + 1565.5 + 534.5 + + + + + + + + true + Script input group. + f52922b0-d77c-41ef-96fe-973844052729 + group + group + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1517 + 546 + 94 + 23 + + + 1565.5 + 557.5 + + + + + + + + true + Script input max_step. + 1b61a588-493b-4f4f-aeda-ffa9b7c1a1d6 + max_step + max_step + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1517 + 569 + 94 + 23 + + + 1565.5 + 580.5 + + + + + + + + true + Script input compute. + 2d589609-76fd-431f-b9f1-cb67dfa2d7d3 + compute + compute + true + 0 + true + 27ff0d44-37bd-4d39-a1da-061f75bbf757 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1517 + 592 + 94 + 23 + + + 1565.5 + 603.5 + + + + + + + + Script output trajectory. + 7d158313-5514-47eb-a080-3408700613a7 + trajectory + trajectory + false + 0 + + + + + + 1641 + 477 + 52 + 138 + + + 1667 + 546 + + + + + + + + + + + + + + a8b97322-2d53-47cd-905e-b932c3ccd74e + Button + + + + + Button object with two values + False + True + 27ff0d44-37bd-4d39-a1da-061f75bbf757 + Button + Button + false + 0 + + + + + + 1374 + 592 + 99 + 22 + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + import Grasshopper +import System +from ghpythonlib.componentbase import executingcomponent as component +from scriptcontext import sticky as st + +from compas_fab.ghpython.components import create_id +from compas_fab.ghpython.components import coerce_frame +from compas_fab.ghpython.components.icons import plan_cartesian_motion_icon + +class PlanCartesianMotion(component): + def SetUpParam(self, p, name, nickname, description): + p.Name = name + p.NickName = nickname + p.Description = description + p.Optional = True + + def RegisterInputParams(self, pManager): + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "robot", "robot", "The robot.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "planes", "planes", "The planes or frames through which the path is defined.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.list + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "start_configuration", "start_configuration", + "The robot's full configuration, i.e. values for all configurable joints of the entire robot, at the starting position. Defaults to the all-zero configuration.") # noqa E501 + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_String() + self.SetUpParam(p, "group", "group", "The planning group used for calculation. Defaults to the robot's main planning group.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + +# p = Grasshopper.Kernel.Parameters.Param_GenericObject() +# self.SetUpParam(p, "attached_collision_meshes", "attached_collision_meshes", "A list of attached collision meshes to be included for planning.") +# p.Access = Grasshopper.Kernel.GH_ParamAccess.list +# self.Params.Input.Add(p) + +# p = Grasshopper.Kernel.Parameters.Param_GenericObject() +# self.SetUpParam(p, "path_constraints", "path_constraints", +# "Optional constraints that can be imposed along the solution path. Note that path calculation won't work if the start_configuration violates these constraints. Defaults to None.") # noqa E501 +# p.Access = Grasshopper.Kernel.GH_ParamAccess.list +# self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_Number() + self.SetUpParam(p, "max_step", "max_step", "The approximate distance between the calculated points. (Defined in the robot's units.) Defaults to 0.01.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_Boolean() + self.SetUpParam(p, "compute", "compute", "If `True`, calculates a trajectory.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + def RegisterOutputParams(self, pManager): + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "trajectory", "trajectory", "The calculated trajectory.") + self.Params.Output.Add(p) + + def SolveInstance(self, DA): + p0 = self.marshal.GetInput(DA, 0) + p1 = self.marshal.GetInput(DA, 1) + p2 = self.marshal.GetInput(DA, 2) + p3 = self.marshal.GetInput(DA, 3) + p4 = self.marshal.GetInput(DA, 4) + p5 = self.marshal.GetInput(DA, 5) +# p6 = self.marshal.GetInput(DA, 6) +# p7 = self.marshal.GetInput(DA, 7) +# result = self.RunScript(p0, p1, p2, p3, p4, p5, p6, p7) + result = self.RunScript(p0, p1, p2, p3, p4, p5) + + if result is not None: + self.marshal.SetOutput(result, DA, 0, True) + + def get_Internal_Icon_24x24(self): + return plan_cartesian_motion_icon + + def RunScript(self, robot, planes, start_configuration, group, max_step, compute): + + key = create_id(self, 'trajectory') + + max_step = float(max_step) if max_step else 0.01 + # NOTE: Read from scene + attached_collision_meshes = None + path_constraints = None + attached_collision_meshes = list(attached_collision_meshes) if attached_collision_meshes else None + + if robot and robot.client and robot.client.is_connected and start_configuration and planes and compute: + frames = [coerce_frame(plane) for plane in planes] + st[key] = robot.plan_cartesian_motion(frames, + start_configuration=start_configuration, + group=group, + options=dict( + max_step=max_step, + path_constraints=path_constraints, + attached_collision_meshes=attached_collision_meshes + )) + + trajectory = st.get(key, None) + + if trajectory and trajectory.fraction < 1.0: + raise Exception('Incomplete trajectory. Fraction={}'.format(trajectory.fraction)) + + return trajectory + GhPython provides a Python script component + + 416 + 248 + + + 684 + 571 + + true + true + 1 + c6ffa12e-83a0-4af7-8681-e213e9c0ba9f + true + true + GhPython Script + Plan Cartesian Motion + + + + + + 879 + 1998 + 180 + 142 + + + 990 + 2069 + + + + + + 6 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + Script variable Python + d1e40e43-b307-4997-95f9-cc5ceb5b1ff8 + robot + robot + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 881 + 2000 + 94 + 23 + + + 929.5 + 2011.5 + + + + + + + + 1 + true + Script input planes. + 595db290-c1cd-47ae-a4a7-4d4b2c12919c + planes + planes + true + 1 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 881 + 2023 + 94 + 23 + + + 929.5 + 2034.5 + + + + + + + + true + Script input start_configuration. + e9a1a984-1028-4f75-90de-96a238f876cb + start_configuration + start_configuration + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 881 + 2046 + 94 + 23 + + + 929.5 + 2057.5 + + + + + + + + true + Script input group. + 0174acbc-9c27-4c7e-9508-fd4153cace00 + group + group + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 881 + 2069 + 94 + 23 + + + 929.5 + 2080.5 + + + + + + + + true + Script input max_step. + 0f1faba3-ea01-41f5-910a-d48118bef748 + max_step + max_step + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 881 + 2092 + 94 + 23 + + + 929.5 + 2103.5 + + + + + + + + true + Script input compute. + 0a27b8d5-ba01-4b82-8eab-e296cf91f0d1 + compute + compute + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 881 + 2115 + 94 + 23 + + + 929.5 + 2126.5 + + + + + + + + Script output trajectory. + 706ebe2f-4fa1-47c4-a7bb-388260bfe9f8 + trajectory + trajectory + false + 0 + + + + + + 1005 + 2000 + 52 + 138 + + + 1031 + 2069 + + + + + + + + + + + + + + f31d8d7a-7536-4ac8-9c96-fde6ecda4d0a + Cluster + + + + + + 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 + + Contains a cluster of Grasshopper components + 1 + 87380de2-badc-4b2b-a438-aac8de443f24 + Cluster + T0CF + false + + + + + 3 + 348f98ef-5f46-4a58-885f-0470a6d4f1f8 + 499c6afc-e204-4b10-aed8-ccc3ae4a7d31 + e6827551-bd5f-4777-9cc2-97e2a1cf285e + a734e7f6-2f8f-4929-916a-9608854f6392 + d0ccacbd-d43e-44d1-95fa-d65b95597d22 + 43cd6740-e900-4cb5-aac6-f6ee8442edb2 + + + + + + 198 + 1999 + 137 + 44 + + + 260 + 2021 + + + + + + 2 + 4f8984c4-7c7a-4d69-b0a2-183cbb330d20 + 3e8ca6be-fda8-4aaf-b5c0-3c54c8bb7312 + 1 + 4f8984c4-7c7a-4d69-b0a2-183cbb330d20 + + + + + Contains a collection of three-dimensional axis-systems + e6827551-bd5f-4777-9cc2-97e2a1cf285e + Plane + tcf_point + true + 0 + + + + + + 200 + 2001 + 45 + 20 + + + 224 + 2011 + + + + + + + + Contains a collection of floating point numbers + 499c6afc-e204-4b10-aed8-ccc3ae4a7d31 + Number + z_offset + true + 0 + 1 + + + + + + 200 + 2021 + 45 + 20 + + + 224 + 2031 + + + + + + 1 + + + + + 1 + {0} + + + + + 0.07 + + + + + + + + + + + Contains a collection of three-dimensional axis-systems + 348f98ef-5f46-4a58-885f-0470a6d4f1f8 + Plane + t0cf_frame + false + 0 + + + + + + 275 + 2001 + 58 + 40 + + + 304 + 2021 + + + + + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + import os +from compas.geometry import Frame +from compas.datastructures import Mesh +from compas_fab.robots import PlanningScene +from compas_fab.robots import Tool +from compas_ghpython.artists import MeshArtist + +HERE = os.path.dirname(ghenv.Component.OnPingDocument().FilePath) + +# create tool from mesh and frame +mesh = Mesh.from_stl(os.path.join(HERE, 'vacuum_gripper.stl')) +frame = Frame([z_offset, 0, 0], [0, 0, 1], [0, 1, 0]) +tool = Tool(mesh, frame, name='vacuum_gripper') +tool_at_origin = MeshArtist(mesh).draw() + +if robot and robot.client and robot.client.is_connected: + scene = PlanningScene(robot) + if attached: + robot.attach_tool(tool) + scene.add_attached_tool() + else: + if robot.attached_tool: + scene.remove_attached_tool() + scene.remove_collision_mesh('attached_tool_link_collision_0') + robot.detach_tool() + + GhPython provides a Python script component + + 456 + 244 + + + 558 + 571 + + true + true + bfe572e7-d997-4c3c-8488-4e03d01804ea + false + true + GhPython Script + Attach tool + + + + + + 227 + 280 + 148 + 76 + + + 289 + 318 + + + + + + 3 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + Script variable Python + 6e80e6d6-8757-4819-8351-1a7c5da7f996 + robot + robot + true + 0 + true + 9a9900f7-c5de-485a-9791-63a5e1930c86 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + 1 + + + + + + 229 + 282 + 45 + 24 + + + 253 + 294 + + + + + + + + true + Script input attached. + 404a4436-fc31-4bbd-846f-0b582b5ffd9c + attached + attached + true + 0 + true + b278407c-79b3-49ef-a2c8-ee682b33d9ef + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 229 + 306 + 45 + 24 + + + 253 + 318 + + + + + + + + true + Script input z_offset. + b7e50fd9-4f43-49fe-8c0a-b5a025756216 + z_offset + z_offset + true + 0 + true + 9a4be73c-3082-4c74-be27-41c7c1688c53 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 229 + 330 + 45 + 24 + + + 253 + 342 + + + + + + + + Script output tool_at_origin. + ec3d9765-86ad-4ef4-bb37-6e2408651259 + tool_at_origin + tool_at_origin + false + 0 + + + + + + 304 + 282 + 69 + 72 + + + 338.5 + 318 + + + + + + + + + + + + + + 2e78987b-9dfb-42a2-8b76-3923ac8bd91a + Boolean Toggle + + + + + Boolean (true/false) toggle + b278407c-79b3-49ef-a2c8-ee682b33d9ef + Boolean Toggle + Attach + false + 0 + true + + + + + + 32 + 307 + 98 + 22 + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + bfe572e7-d997-4c3c-8488-4e03d01804ea + b278407c-79b3-49ef-a2c8-ee682b33d9ef + 6fe2e9d2-130c-4a02-b347-a1c6b831fc5a + 9a4be73c-3082-4c74-be27-41c7c1688c53 + 4 + 3dd78fb5-3c65-4715-b2db-b9489d44fd71 + Group + + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + true + + 32.62092 + 250.852 + + + 112.3988 + 250.852 + + + 112.3988 + 280.6811 + + + 32.62092 + 280.6811 + + A quick note + Arial + 6fe2e9d2-130c-4a02-b347-a1c6b831fc5a + false + Scribble + Scribble + 41 + Tool + + + + + + 27.62092 + 245.852 + 89.77783 + 39.82909 + + + 32.62092 + 250.852 + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 9a4be73c-3082-4c74-be27-41c7c1688c53 + Number Slider + z_offset + false + 0 + + + + + + 32 + 330 + 170 + 20 + + + 32.6893 + 330.5383 + + + + + + 3 + 1 + 0 + 0.2 + -0.1 + 0 + 0.07 + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + import os +from compas.geometry import Frame +from compas.datastructures import Mesh +from compas_fab.robots import PlanningScene +from compas_fab.robots import CollisionMesh +from compas_ghpython.artists import MeshArtist +from compas_rhino.geometry import RhinoMesh + +if robot and robot.client and robot.client.is_connected: + static_cm_name = 'static_objects' + scene = PlanningScene(robot) + scene.remove_collision_mesh(static_cm_name) + if meshes: + for mesh in meshes: + mesh = RhinoMesh.from_geometry(mesh).to_compas() + cm = CollisionMesh(mesh, static_cm_name) + scene.append_collision_mesh(cm) + + GhPython provides a Python script component + + 156 + 156 + + + 558 + 571 + + true + true + 67e77c02-1764-4e11-bf1d-4203f550692e + false + true + GhPython Script + Python + + + + + + 165 + 438 + 71 + 52 + + + 222 + 464 + + + + + + 2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 0 + + + + + true + Script variable Python + d8842ce0-d92a-4fcf-8634-a387177ebe33 + robot + robot + true + 0 + true + 9a9900f7-c5de-485a-9791-63a5e1930c86 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + 1 + + + + + + 167 + 440 + 40 + 24 + + + 188.5 + 452 + + + + + + + + 1 + true + Script input meshes. + 90e52a89-cf0f-4c9d-ae82-b73d0248a98b + meshes + meshes + true + 1 + true + cec5af33-7de8-45a7-8a88-c746edfb38bd + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 167 + 464 + 40 + 24 + + + 188.5 + 476 + + + + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + 67e77c02-1764-4e11-bf1d-4203f550692e + d366a040-055c-47c4-93f0-6e444f072d66 + cec5af33-7de8-45a7-8a88-c746edfb38bd + 3 + c3460314-a9f5-42ea-a36d-d007144084a3 + Group + + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + true + + 31.67443 + 398.1774 + + + 294.7911 + 398.1774 + + + 294.7911 + 436.6549 + + + 31.67443 + 436.6549 + + A quick note + Arial + d366a040-055c-47c4-93f0-6e444f072d66 + false + Scribble + Scribble + 41 + Static objects + + + + + + 26.67443 + 393.1774 + 273.1167 + 48.47754 + + + 31.67443 + 398.1774 + + + + + + + + + + 1e936df3-0eea-4246-8549-514cb8862b7a + Mesh + + + + + Contains a collection of polygon meshes + true + cec5af33-7de8-45a7-8a88-c746edfb38bd + Mesh + Mesh + false + 0 + + + + + + 38 + 464 + 50 + 20 + + + 63.94705 + 474.8177 + + + + + + 1 + + + + + 1 + {0} + + + + + + Y2BkYGD4DwQgGgR4mIBEeFBGZl6+c35ubn6ejkJYalFxZn6erZmesZGekYGxiYGekaGBgZGOgnNpTklpUaptXmppSVFijo5CQGlSTmayd2plSH52ap6tqamRkYVhqqV5srmpqamxASvIFmGw4Xruqfm5qSVFlXq+qcUZLEBx9jKIPVyJRckZmWWpxim5nPkFqXl5pUVJxSwpiSWJIEUcHBxMICcKqDMw2ABppoqGHk5mIIMfRCixAkV+1TMxiLFCvPP7PxODCNRrT65c93N/eVlw/1MGgWZGpQ+6O6Vj/gDl77FA5C00gIQMAxr48t4exgxfeNdFLfSdvdTLT+IWXRIHvOUj+7N1f9q/2NSzgOX59/38PwQ4fGXv2KMb4cPmsT87Snh/5qsH+/IveNk/FM2GqmmwR8L7kTCKGCjUGBkaGBxKoAbCfMTAiG4VEOg6y7x+ZCaF5goJByxKUUC7y3MvifBtYH1MCOEH9gyMdkHy2jDrGBlYWJiYWVnZ2bi4ODi5uXl5BAT4+AUFhYXExERExcVlZCUkZCTl5eWkZGVl5OXk5OSlpVUUVFVV1BUV1VSAtJq6upqyujojCysrEysLCzsXNzcHNxcXr4CgIJ+ggICwmLi4iLiYmJysjIyaqpLSA6Cl2R+488EB0Ax1VMWtz2mfb8wXVd0zn5Fjz8I3PeH83xpv8Ltsfpv4SMHM50/pzH2yPjJHji23e9803dZH5hhb5/mXN1J4hds3flzJvjHxXcvGxEcG3w/c+HGl+vEH/RO8BoUS0rP3TzjrUqa+aabBd4Xfgjfnnihb2K67af+Fv30y/04kdsjwnahj3MgYsGXfT+vrOxaC3NU79ddpsLv04e5KTsi4cZ6BfcoGSamGE/OKzGJ6nMxunPkrMCvI7E7tloRgxTeFmxl3tVnc1P8SKuQANOPij6+5YDPmw83wPbeX95ADD2tCt56vl9W0HUydx/xaj3D1TJQ+EDKzeZquROM01qCgCZOY/uQUF1x6+XJzrb2Ly9LVOY7fr0/13m7Qw3N9W+KZs7/XKiy/GphRsfm20ZpM3v9rLy/+Xn3yfoxFzOWrf98qlh8+9r40us10baLSyUrN6YEv1iSq5HytzP2/03O1ebr9fvWnH77s436euL6/52e8bc8/9nuOIQePuu79gS8JNQDTTfbk+zJg/8yD+2dy1U/PO4u8HzEwi3g4/vxjz2JRk/r+hvoby//7cpoEYuSOtZ98z1t1Q+aeNtf09o+dV/k39jOfrePb8Ue6efJ+9dinzacP/zjy6vu0/jfnr/3dKa/G/3jxrn7Os7U+Lq/bucwNFjSxhfzVv/hlv8v18x+Sgs8zTXt+//vimcybz8uBlK5uPmF//z2robyzrc89fq3+WPu/b9kZJkqdz/201qIL5NIlSLkJW45Kq2b+B2F9wMjb2AH11YHcZaNU3MsIdWDCSYaXwMKBwcE3+xGIZgAWPCD6AG/US7Che5Lewg23ebsv6n89UwOMz02craNgFIyCUTAKhgUAAA== + + 00000000-0000-0000-0000-000000000000 + + + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + 9bde434b-367e-491f-9f01-040b116c4562 + 6a7e4d1a-ceb2-4c60-bd73-b1fd7e57a88d + 453254b0-f451-4808-a6c8-f678281679fd + c789e886-ac48-44a7-8696-71249b62e335 + ffdf9a6f-f4a6-417e-96df-c38d59b6a4da + 4bbbdf99-354b-448e-8eb7-59249cc4e3d0 + b6ce1f01-cf45-408d-b8ba-45a08f564742 + 562c0dcf-a89c-4f0e-9470-6e8b91f11f7e + 8 + 4450c285-aa9e-4d1e-af7d-59d55d9bac80 + Group + + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + true + + 59.45462 + 1550.173 + + + 168.7212 + 1550.173 + + + 168.7212 + 1580.002 + + + 59.45462 + 1580.002 + + A quick note + Arial + 562c0dcf-a89c-4f0e-9470-6e8b91f11f7e + false + Scribble + Scribble + 41 + Home + + + + + + 54.45462 + 1545.173 + 119.2666 + 39.8291 + + + 59.45462 + 1550.173 + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + a17a3498-e042-4db0-b3e7-eca2f875e5b8 + Number Slider + approach_offset + false + 0 + + + + + + 55 + 1481 + 211 + 20 + + + 55.94337 + 1481.979 + + + + + + 3 + 1 + 0 + 0.2 + 0 + 0 + 0.05 + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + 726245b8-cd81-4793-93c4-5a74c6fadea6 + a17a3498-e042-4db0-b3e7-eca2f875e5b8 + 2 + ae42bcb2-a7c7-4a20-b4bb-de4ee824aa60 + Group + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;94;183;255 + + A group of Grasshopper objects + edaa4174-c047-4295-b443-89dc75c38874 + d59210ff-fb0c-47ac-88e4-bfb3bdd17472 + fb12c2e2-d39a-4f89-8110-71d16b686ca3 + 27ff0d44-37bd-4d39-a1da-061f75bbf757 + a4a20321-c7d8-4f60-83e2-fc6f1521f4ff + e8574466-52dd-40f6-a8d5-e57e15b8abec + 6 + 81466600-b7f2-43d6-ac12-e76f57c6909c + Group + + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + true + + 1362.669 + 416.7794 + + + 1784.02 + 416.7794 + + + 1784.02 + 454.7164 + + + 1362.669 + 454.7164 + + A quick note + Arial + fb12c2e2-d39a-4f89-8110-71d16b686ca3 + false + Scribble + Scribble + 41 + Cartesian pickup plan + + + + + + 1357.669 + 411.7794 + 431.3511 + 47.93701 + + + 1362.669 + 416.7794 + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + true + + 11.68259 + -76.21291 + + + 142.6836 + -76.21291 + + + 142.6836 + -43.45168 + + + 11.68259 + -43.45168 + + A quick note + Arial + b4428083-5df1-433c-b590-4df513e94c3b + false + Scribble + Scribble + 45 + INPUT + + + + + + 6.68259 + -81.21291 + 141.001 + 42.76123 + + + 11.68259 + -76.21291 + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + true + + 1054.422 + -66.96204 + + + 1199.749 + -66.96204 + + + 1199.749 + -33.62952 + + + 1054.422 + -33.62952 + + A quick note + Arial + 4c6e9558-0e0e-4605-a5de-a63e8b78f29f + false + Scribble + Scribble + 45 + SOLVE + + + + + + 1049.422 + -71.96204 + 155.3271 + 43.33252 + + + 1054.422 + -66.96204 + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + true + + 2074.339 + -58.86444 + + + 2256.448 + -58.86444 + + + 2256.448 + -25.55389 + + + 2074.339 + -25.55389 + + A quick note + Arial + a2e7fc56-ff95-41e7-b42d-cf6f1bfac116 + false + Scribble + Scribble + 45 + OUTPUT + + + + + + 2069.339 + -63.86444 + 192.1094 + 43.31055 + + + 2074.339 + -58.86444 + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + import Grasshopper +import System +from ghpythonlib.componentbase import executingcomponent as component +from scriptcontext import sticky as st + +from compas_ghpython import draw_frame +from compas_fab.ghpython.components import create_id +from compas_fab.ghpython.components import coerce_frame +from compas_fab.ghpython.components.icons import trajectory_visualize_icon + +class TrajectoryVisualize(component): + def SetUpParam(self, p, name, nickname, description): + p.Name = name + p.NickName = nickname + p.Description = description + p.Optional = True + + def RegisterInputParams(self, pManager): + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "robot", "robot", "The robot.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_String() + self.SetUpParam(p, "group", "group", "The planning group for which this trajectory was planned.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "trajectory", "trajectory", "The calculated trajectory.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + def RegisterOutputParams(self, pManager): + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "start_configuration", "start_configuration", "The start configuration of the trajectory.") + self.Params.Output.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "configurations", "configurations", "The full configurations along the trajectory.") + self.Params.Output.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_Number() + self.SetUpParam(p, "fraction", "fraction", "Indicates the percentage of requested trajectory that was calculated, e.g. 1 means the full trajectory was found.") + self.Params.Output.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_Number() + self.SetUpParam(p, "time", "time", "The time which is needed to execute that trajectory at full speed.") + self.Params.Output.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_Plane() + self.SetUpParam(p, "planes", "planes", "The planes of the robot's end-effector.") + self.Params.Output.Add(p) + + def SolveInstance(self, DA): + p0 = self.marshal.GetInput(DA, 0) + p1 = self.marshal.GetInput(DA, 1) + p2 = self.marshal.GetInput(DA, 2) + result = self.RunScript(p0, p1, p2) + + if result is not None: + if not hasattr(result, '__getitem__'): + self.marshal.SetOutput(result, DA, 0, True) + else: + self.marshal.SetOutput(result[0], DA, 0, True) + self.marshal.SetOutput(result[1], DA, 1, True) + self.marshal.SetOutput(result[2], DA, 2, True) + self.marshal.SetOutput(result[3], DA, 3, True) + self.marshal.SetOutput(result[4], DA, 4, True) + + def get_Internal_Icon_24x24(self): + return trajectory_visualize_icon + + def RunScript(self, robot, group, trajectory): + start_configuration = None + configurations = [] + fraction = 0. + time = 0. + + planes = [] + positions = [] + velocities = [] + accelerations = [] + + if robot and trajectory: + group = group or robot.main_group_name + + for c in trajectory.points: + configurations.append(robot.merge_group_with_full_configuration(c, trajectory.start_configuration, group)) + frame = robot.forward_kinematics(c, group, options=dict(solver='model')) + planes.append(draw_frame(frame)) + positions.append(c.positions) + velocities.append(c.velocities) + accelerations.append(c.accelerations) + + start_configuration = trajectory.start_configuration + fraction = trajectory.fraction + time = trajectory.time_from_start + + # return outputs if you have them; here I try it for you: + return (start_configuration, configurations, fraction, time, planes) + + GhPython provides a Python script component + + 416 + 248 + + + 684 + 571 + + true + true + 1 + e37b5872-2136-4007-9701-3851c1cc4a87 + true + true + GhPython Script + Visualize Trajectory + + + + + + 1115 + 1997 + 180 + 129 + + + 1181 + 2062 + + + + + + 3 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 5 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + Script variable Python + 6aa301b4-6cee-4345-bd30-6f3863f96203 + robot + robot + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1117 + 1999 + 49 + 41 + + + 1143 + 2019.833 + + + + + + + + true + Script input group. + fede8c15-1fd3-43a7-a90c-d3fe3da5daad + group + group + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1117 + 2040 + 49 + 42 + + + 1143 + 2061.5 + + + + + + + + true + Script input trajectory. + 120bae85-d34a-4caf-8ea5-953d9524ed70 + trajectory + trajectory + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1117 + 2082 + 49 + 42 + + + 1143 + 2103.167 + + + + + + + + Script output start_configuration. + 7dade1d5-4247-400d-9bd7-eb4b0b06927f + start_configuration + start_configuration + false + 0 + + + + + + 1196 + 1999 + 97 + 25 + + + 1244.5 + 2011.5 + + + + + + + + Script output configurations. + 4d980fad-4382-4c12-8ffa-80fb83ba449a + configurations + configurations + false + 0 + + + + + + 1196 + 2024 + 97 + 25 + + + 1244.5 + 2036.5 + + + + + + + + Script output fraction. + cc787af3-0b87-42c5-9e1a-1aff8eb7520e + fraction + fraction + false + 0 + + + + + + 1196 + 2049 + 97 + 25 + + + 1244.5 + 2061.5 + + + + + + + + Script output time. + 121fb4b2-8d79-43d2-bc51-0b7e5232d7a9 + time + time + false + 0 + + + + + + 1196 + 2074 + 97 + 25 + + + 1244.5 + 2086.5 + + + + + + + + Script output planes. + 11b58743-03db-4a58-80c9-8836f9ae9411 + planes + planes + false + 0 + + + + + + 1196 + 2099 + 97 + 25 + + + 1244.5 + 2111.5 + + + + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;94;183;255 + + A group of Grasshopper objects + 7e5ecafa-f262-4bc9-bf78-cdd729868c56 + 75f40b4a-213f-4c07-bcdf-183c023e5064 + 5843fe19-3312-4902-90b0-4907edaaea8e + 7625ad28-8f4f-447a-8b20-cf7423d5b247 + de06f11d-053b-436f-a4b7-ec786a0dc23b + 8f47cb0e-8ca4-47ac-bf46-da24d5601bb1 + adff66ab-0602-4f7d-b92e-faf711f84523 + f6427ccb-25e5-49e1-b12d-f3a8f65ae3f4 + 8f786953-34c8-47f7-9814-b8a909da5855 + 9 + 236cda68-3616-4c47-a812-e2e5c94e5667 + Group + + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + true + + 1363.55 + 707.3336 + + + 1658.578 + 707.3336 + + + 1658.578 + 744.7701 + + + 1363.55 + 744.7701 + + A quick note + Arial + 7625ad28-8f4f-447a-8b20-cf7423d5b247 + false + Scribble + Scribble + 41 + Placement plan + + + + + + 1358.55 + 702.3336 + 305.0278 + 47.43652 + + + 1363.55 + 707.3336 + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + import Grasshopper +import System +from ghpythonlib.componentbase import executingcomponent as component +from scriptcontext import sticky as st + +from compas_ghpython import draw_frame +from compas_fab.ghpython.components import create_id +from compas_fab.ghpython.components import coerce_frame +from compas_fab.ghpython.components.icons import trajectory_visualize_icon + +class TrajectoryVisualize(component): + def SetUpParam(self, p, name, nickname, description): + p.Name = name + p.NickName = nickname + p.Description = description + p.Optional = True + + def RegisterInputParams(self, pManager): + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "robot", "robot", "The robot.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_String() + self.SetUpParam(p, "group", "group", "The planning group for which this trajectory was planned.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "trajectory", "trajectory", "The calculated trajectory.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + def RegisterOutputParams(self, pManager): + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "start_configuration", "start_configuration", "The start configuration of the trajectory.") + self.Params.Output.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "configurations", "configurations", "The full configurations along the trajectory.") + self.Params.Output.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_Number() + self.SetUpParam(p, "fraction", "fraction", "Indicates the percentage of requested trajectory that was calculated, e.g. 1 means the full trajectory was found.") + self.Params.Output.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_Number() + self.SetUpParam(p, "time", "time", "The time which is needed to execute that trajectory at full speed.") + self.Params.Output.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_Plane() + self.SetUpParam(p, "planes", "planes", "The planes of the robot's end-effector.") + self.Params.Output.Add(p) + + def SolveInstance(self, DA): + p0 = self.marshal.GetInput(DA, 0) + p1 = self.marshal.GetInput(DA, 1) + p2 = self.marshal.GetInput(DA, 2) + result = self.RunScript(p0, p1, p2) + + if result is not None: + if not hasattr(result, '__getitem__'): + self.marshal.SetOutput(result, DA, 0, True) + else: + self.marshal.SetOutput(result[0], DA, 0, True) + self.marshal.SetOutput(result[1], DA, 1, True) + self.marshal.SetOutput(result[2], DA, 2, True) + self.marshal.SetOutput(result[3], DA, 3, True) + self.marshal.SetOutput(result[4], DA, 4, True) + + def get_Internal_Icon_24x24(self): + return trajectory_visualize_icon + + def RunScript(self, robot, group, trajectory): + start_configuration = None + configurations = [] + fraction = 0. + time = 0. + + planes = [] + positions = [] + velocities = [] + accelerations = [] + + if robot and trajectory: + group = group or robot.main_group_name + + for c in trajectory.points: + configurations.append(robot.merge_group_with_full_configuration(c, trajectory.start_configuration, group)) + frame = robot.forward_kinematics(c, group, options=dict(solver='model')) + planes.append(draw_frame(frame)) + positions.append(c.positions) + velocities.append(c.velocities) + accelerations.append(c.accelerations) + + start_configuration = trajectory.start_configuration + fraction = trajectory.fraction + time = trajectory.time_from_start + + # return outputs if you have them; here I try it for you: + return (start_configuration, configurations, fraction, time, planes) + + GhPython provides a Python script component + + 416 + 248 + + + 684 + 571 + + true + true + true + 1 + a4a20321-c7d8-4f60-83e2-fc6f1521f4ff + true + true + GhPython Script + Visualize Trajectory + + + + + + 1830 + 471 + 180 + 129 + + + 1896 + 536 + + + + + + 3 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 5 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + Script variable Python + 6e6d3e65-b6e0-43b0-b415-b43dca813531 + robot + robot + true + 0 + true + 9a9900f7-c5de-485a-9791-63a5e1930c86 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + 1 + + + + + + 1832 + 473 + 49 + 41 + + + 1858 + 493.8333 + + + + + + + + true + Script input group. + c36175cb-fc64-4b4a-8d5e-79c9cdd01900 + group + group + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1832 + 514 + 49 + 42 + + + 1858 + 535.5 + + + + + + + + true + Script input trajectory. + 04c836a6-6b1a-447b-8bb9-cdbef0ca71f3 + trajectory + trajectory + true + 0 + true + 7d158313-5514-47eb-a080-3408700613a7 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1832 + 556 + 49 + 42 + + + 1858 + 577.1666 + + + + + + + + Script output start_configuration. + bdb96450-90c7-411f-ade5-cbf6343d0364 + start_configuration + start_configuration + false + 0 + + + + + + 1911 + 473 + 97 + 25 + + + 1959.5 + 485.5 + + + + + + + + Script output configurations. + 018e7fe5-7b7b-4795-a848-46b5058d6488 + configurations + configurations + false + 0 + + + + + + 1911 + 498 + 97 + 25 + + + 1959.5 + 510.5 + + + + + + + + Script output fraction. + 5af05567-125f-469e-b43d-ed709d411798 + fraction + fraction + false + 0 + + + + + + 1911 + 523 + 97 + 25 + + + 1959.5 + 535.5 + + + + + + + + Script output time. + 78f0b510-c78e-4f9d-92c3-f797684b6d15 + time + time + false + 0 + + + + + + 1911 + 548 + 97 + 25 + + + 1959.5 + 560.5 + + + + + + + + Script output planes. + ffbf4940-429d-4335-9570-ec2fe3f8f6e0 + planes + planes + false + 0 + + + + + + 1911 + 573 + 97 + 25 + + + 1959.5 + 585.5 + + + + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + 8b6d85ec-b58c-408c-b51f-afb7d6488efb + 1d7ea18d-2d85-4fc4-9019-b402b6066d20 + 99564794-bc9c-42c6-b727-df16f105f7df + 53fb2f80-0154-40ce-bf8e-c07a38a48af4 + b9a3cd2f-7b8f-496e-b671-e1ccdeb5ede1 + 5 + 6065bb2b-8198-4a8d-86f0-16c82a490851 + Group + + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + true + + 2195.175 + 421.2417 + + + 2459.292 + 421.2417 + + + 2459.292 + 451.6113 + + + 2195.175 + 451.6113 + + A quick note + Arial + 1d7ea18d-2d85-4fc4-9019-b402b6066d20 + false + Scribble + Scribble + 41 + Save to JSON + + + + + + 2190.175 + 416.2417 + 274.1177 + 40.3696 + + + 2195.175 + 421.2417 + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + # Mac will not automatically do this so, here we go +import os +import sys +HERE = os.path.dirname(ghenv.Component.OnPingDocument().FilePath) +if HERE not in sys.path: sys.path.append(HERE) + +## Start assembly definition +from assembly import Assembly +from assembly import Element + +from compas.datastructures import Mesh +from compas.geometry import Translation +from compas_fab.ghpython.components import coerce_frame + + +assembly = Assembly() + +assembly.attributes['home_config'] = home_config +assembly.attributes['element'] = element +assembly.attributes['place_tolerance'] = place_tolerance +assembly.approach_offset = approach_offset + +source_element = assembly.attributes['element'] +assembly.pick_t0cf_frame = coerce_frame(pick_t0cf_frame) +place_t0cf_frames = [coerce_frame(f) for f in place_t0cf_frames] + +for key, frame in enumerate(robot.from_t0cf_to_tcf(place_t0cf_frames)): + x, y, z = 0, 0, (source_element.height / 2) + + frame = frame.transformed(Translation.from_vector([x, y, z])) + approach_t0cf_frame = frame.transformed(Translation.from_vector([0, 0, approach_offset])) + element = Element(frame=frame, + approach_frame=approach_t0cf_frame, + geometry_at_origin=Mesh.from_shape(source_element)) + assembly.add_element(element, key) + +pickup_t0cf_frames = assembly.pick_t0cf_frames() + GhPython provides a Python script component + + 333 + 40 + + + 558 + 571 + + true + true + 1 + feba3733-a75a-459f-a072-2fde91c330ec + false + true + GhPython Script + Create assembly + + + + + + 989 + 298 + 225 + 144 + + + 1097 + 370 + + + + + + 7 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 2 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + Script variable Create assembly + 7a7f31b2-a200-4298-8ad8-18abd1ba8bb6 + robot + robot + true + 0 + true + 9a9900f7-c5de-485a-9791-63a5e1930c86 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 991 + 300 + 91 + 20 + + + 1038 + 310 + + + + + + + + true + Script input pick_t0cf_frame. + f80925ae-2885-4d98-b158-e01ce2c0cdca + pick_t0cf_frame + pick_t0cf_frame + true + 0 + true + f41be9bc-bcf0-410b-a0ac-8575f4a7ba6b + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 991 + 320 + 91 + 20 + + + 1038 + 330 + + + + + + + + 1 + true + Script input place_t0cf_frames. + ad62f98b-1dcd-4277-aa16-1d3a01faa2b3 + place_t0cf_frames + place_t0cf_frames + true + 1 + true + af025e60-14ba-4c28-9dc9-21f04af24737 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 991 + 340 + 91 + 20 + + + 1038 + 350 + + + + + + + + true + Script input approach_offset. + 37860aa3-99ed-47f5-a957-0d5fee8c6ada + approach_offset + approach_offset + true + 0 + true + a17a3498-e042-4db0-b3e7-eca2f875e5b8 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 991 + 360 + 91 + 20 + + + 1038 + 370 + + + + + + + + true + Script input element. + 591065d8-7de7-4c49-92a5-428fb7867dea + element + element + true + 0 + true + e42c965a-b5a0-4604-b779-6619359cf9a2 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 991 + 380 + 91 + 20 + + + 1038 + 390 + + + + + + + + true + Script input home_config. + dd379b1f-c92c-4632-8cd1-c6064593db46 + home_config + home_config + true + 0 + true + f956b690-65c4-4b82-ac9a-488e4afed703 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 991 + 400 + 91 + 20 + + + 1038 + 410 + + + + + + + + true + Script input place_tolerance. + b32403d0-6ca1-4dc6-9aa2-85ba7cb04271 + place_tolerance + place_tolerance + true + 0 + true + 0 + 39fbc626-7a01-46ab-a18e-ec1c0c41685b + + + + + + 991 + 420 + 91 + 20 + + + 1038 + 430 + + + + + + 1 + + + + + 1 + {0} + + + + + Grasshopper.Kernel.Types.GH_Number + 0.008 + + + + + + + + + + + Script output assembly. + 1da00192-179a-4379-a6a7-562c2d4250d8 + assembly + assembly + false + 0 + + + + + + 1112 + 300 + 100 + 70 + + + 1162 + 335 + + + + + + + + Script output pickup_t0cf_frames. + 7709d326-8e7a-49da-a1d7-d642545c5ad8 + pickup_t0cf_frames + pickup_t0cf_frames + false + 0 + + + + + + 1112 + 370 + 100 + 70 + + + 1162 + 405 + + + + + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + import os +import json +import compas + +HERE = os.path.dirname(ghenv.Component.OnPingDocument().FilePath) +rfile = os.path.join(HERE, 'assembly.json') + +# We are storing a full assembly representation +if save and assembly: + compas.json_dump(assembly, rfile) + + # Pretty formatting because OCD + with open(rfile, 'r+') as rf: + data = json.load(rf) + rf.seek(0) + json.dump(data, rf, indent=4, sort_keys=True) + + GhPython provides a Python script component + + 611 + 195 + + + 749 + 767 + + true + false + 1 + 53fb2f80-0154-40ce-bf8e-c07a38a48af4 + false + true + GhPython Script + Save + + + + + + 2355 + 480 + 103 + 44 + + + 2420 + 502 + + + + + + 2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 2 + 3ede854e-c753-40eb-84cb-b48008f14fd4 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + Script variable Save + 22cc596b-18cf-4a04-b38e-1972d766d077 + assembly + assembly + true + 0 + true + 1da00192-179a-4379-a6a7-562c2d4250d8 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + 2 + + + + + + 2357 + 482 + 48 + 20 + + + 2382.5 + 492 + + + + + + + + true + Script input save. + 4eb648c5-bdbd-45e0-9683-a7f711e507a3 + save + save + true + 0 + true + b9a3cd2f-7b8f-496e-b671-e1ccdeb5ede1 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 2357 + 502 + 48 + 20 + + + 2382.5 + 512 + + + + + + + + The execution information, as output and error streams + 8ecdb579-37d6-47a7-affa-3189cb96d870 + out + out + false + 0 + + + + + + 2435 + 482 + 21 + 20 + + + 2445.5 + 492 + + + + + + + + Script output a. + a867370a-5c9b-4dd9-a8c0-5820c5e89a9e + a + a + false + 0 + + + + + + 2435 + 502 + 21 + 20 + + + 2445.5 + 512 + + + + + + + + + + + + + + a8b97322-2d53-47cd-905e-b932c3ccd74e + Button + + + + + Button object with two values + False + True + b9a3cd2f-7b8f-496e-b671-e1ccdeb5ede1 + Button + Button + false + 0 + + + + + + 2203 + 501 + 99 + 22 + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;45;57;255 + + A group of Grasshopper objects + feba3733-a75a-459f-a072-2fde91c330ec + 64bc0273-8198-45b4-a87d-4429075d5539 + 2 + 9195d8d0-1443-46c5-92e7-eff228240756 + Group + + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + true + + 922.8066 + 266.6034 + + + 1115.855 + 266.6034 + + + 1115.855 + 304.5804 + + + 922.8066 + 304.5804 + + A quick note + Arial + 64bc0273-8198-45b4-a87d-4429075d5539 + false + Scribble + Scribble + 41 + Assembly + + + + + + 917.8066 + 261.6034 + 203.0483 + 47.97705 + + + 922.8066 + 266.6034 + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + from compas.datastructures import Mesh +from compas_fab.robots import AttachedCollisionMesh +from compas_fab.robots import CollisionMesh +from compas_fab.robots import PlanningScene + + +if robot: + scene = PlanningScene(robot) + scene.remove_collision_mesh('built_elements') + + a = [] + for key in assembly.nodes(): + # Linear order assumed here! + if key >= i: break + element = assembly.element(key) + cm = CollisionMesh(element.geometry_at_placement, 'built_elements') + scene.append_collision_mesh(cm) + + # Setup attached element + scene.remove_attached_collision_mesh('brick') + scene.remove_collision_mesh('brick') + + ee_link_name = robot.get_end_effector_link_name() + if robot.attached_tool: + brick_frame = robot.attached_tool.frame.copy() + else: + brick_frame = Frame.worldXY() + + # Centered origin, get half + element = assembly.attributes['element'] + brick_frame.point.x += element.height / 2 + element = Mesh.from_shape(element) + brick_acm = AttachedCollisionMesh(CollisionMesh(element, 'brick', brick_frame), ee_link_name) + scene.add_attached_collision_mesh(brick_acm) + + GhPython provides a Python script component + + 668 + 417 + + + 558 + 571 + + true + true + 1 + de06f11d-053b-436f-a4b7-ec786a0dc23b + false + true + GhPython Script + ROS scene + + + + + + 1458 + 754 + 79 + 74 + + + 1523 + 791 + + + + + + 3 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 0 + + + + + true + Script variable Python + 4b9846a3-bb7f-4264-95f2-ca4a6b0cd663 + robot + robot + true + 0 + true + 9a9900f7-c5de-485a-9791-63a5e1930c86 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1460 + 756 + 48 + 23 + + + 1485.5 + 767.6667 + + + + + + + + true + Script input assembly. + fcadabc1-cbe4-4076-ab64-415f1980b0c7 + assembly + assembly + true + 0 + true + 1da00192-179a-4379-a6a7-562c2d4250d8 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1460 + 779 + 48 + 23 + + + 1485.5 + 791 + + + + + + + + true + Script input i. + f7279d35-cbf1-4fe4-bea8-6090b1076c8f + i + i + true + 0 + true + 3cf3489b-a232-4df1-af3a-85d4e2b9062d + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1460 + 802 + 48 + 24 + + + 1485.5 + 814.3334 + + + + + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + import math +from compas.geometry import Frame +from compas.geometry import Transformation +from compas.geometry import Translation +from compas_ghpython.artists import MeshArtist +from compas_fab.robots import Configuration +from compas_fab.robots import PlanningScene +from compas_fab.robots import AttachedCollisionMesh +from compas_fab.robots import CollisionMesh +from compas_fab.ghpython.components import coerce_frame +from scriptcontext import sticky as st + +key = '{}_{}'.format('trajectory', ghenv.Component.InstanceGuid) +place_key = '{}_{}'.format('place_trajectory', ghenv.Component.InstanceGuid) + +if assembly and robot and compute: + start_configuration = robot.zero_configuration() + try: + start_configuration.values = assembly.pick_trajectory.points[-1].values + except: + pass + + e = assembly.element(i) + place_t0cf_frame, approach_t0cf_frame = robot.from_tcf_to_t0cf([e.frame, e.approach_frame]) + + # Apply place tolerance + x, y, z = 0, 0, assembly.attributes['place_tolerance'] + place_t0cf_frame = place_t0cf_frame.transformed(Translation.from_vector([x, y, z])) + + tolerance_position = 0.001 + tolerance_axes = [math.radians(1)] * 3 + + # create goal constraints from frame + goal_constraints = robot.constraints_from_frame(approach_t0cf_frame, + tolerance_position, + tolerance_axes, + group) + + trajectory = robot.plan_motion(goal_constraints, + start_configuration, + group, + options=dict(planner_id='RRTstarkConfigDefault')) + st[key] = trajectory + + frames = [] + frames.append(approach_t0cf_frame) + frames.append(place_t0cf_frame) + + start_configuration = robot.zero_configuration() + start_configuration.values = trajectory.points[-1].values + + place_trajectory = robot.plan_cartesian_motion(frames, + start_configuration, + group=group, + options=dict( + max_step=0.01, + avoid_collisions=True, + )) + + if place_trajectory and place_trajectory.fraction < 1.0: + raise Exception('Incomplete trajectory. Fraction={}'.format(place_trajectory.fraction)) + + st[place_key] = place_trajectory + + # Merge and store + e.trajectory = trajectory.points + place_trajectory.points + +trajectory = st.get(key) +place_trajectory = st.get(place_key) + GhPython provides a Python script component + + 587 + 131 + + + 975 + 571 + + true + true + 1 + adff66ab-0602-4f7d-b92e-faf711f84523 + false + true + GhPython Script + Plan placement + + + + + + 1680 + 767 + 165 + 104 + + + 1745 + 819 + + + + + + 5 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 3 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + Script variable Exercise + 25e58d2e-2361-44ae-bc2a-d5338a29b538 + robot + robot + true + 0 + true + 9a9900f7-c5de-485a-9791-63a5e1930c86 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + 1 + + + + + + 1682 + 769 + 48 + 20 + + + 1707.5 + 779 + + + + + + + + true + Script input group. + 41022fae-8d81-4161-a37e-26f275698af0 + group + group + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1682 + 789 + 48 + 20 + + + 1707.5 + 799 + + + + + + + + true + Script input assembly. + 7cf17cfa-9ee1-451e-98eb-87b65f0d2f89 + assembly + assembly + true + 0 + true + 1da00192-179a-4379-a6a7-562c2d4250d8 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + 1 + + + + + + 1682 + 809 + 48 + 20 + + + 1707.5 + 819 + + + + + + + + true + Script input i. + ff9cce0c-8009-4e3d-8e88-457bc393484f + i + i + true + 0 + true + 3cf3489b-a232-4df1-af3a-85d4e2b9062d + 1 + 48d01794-d3d8-4aef-990e-127168822244 + 1 + + + + + + 1682 + 829 + 48 + 20 + + + 1707.5 + 839 + + + + + + + + true + Script input compute. + 57db92fa-e774-4620-aed9-31657efe84e2 + compute + compute + true + 0 + true + f6427ccb-25e5-49e1-b12d-f3a8f65ae3f4 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1682 + 849 + 48 + 20 + + + 1707.5 + 859 + + + + + + + + Script output trajectory. + dcaa9955-fb1a-4768-ae11-ebfb9edc6a8f + trajectory + trajectory + false + 0 + + + + + + 1760 + 769 + 83 + 33 + + + 1801.5 + 785.6667 + + + + + + + + Script output place_trajectory. + 455c77c0-ca36-4d93-b1b3-f34bda4eb365 + place_trajectory + place_trajectory + false + 0 + + + + + + 1760 + 802 + 83 + 33 + + + 1801.5 + 819 + + + + + + + + Script output a. + 73cf7da4-7d1a-4a88-af31-97cf97c54e95 + a + a + false + 0 + + + + + + 1760 + 835 + 83 + 34 + + + 1801.5 + 852.3334 + + + + + + + + + + + + + + a8b97322-2d53-47cd-905e-b932c3ccd74e + Button + + + + + Button object with two values + False + True + f6427ccb-25e5-49e1-b12d-f3a8f65ae3f4 + Button + Button + false + 0 + + + + + + 1540 + 848 + 99 + 22 + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + import Grasshopper +import System +from ghpythonlib.componentbase import executingcomponent as component +from scriptcontext import sticky as st + +from compas_ghpython import draw_frame +from compas_fab.ghpython.components import create_id +from compas_fab.ghpython.components import coerce_frame +from compas_fab.ghpython.components.icons import trajectory_visualize_icon + +class TrajectoryVisualize(component): + def SetUpParam(self, p, name, nickname, description): + p.Name = name + p.NickName = nickname + p.Description = description + p.Optional = True + + def RegisterInputParams(self, pManager): + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "robot", "robot", "The robot.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_String() + self.SetUpParam(p, "group", "group", "The planning group for which this trajectory was planned.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "trajectory", "trajectory", "The calculated trajectory.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + def RegisterOutputParams(self, pManager): + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "start_configuration", "start_configuration", "The start configuration of the trajectory.") + self.Params.Output.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "configurations", "configurations", "The full configurations along the trajectory.") + self.Params.Output.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_Number() + self.SetUpParam(p, "fraction", "fraction", "Indicates the percentage of requested trajectory that was calculated, e.g. 1 means the full trajectory was found.") + self.Params.Output.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_Number() + self.SetUpParam(p, "time", "time", "The time which is needed to execute that trajectory at full speed.") + self.Params.Output.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_Plane() + self.SetUpParam(p, "planes", "planes", "The planes of the robot's end-effector.") + self.Params.Output.Add(p) + + def SolveInstance(self, DA): + p0 = self.marshal.GetInput(DA, 0) + p1 = self.marshal.GetInput(DA, 1) + p2 = self.marshal.GetInput(DA, 2) + result = self.RunScript(p0, p1, p2) + + if result is not None: + if not hasattr(result, '__getitem__'): + self.marshal.SetOutput(result, DA, 0, True) + else: + self.marshal.SetOutput(result[0], DA, 0, True) + self.marshal.SetOutput(result[1], DA, 1, True) + self.marshal.SetOutput(result[2], DA, 2, True) + self.marshal.SetOutput(result[3], DA, 3, True) + self.marshal.SetOutput(result[4], DA, 4, True) + + def get_Internal_Icon_24x24(self): + return trajectory_visualize_icon + + def RunScript(self, robot, group, trajectory): + start_configuration = None + configurations = [] + fraction = 0. + time = 0. + + planes = [] + positions = [] + velocities = [] + accelerations = [] + + if robot and trajectory: + group = group or robot.main_group_name + + for c in trajectory.points: + configurations.append(robot.merge_group_with_full_configuration(c, trajectory.start_configuration, group)) + frame = robot.forward_kinematics(c, group, options=dict(solver='model')) + planes.append(draw_frame(frame)) + positions.append(c.positions) + velocities.append(c.velocities) + accelerations.append(c.accelerations) + + start_configuration = trajectory.start_configuration + fraction = trajectory.fraction + time = trajectory.time_from_start + + # return outputs if you have them; here I try it for you: + return (start_configuration, configurations, fraction, time, planes) + + GhPython provides a Python script component + + 416 + 248 + + + 684 + 571 + + true + true + 1 + 8f786953-34c8-47f7-9814-b8a909da5855 + true + true + GhPython Script + Visualize Trajectory + + + + + + 1876 + 722 + 180 + 129 + + + 1942 + 787 + + + + + + 3 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 5 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + Script variable Python + 2f6123f4-8422-4aab-809e-3681423c00b0 + robot + robot + true + 0 + true + 9a9900f7-c5de-485a-9791-63a5e1930c86 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + 1 + + + + + + 1878 + 724 + 49 + 41 + + + 1904 + 744.8333 + + + + + + + + true + Script input group. + 865c932a-f481-430e-b273-44f1b7454e05 + group + group + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1878 + 765 + 49 + 42 + + + 1904 + 786.5 + + + + + + + + true + Script input trajectory. + 197f921f-683f-46a8-83d5-db2c55b0fd00 + trajectory + trajectory + true + 0 + true + dcaa9955-fb1a-4768-ae11-ebfb9edc6a8f + 455c77c0-ca36-4d93-b1b3-f34bda4eb365 + 2 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1878 + 807 + 49 + 42 + + + 1904 + 828.1666 + + + + + + + + Script output start_configuration. + 78545dfa-3477-4eba-a564-be23a3c3d050 + start_configuration + start_configuration + false + 0 + + + + + + 1957 + 724 + 97 + 25 + + + 2005.5 + 736.5 + + + + + + + + Script output configurations. + c818cec5-fc6d-4c1d-9452-fa15ce31c9ad + configurations + configurations + false + 0 + + + + + + 1957 + 749 + 97 + 25 + + + 2005.5 + 761.5 + + + + + + + + Script output fraction. + d1c88ade-6dc2-412d-8a32-9d674ab416ec + fraction + fraction + false + 0 + + + + + + 1957 + 774 + 97 + 25 + + + 2005.5 + 786.5 + + + + + + + + Script output time. + 6bddb8ef-e70c-4bf8-b6ac-2349bc4b8573 + time + time + false + 0 + + + + + + 1957 + 799 + 97 + 25 + + + 2005.5 + 811.5 + + + + + + + + Script output planes. + edaf7f96-5c94-4b3f-830c-55d9258a6c9b + planes + planes + false + 0 + + + + + + 1957 + 824 + 97 + 25 + + + 2005.5 + 836.5 + + + + + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + if assembly: + assembly.pick_trajectory = pick_trajectory + GhPython provides a Python script component + + 130 + 130 + + + 558 + 571 + + true + true + 1 + e8574466-52dd-40f6-a8d5-e57e15b8abec + false + true + GhPython Script + Store + + + + + + 1912 + 414 + 105 + 44 + + + 2003 + 436 + + + + + + 2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 0 + + + + + true + Script variable Python + c5a19ecc-1b7b-4c3f-9e60-00d215da9e50 + assembly + assembly + true + 0 + true + 1da00192-179a-4379-a6a7-562c2d4250d8 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + 1 + + + + + + 1914 + 416 + 74 + 20 + + + 1952.5 + 426 + + + + + + + + true + Script input pick_trajectory. + 66254fff-4330-439d-b881-3142382e42da + pick_trajectory + pick_trajectory + true + 0 + true + 7d158313-5514-47eb-a080-3408700613a7 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1914 + 436 + 74 + 20 + + + 1952.5 + 446 + + + + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + 2c2b473d-04b6-46e5-9f55-abf6bb0737e6 + 15d6cddc-9345-47e7-9189-ff8d5a5723fa + fcffabeb-26d9-48cd-b12a-abb686e6be89 + cfa0e56a-0f24-46b0-b795-64142d0bb9b1 + 26a7a666-dea8-4bfe-9759-718a4cb7c6cf + a4ac6406-d89d-498a-adbd-d81819c696e1 + 40c2bfa6-520e-4e34-a8a0-d167facedcc1 + 3a28a33d-a006-4d82-a9d9-5a745d26a3f3 + 12773b81-2dc4-4c3e-ba26-7422415b0e99 + ec0d2252-e2ee-475a-8a4e-462586452c12 + 10 + 0fedfe68-9645-4248-88c9-170f03fec9d0 + Group + + + + + + + + + + + a559fee2-4b76-4370-8042-c7440cd75049 + Mesh Closest Point + + + + + Finds the closest point on a mesh + 2c2b473d-04b6-46e5-9f55-abf6bb0737e6 + Mesh Closest Point + MeshCP + + + + + + 413 + 528 + 57 + 64 + + + 441 + 560 + + + + + + Point to search from + a9abe615-a57d-4267-9360-a96912a86369 + Point + P + false + 34e985cd-859f-4d13-a639-0f4a1845fc21 + 1 + + + + + + 415 + 530 + 11 + 30 + + + 422 + 545 + + + + + + + + Mesh to search for closest point + bce9ab35-7d27-4c39-9345-6eee24ab0ef7 + Mesh + M + false + cec5af33-7de8-45a7-8a88-c746edfb38bd + 1 + + + + + + 415 + 560 + 11 + 30 + + + 422 + 575 + + + + + + + + Location on mesh closest to search point + 2c217fac-49f0-4f5e-8b84-769347b3833a + Point + P + false + 0 + + + + + + 456 + 530 + 12 + 20 + + + 462 + 540 + + + + + + + + Face index of closest point + 66d4ab6d-3f5b-41a2-9ab3-f9362136f3e4 + Index + I + false + 0 + + + + + + 456 + 550 + 12 + 20 + + + 462 + 560 + + + + + + + + Mesh parameter for closest point + 83bbfea5-1ac4-44ac-ae60-6b832d32bf69 + Parameter + P + false + 0 + + + + + + 456 + 570 + 12 + 20 + + + 462 + 580 + + + + + + + + + + + + 4c619bc9-39fd-4717-82a6-1e07ea237bbe + Line SDL + + + + + Create a line segment defined by start point, tangent and length.} + true + 15d6cddc-9345-47e7-9189-ff8d5a5723fa + Line SDL + Line + + + + + + 565 + 528 + 56 + 64 + + + 592 + 560 + + + + + + Line start point + 39ebb2c8-d76d-472d-bda4-998dbb052293 + Start + S + false + 2c217fac-49f0-4f5e-8b84-769347b3833a + 1 + + + + + + 567 + 530 + 10 + 20 + + + 573.5 + 540 + + + + + + + + Line tangent (direction) + 822493eb-da1f-4dd9-bf61-6e9cbc84e83f + Direction + D + false + c194671a-7af1-42b5-b473-bd0bdba377d0 + 1 + + + + + + 567 + 550 + 10 + 20 + + + 573.5 + 560 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 1 + + + + + + + + + + + + Line length + c5f47897-3ed4-4171-adcc-aaf7f6a19483 + Length + L + false + cfa0e56a-0f24-46b0-b795-64142d0bb9b1 + 1 + + + + + + 567 + 570 + 10 + 20 + + + 573.5 + 580 + + + + + + 1 + + + + + 1 + {0} + + + + + 1 + + + + + + + + + + + Line segment + 74a2f5b6-596f-49e6-8ce5-845d158a52d6 + Line + L + false + 0 + + + + + + 607 + 530 + 12 + 60 + + + 613 + 560 + + + + + + + + + + + + 56b92eab-d121-43f7-94d3-6cd8f0ddead8 + Vector XYZ + + + + + Create a vector from {xyz} components. + fcffabeb-26d9-48cd-b12a-abb686e6be89 + Vector XYZ + Vec + + + + + + 487 + 543 + 55 + 64 + + + 513 + 575 + + + + + + Vector {x} component + 3ddc150d-416e-44ae-bfe3-1f47845cd877 + X component + X + false + 0 + + + + + + 489 + 545 + 9 + 20 + + + 495 + 555 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Vector {y} component + 9e4f37a1-46d3-4870-a9df-3fd978399d5b + Y component + Y + false + 0 + + + + + + 489 + 565 + 9 + 20 + + + 495 + 575 + + + + + + 1 + + + + + 1 + {0} + + + + + -1 + + + + + + + + + + + Vector {z} component + e2c89a6b-0a9f-4a3e-98dd-ccb99fadd9f9 + Z component + Z + false + 0 + + + + + + 489 + 585 + 9 + 20 + + + 495 + 595 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Vector construct + c194671a-7af1-42b5-b473-bd0bdba377d0 + Vector + V + false + 0 + + + + + + 528 + 545 + 12 + 30 + + + 534 + 560 + + + + + + + + Vector length + 2fcac7bb-8aa4-4fc9-9aba-1490b501f75e + Length + L + false + 0 + + + + + + 528 + 575 + 12 + 30 + + + 534 + 590 + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + cfa0e56a-0f24-46b0-b795-64142d0bb9b1 + Number Slider + + false + 0 + + + + + + 376 + 613 + 163 + 20 + + + 376.1643 + 613.5756 + + + + + + 1 + 1 + 0 + 1 + 0 + 0 + 0.5 + + + + + + + + + 2162e72e-72fc-4bf8-9459-d4d82fa8aa14 + Divide Curve + + + + + Divide a curve into equal length segments + 26a7a666-dea8-4bfe-9759-718a4cb7c6cf + Divide Curve + Divide + + + + + + 731 + 548 + 56 + 64 + + + 758 + 580 + + + + + + Curve to divide + 085e6025-e238-423c-a1aa-f7bd951fffef + Curve + C + false + 12ce90af-235a-4937-8beb-aa0c694a3c75 + 1 + + + + + + 733 + 550 + 10 + 20 + + + 739.5 + 560 + + + + + + 1 + + + + + 1 + {0} + + + + + -1 + 42b29fa2-5c15-41ab-b712-10d737bed7ac + + + + + + + + + + + Number of segments + 3064ec21-265d-4bde-80d2-1b8cd023de37 + Count + N + false + 40c2bfa6-520e-4e34-a8a0-d167facedcc1 + 1 + + + + + + 733 + 570 + 10 + 20 + + + 739.5 + 580 + + + + + + 1 + + + + + 1 + {0} + + + + + 8 + + + + + + + + + + + Split segments at kinks + e32f6f5a-0f20-4efa-8482-4feed75d4434 + Kinks + K + false + 0 + + + + + + 733 + 590 + 10 + 20 + + + 739.5 + 600 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + 1 + Division points + b4e83913-46de-4496-9089-b58121746140 + Points + P + false + 0 + + + + + + 773 + 550 + 12 + 20 + + + 779 + 560 + + + + + + + + 1 + Tangent vectors at division points + f174b057-e6a3-4df3-a5f2-3eb91e26d90f + Tangents + T + false + 0 + + + + + + 773 + 570 + 12 + 20 + + + 779 + 580 + + + + + + + + 1 + Parameter values at division points + bf727536-328c-44a5-837a-36584974fef7 + Parameters + t + false + 0 + + + + + + 773 + 590 + 12 + 20 + + + 779 + 600 + + + + + + + + + + + + f31d8d7a-7536-4ac8-9c96-fde6ecda4d0a + Cluster + + + + + + 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 + + Contains a cluster of Grasshopper components + 1 + a4ac6406-d89d-498a-adbd-d81819c696e1 + Cluster + T0CF + false + + + + + 3 + a8052388-7620-4c58-8f84-8ae647b6b04c + b75d14f8-2037-487c-aada-e4a1af01a95c + f41be9bc-bcf0-410b-a0ac-8575f4a7ba6b + d0ccacbd-d43e-44d1-95fa-d65b95597d22 + 43cd6740-e900-4cb5-aac6-f6ee8442edb2 + a734e7f6-2f8f-4929-916a-9608854f6392 + + + + + + 810 + 548 + 153 + 44 + + + 872 + 570 + + + + + + 2 + 4f8984c4-7c7a-4d69-b0a2-183cbb330d20 + 3e8ca6be-fda8-4aaf-b5c0-3c54c8bb7312 + 1 + 4f8984c4-7c7a-4d69-b0a2-183cbb330d20 + + + + + Contains a collection of three-dimensional axis-systems + b75d14f8-2037-487c-aada-e4a1af01a95c + Plane + tcf_point + true + b4e83913-46de-4496-9089-b58121746140 + 1 + + + + + + 812 + 550 + 45 + 20 + + + 836 + 560 + + + + + + + + Contains a collection of floating point numbers + a8052388-7620-4c58-8f84-8ae647b6b04c + Number + z_offset + true + 9a4be73c-3082-4c74-be27-41c7c1688c53 + 1 + 1 + + + + + + 812 + 570 + 45 + 20 + + + 836 + 580 + + + + + + 1 + + + + + 1 + {0} + + + + + 0.07 + + + + + + + + + + + Contains a collection of three-dimensional axis-systems + f41be9bc-bcf0-410b-a0ac-8575f4a7ba6b + 1 + Plane + t0cf_frame + false + 0 + + + + + + 887 + 550 + 74 + 40 + + + 916 + 570 + + + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 40c2bfa6-520e-4e34-a8a0-d167facedcc1 + Number Slider + + false + 0 + + + + + + 640 + 648 + 158 + 20 + + + 640.3718 + 648.332 + + + + + + 3 + 1 + 1 + 8 + 0 + 0 + 8 + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + true + + 383.4841 + 643.7833 + + + 544.9391 + 643.7833 + + + 544.9391 + 671.1759 + + + 383.4841 + 671.1759 + + A quick note + Arial + 3a28a33d-a006-4d82-a9d9-5a745d26a3f3 + false + Scribble + Scribble + 30 + Pick planes + + + + + + 378.4841 + 638.7833 + 171.455 + 37.39258 + + + 383.4841 + 643.7833 + + + + + + + + + + 59daf374-bc21-4a5e-8282-5504fb7ae9ae + List Item + + + + + 0 + Retrieve a specific item from a list. + e6796b90-283f-4bb1-9d6c-fe8c02934230 + List Item + Item + + + + + + 1006 + 558 + 58 + 64 + + + 1035 + 590 + + + + + + 3 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 2e3ab970-8545-46bb-836c-1c11e5610bce + cb95db89-6165-43b6-9c41-5702bc5bf137 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + 1 + Base list + 30de0add-b6b2-417e-b1af-1d83c0af9224 + List + L + false + f41be9bc-bcf0-410b-a0ac-8575f4a7ba6b + 1 + + + + + + 1008 + 560 + 12 + 20 + + + 1015.5 + 570 + + + + + + + + Item index + 8b547321-c8a2-47f3-9c97-a2cd2e1b661c + Index + i + false + 750fd83e-475e-457a-8900-4ec1748903c9 + 1 + + + + + + 1008 + 580 + 12 + 20 + + + 1015.5 + 590 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Wrap index to list bounds + f4834b10-2182-4be6-ac49-a4d0a2bd9007 + Wrap + W + false + 0 + + + + + + 1008 + 600 + 12 + 20 + + + 1015.5 + 610 + + + + + + 1 + + + + + 1 + {0} + + + + + true + + + + + + + + + + + Item at {i'} + 4cc33074-a238-4554-8ff7-4a392f24c411 + false + Item + i + false + 0 + + + + + + 1050 + 560 + 12 + 60 + + + 1056 + 590 + + + + + + + + + + + + + + e9eb1dcf-92f6-4d4d-84ae-96222d60f56b + Move + + + + + Translate (move) an object along a vector. + true + 12773b81-2dc4-4c3e-ba26-7422415b0e99 + Move + Move + + + + + + 647 + 548 + 57 + 44 + + + 674 + 570 + + + + + + Base geometry + 802c5634-878b-44a3-a4c8-702d38aea069 + Geometry + G + true + 74a2f5b6-596f-49e6-8ce5-845d158a52d6 + 1 + + + + + + 649 + 550 + 10 + 20 + + + 655.5 + 560 + + + + + + + + Translation vector + e9e690c2-7247-4902-a544-d0d84c0af8b4 + Motion + T + false + 8fbc5058-a6b2-46f4-b913-d6e397c4c97f + 1 + + + + + + 649 + 570 + 10 + 20 + + + 655.5 + 580 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 10 + + + + + + + + + + + + Translated geometry + 12ce90af-235a-4937-8beb-aa0c694a3c75 + Geometry + G + false + 0 + + + + + + 689 + 550 + 13 + 20 + + + 695.5 + 560 + + + + + + + + Transformation data + 3c192d43-9f0b-447f-8aba-4d1991ab04e0 + Transform + X + false + 0 + + + + + + 689 + 570 + 13 + 20 + + + 695.5 + 580 + + + + + + + + + + + + 56b92eab-d121-43f7-94d3-6cd8f0ddead8 + Vector XYZ + + + + + Create a vector from {xyz} components. + ec0d2252-e2ee-475a-8a4e-462586452c12 + Vector XYZ + Vec + + + + + + 561 + 603 + 71 + 64 + + + 603 + 635 + + + + + + Vector {x} component + 09896520-86f7-4cd8-8556-6f05bfaa3332 + X component + X + false + 0 + + + + + + 563 + 605 + 25 + 20 + + + 585 + 615 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Vector {y} component + 5a1526fb-45f9-4595-af5f-5f37ba3903f9 + Y component + Y + false + 0 + + + + + + 563 + 625 + 25 + 20 + + + 585 + 635 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Vector {z} component + c53708b5-ec66-4b28-a8c7-48c696a8d56d + 1.01*x + Z component + Z + false + 38da7932-bace-4722-99e8-41530a8b7e79 + 1 + + + + + + 563 + 645 + 25 + 20 + + + 585 + 655 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Vector construct + 8fbc5058-a6b2-46f4-b913-d6e397c4c97f + Vector + V + false + 0 + + + + + + 618 + 605 + 12 + 30 + + + 624 + 620 + + + + + + + + Vector length + 7046fe35-39e4-48e6-9fbf-caa747aeca17 + Length + L + false + 0 + + + + + + 618 + 635 + 12 + 30 + + + 624 + 650 + + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + 80ce433a-1738-4633-8ddb-deb209a263b2 + 88cb6da0-f8e7-40bf-8bc5-3b0ef7d1c70c + c26bcaf2-5573-467a-8942-f0a103c066f9 + 6d8ccd0b-20a9-480b-8796-12f89ff9b31e + 81efa3c6-8c1f-4c74-b9ba-ad9177a3e1d8 + 27946b2d-1caa-4e76-92a7-cf360a1c5933 + 6 + 7e93d271-b452-4258-a933-73f14c8fb309 + Group + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + 018653fc-9c43-47d8-a9f7-d80916ba8b0f + f20d36e3-a8cb-43d7-b7b5-ab6d0f37e3b3 + 85fa7c2a-3ed0-4344-a688-e348fd1377b2 + 340e3413-4a99-4721-ae88-3e8f0a3ea9f3 + 1e9cb760-cddd-4d08-b776-e3bd3f2ff316 + 12bc71b5-9bc7-4a55-98ce-540325332373 + 5c5a5137-2a25-4a89-bc4a-5872463cf2e9 + 097f3667-b040-4f54-81c5-1a33da31df10 + 8 + 05d04219-e39c-41b1-934f-c277a9770fd8 + Group + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + 8c20a3fe-d1e1-4b09-bf6a-7e0d17df3e31 + ccadf9fd-c8ea-4841-b6bd-8ebd7b99f1d4 + 58db72dd-9c73-4589-aa9d-19c2c3044808 + ed40d732-05e2-42e6-b935-4856b911cfc3 + bf977be7-bcdd-4b7d-af14-70654c973d18 + 5 + bae32e53-70a0-44e0-b03e-9632f0616320 + Group + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + f20d36e3-a8cb-43d7-b7b5-ab6d0f37e3b3 + 85fa7c2a-3ed0-4344-a688-e348fd1377b2 + 2 + 018653fc-9c43-47d8-a9f7-d80916ba8b0f + Group + + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + true + + 47.86356 + 721.6266 + + + 150.384 + 721.6266 + + + 150.384 + 751.4557 + + + 47.86356 + 751.4557 + + A quick note + Arial + f20d36e3-a8cb-43d7-b7b5-ab6d0f37e3b3 + false + Scribble + Scribble + 41 + Place + + + + + + 42.86356 + 716.6266 + 112.5205 + 39.8291 + + + 47.86356 + 721.6266 + + + + + + + + + + 2162e72e-72fc-4bf8-9459-d4d82fa8aa14 + Divide Curve + + + + + Divide a curve into equal length segments + true + 80ce433a-1738-4633-8ddb-deb209a263b2 + Divide Curve + Divide + + + + + + 769 + 761 + 56 + 64 + + + 796 + 793 + + + + + + Curve to divide + 43bb8f9e-d237-4787-abc5-879e209d9f4a + Curve + C + false + 1d47708c-d758-45e4-a101-678c2cb70d69 + 1 + + + + + + 771 + 763 + 10 + 20 + + + 777.5 + 773 + + + + + + 1 + + + + + 1 + {0} + + + + + -1 + 42b29fa2-5c15-41ab-b712-10d737bed7ac + + + + + + + + + + + Number of segments + e1402a9d-a975-4fdd-a7da-93c600469836 + Count + N + false + 88cb6da0-f8e7-40bf-8bc5-3b0ef7d1c70c + 1 + + + + + + 771 + 783 + 10 + 20 + + + 777.5 + 793 + + + + + + 1 + + + + + 1 + {0} + + + + + 40 + + + + + + + + + + + Split segments at kinks + b6c0d2e0-f738-4968-92f7-a0b106f0b2e9 + Kinks + K + false + 0 + + + + + + 771 + 803 + 10 + 20 + + + 777.5 + 813 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + 1 + Division points + 0b8a0f7b-c563-4bf2-959e-9d0d31a6341f + Points + P + false + 0 + + + + + + 811 + 763 + 12 + 20 + + + 817 + 773 + + + + + + + + 1 + Tangent vectors at division points + 59590178-f869-4eb1-b436-3d41b76d447b + Tangents + T + false + 0 + + + + + + 811 + 783 + 12 + 20 + + + 817 + 793 + + + + + + + + 1 + Parameter values at division points + 32a0539a-0c33-42bd-a0ca-c8eecde36394 + Parameters + t + false + 0 + + + + + + 811 + 803 + 12 + 20 + + + 817 + 813 + + + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + import Grasshopper +import System +from ghpythonlib.componentbase import executingcomponent as component +from scriptcontext import sticky as st + +from compas_fab.ghpython.components import coerce_frame +from compas_fab.backends import RosValidationError + +class InverseKinematics(component): + def SetUpParam(self, p, name, nickname, description): + p.Name = name + p.NickName = nickname + p.Description = description + p.Optional = True + + def RegisterInputParams(self, pManager): + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "robot", "robot", "The robot.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "plane", "plane", "The plane or frame to calculate the inverse kinematic for.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "start_configuration", "start_configuration", + "If passed, the inverse will be calculated such that the calculated joint positions \ + differ the least from the start_configuration. Defaults to the zero configuration.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + p = Grasshopper.Kernel.Parameters.Param_String() + self.SetUpParam(p, "group", "group", "The planning group used for calculation. Defaults to the robot's main planning group.") + p.Access = Grasshopper.Kernel.GH_ParamAccess.item + self.Params.Input.Add(p) + + def RegisterOutputParams(self, pManager): + p = Grasshopper.Kernel.Parameters.Param_GenericObject() + self.SetUpParam(p, "a", "configuration", "The planning group's configuration.") + self.Params.Output.Add(p) + + def SolveInstance(self, DA): + p0 = self.marshal.GetInput(DA, 0) + p1 = self.marshal.GetInput(DA, 1) + p2 = self.marshal.GetInput(DA, 2) + p3 = self.marshal.GetInput(DA, 3) + result = self.RunScript(p0, p1, p2, p3) + + if result is not None: + self.marshal.SetOutput(result, DA, 0, True) + + def get_Internal_Icon_24x24(self): + return inverse_kinematics_icon + + def RunScript(self, robot, plane, start_configuration, group): + configuration = None + self.Message = '' + if robot and robot.client and robot.client.is_connected and plane: + frame = coerce_frame(plane) + try: + configuration = robot.inverse_kinematics(frame, start_configuration, group) + except RosValidationError as e: + self.Message = 'No solution found' + raise + + if configuration: + self.Message = 'Solution found' + return configuration + + GhPython provides a Python script component + + 415 + 248 + + + 684 + 571 + + true + true + 1 + f16d7522-4dad-4263-b0af-2cc276ace21a + true + true + true + GhPython Script + IK + + + + + + 1067 + 932 + 198 + 84 + + + 1178 + 974 + + + + + + 4 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + Script variable Python + f66f6e4a-531c-4b17-8546-b1774e7961a0 + true + robot + robot + true + 0 + true + 9a9900f7-c5de-485a-9791-63a5e1930c86 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1069 + 934 + 94 + 20 + + + 1117.5 + 944 + + + + + + + + true + Script input plane. + 75d8be80-766d-46b5-8ead-51cc37ea6108 + true + plane + plane + true + 0 + true + bd698c7d-c7c4-442d-b790-ff6930fb16a5 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1069 + 954 + 94 + 20 + + + 1117.5 + 964 + + + + + + + + true + Script input start_configuration. + d13854e6-3c95-4c3b-b627-deb01ba42bd8 + true + start_configuration + start_configuration + true + 0 + true + f956b690-65c4-4b82-ac9a-488e4afed703 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1069 + 974 + 94 + 20 + + + 1117.5 + 984 + + + + + + + + true + Script input group. + 5b28cea7-acb6-4bf7-9383-54a7d99f38f9 + true + group + group + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1069 + 994 + 94 + 20 + + + 1117.5 + 1004 + + + + + + + + Script output configuration. + 7e01d15e-4333-45e1-99e0-699a12f1ea92 + true + configuration + configuration + false + 0 + + + + + + 1193 + 934 + 70 + 80 + + + 1228 + 974 + + + + + + + + + + + + + + f31d8d7a-7536-4ac8-9c96-fde6ecda4d0a + Cluster + + + + + + 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 + + Contains a cluster of Grasshopper components + 1 + 3863e000-458a-4edf-909d-411c1c21cfe3 + Cluster + T0CF + false + + + + + 3 + 495f6bb6-b415-4a6a-a016-b4212a7ea1dc + af025e60-14ba-4c28-9dc9-21f04af24737 + bb14bf69-92c1-4f0a-8740-994afcfcf35a + 43cd6740-e900-4cb5-aac6-f6ee8442edb2 + a734e7f6-2f8f-4929-916a-9608854f6392 + d0ccacbd-d43e-44d1-95fa-d65b95597d22 + + + + + + 1025 + 777 + 137 + 44 + + + 1087 + 799 + + + + + + 2 + 4f8984c4-7c7a-4d69-b0a2-183cbb330d20 + 3e8ca6be-fda8-4aaf-b5c0-3c54c8bb7312 + 1 + 4f8984c4-7c7a-4d69-b0a2-183cbb330d20 + + + + + Contains a collection of three-dimensional axis-systems + 495f6bb6-b415-4a6a-a016-b4212a7ea1dc + Plane + tcf_point + true + 4fcc7feb-1eb1-4790-b785-38fed48eb866 + 8843c7bf-2a1c-4055-9f4f-52c97578cb42 + 266ecaa4-c6e6-4d90-b910-27572cd124b7 + 3 + + + + + + 1027 + 779 + 45 + 20 + + + 1051 + 789 + + + + + + + + Contains a collection of floating point numbers + bb14bf69-92c1-4f0a-8740-994afcfcf35a + Number + z_offset + true + 9a4be73c-3082-4c74-be27-41c7c1688c53 + 1 + 1 + + + + + + 1027 + 799 + 45 + 20 + + + 1051 + 809 + + + + + + 1 + + + + + 1 + {0} + + + + + 0.07 + + + + + + + + + + + Contains a collection of three-dimensional axis-systems + af025e60-14ba-4c28-9dc9-21f04af24737 + Plane + t0cf_frame + false + 0 + + + + + + 1102 + 779 + 58 + 40 + + + 1131 + 799 + + + + + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + true + + 46.62631 + 756.7301 + + + 189.3029 + 756.7301 + + + 189.3029 + 766.2262 + + + 46.62631 + 766.2262 + + A quick note + Arial + 85fa7c2a-3ed0-4344-a688-e348fd1377b2 + false + Scribble + Scribble + 13 + Need more than 1 brick + + + + + + 41.62631 + 751.7301 + 152.6766 + 19.49609 + + + 46.62631 + 756.7301 + + + + + + + + + + fbac3e32-f100-4292-8692-77240a42fd1a + Point + + + + + Contains a collection of three-dimensional points + 340e3413-4a99-4721-ae88-3e8f0a3ea9f3 + Point + Pt Place + false + 0 + + + + + + 148 + 742 + 50 + 20 + + + 173.2618 + 752.2631 + + + + + + 1 + + + + + 1 + {0} + + + + + + + + 039ca913-0a0a-4c00-b95c-42d866a0fd3c + -1 + 0 + 0 + point_object + + + + + + + + + + + + + + + a559fee2-4b76-4370-8042-c7440cd75049 + Mesh Closest Point + + + + + Finds the closest point on a mesh + 1e9cb760-cddd-4d08-b776-e3bd3f2ff316 + Mesh Closest Point + MeshCP + + + + + + 221 + 733 + 57 + 64 + + + 249 + 765 + + + + + + Point to search from + 33412ca1-64b4-4a7a-9912-d124e8d2860c + Point + P + false + 340e3413-4a99-4721-ae88-3e8f0a3ea9f3 + 1 + + + + + + 223 + 735 + 11 + 30 + + + 230 + 750 + + + + + + + + Mesh to search for closest point + f0ba4826-e502-4bf3-92b5-ebfd25dbc833 + Mesh + M + false + cec5af33-7de8-45a7-8a88-c746edfb38bd + 1 + + + + + + 223 + 765 + 11 + 30 + + + 230 + 780 + + + + + + + + Location on mesh closest to search point + 79a19e6e-1d5b-4fc3-ab55-b50cd14630d9 + Point + P + false + 0 + + + + + + 264 + 735 + 12 + 20 + + + 270 + 745 + + + + + + + + Face index of closest point + 22cbb600-f2b8-474e-8c6b-2d1cf52bb686 + Index + I + false + 0 + + + + + + 264 + 755 + 12 + 20 + + + 270 + 765 + + + + + + + + Mesh parameter for closest point + 2b94d232-db39-45b5-bf6a-37ce1fdddb73 + Parameter + P + false + 0 + + + + + + 264 + 775 + 12 + 20 + + + 270 + 785 + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 88cb6da0-f8e7-40bf-8bc5-3b0ef7d1c70c + Number Slider + + false + 0 + + + + + + 587 + 829 + 158 + 20 + + + 587.6251 + 829.122 + + + + + + 3 + 1 + 1 + 8 + 0 + 0 + 3 + + + + + + + + + e9eb1dcf-92f6-4d4d-84ae-96222d60f56b + Move + + + + + Translate (move) an object along a vector. + c26bcaf2-5573-467a-8942-f0a103c066f9 + Move + Move + + + + + + 875 + 777 + 73 + 44 + + + 902 + 799 + + + + + + Base geometry + f36ca5ea-c529-47a0-97d0-fd8e38564ac3 + Geometry + G + true + 0b8a0f7b-c563-4bf2-959e-9d0d31a6341f + 1 + + + + + + 877 + 779 + 10 + 20 + + + 883.5 + 789 + + + + + + + + Translation vector + ea40ab6b-4367-4787-9dd0-992a04a8ed8e + Motion + T + false + 379a5118-4abb-43ab-a49c-212cb848d6c1 + 1 + + + + + + 877 + 799 + 10 + 20 + + + 883.5 + 809 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 10 + + + + + + + + + + + + Translated geometry + 4fcc7feb-1eb1-4790-b785-38fed48eb866 + 1 + Geometry + G + false + 0 + + + + + + 917 + 779 + 29 + 20 + + + 923.5 + 789 + + + + + + + + Transformation data + 6c0d16b4-69ed-4718-b877-c0c069401848 + Transform + X + false + 0 + + + + + + 917 + 799 + 29 + 20 + + + 923.5 + 809 + + + + + + + + + + + + 56b92eab-d121-43f7-94d3-6cd8f0ddead8 + Vector XYZ + + + + + Create a vector from {xyz} components. + 6d8ccd0b-20a9-480b-8796-12f89ff9b31e + Vector XYZ + Vec + + + + + + 787 + 829 + 71 + 64 + + + 829 + 861 + + + + + + Vector {x} component + 2f9ae5f3-b361-472c-ba24-06efaa45b249 + X component + X + false + 0 + + + + + + 789 + 831 + 25 + 20 + + + 811 + 841 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Vector {y} component + bac903d5-2c3b-4452-9dc5-c5e717ed1f1c + Y component + Y + false + 0 + + + + + + 789 + 851 + 25 + 20 + + + 811 + 861 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Vector {z} component + bbc7bd2b-5a82-4a55-8380-cf08c4517e0e + 0*x + Z component + Z + false + 38da7932-bace-4722-99e8-41530a8b7e79 + 1 + + + + + + 789 + 871 + 25 + 20 + + + 811 + 881 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Vector construct + 379a5118-4abb-43ab-a49c-212cb848d6c1 + Vector + V + false + 0 + + + + + + 844 + 831 + 12 + 30 + + + 850 + 846 + + + + + + + + Vector length + 81131129-2bdc-40e7-9e3b-3bed74d58fb1 + Length + L + false + 0 + + + + + + 844 + 861 + 12 + 30 + + + 850 + 876 + + + + + + + + + + + + 4c619bc9-39fd-4717-82a6-1e07ea237bbe + Line SDL + + + + + Create a line segment defined by start point, tangent and length.} + true + 81efa3c6-8c1f-4c74-b9ba-ad9177a3e1d8 + Line SDL + Line + + + + + + 686 + 757 + 56 + 64 + + + 713 + 789 + + + + + + Line start point + 6c2233a7-6087-443c-aa01-22b08769ad3a + Start + S + false + 79a19e6e-1d5b-4fc3-ab55-b50cd14630d9 + 1 + + + + + + 688 + 759 + 10 + 20 + + + 694.5 + 769 + + + + + + + + Line tangent (direction) + bc89ce9f-ee09-4b5d-a3a6-6a9a58a62546 + Direction + D + false + 1cc2fa64-a288-4238-a6b5-42ae97c06db9 + 1 + + + + + + 688 + 779 + 10 + 20 + + + 694.5 + 789 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 1 + + + + + + + + + + + + Line length + 6848bedd-22bb-44fd-89c6-c26495b1f511 + Length + L + false + 27946b2d-1caa-4e76-92a7-cf360a1c5933 + 1 + + + + + + 688 + 799 + 10 + 20 + + + 694.5 + 809 + + + + + + 1 + + + + + 1 + {0} + + + + + 1 + + + + + + + + + + + Line segment + 1d47708c-d758-45e4-a101-678c2cb70d69 + Line + L + false + 0 + + + + + + 728 + 759 + 12 + 60 + + + 734 + 789 + + + + + + + + + + + + 56b92eab-d121-43f7-94d3-6cd8f0ddead8 + Vector XYZ + + + + + Create a vector from {xyz} components. + 12bc71b5-9bc7-4a55-98ce-540325332373 + Vector XYZ + Vec + + + + + + 257 + 658 + 55 + 64 + + + 283 + 690 + + + + + + Vector {x} component + 8f62c3bb-68cc-4d54-b3f9-d075fa3c1c2b + X component + X + false + 097f3667-b040-4f54-81c5-1a33da31df10 + 1 + + + + + + 259 + 660 + 9 + 20 + + + 265 + 670 + + + + + + 1 + + + + + 1 + {0} + + + + + 1 + + + + + + + + + + + Vector {y} component + 65223edf-b304-4351-85fd-058599578f6e + Y component + Y + false + 5c5a5137-2a25-4a89-bc4a-5872463cf2e9 + 1 + + + + + + 259 + 680 + 9 + 20 + + + 265 + 690 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Vector {z} component + 7e0a8439-6370-478b-aa81-48f7320a3977 + Z component + Z + false + 0 + + + + + + 259 + 700 + 9 + 20 + + + 265 + 710 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Vector construct + 1cc2fa64-a288-4238-a6b5-42ae97c06db9 + Vector + V + false + 0 + + + + + + 298 + 660 + 12 + 30 + + + 304 + 675 + + + + + + + + Vector length + a7757840-bbff-4e5d-ac50-1d60998ccc58 + Length + L + false + 0 + + + + + + 298 + 690 + 12 + 30 + + + 304 + 705 + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 27946b2d-1caa-4e76-92a7-cf360a1c5933 + Number Slider + + false + 0 + + + + + + 503 + 799 + 163 + 20 + + + 503.4459 + 799.6531 + + + + + + 3 + 1 + 0 + 0.1 + 0 + 0 + 0.096 + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 5c5a5137-2a25-4a89-bc4a-5872463cf2e9 + Number Slider + + false + 0 + + + + + + 39 + 681 + 193 + 20 + + + 39.01688 + 681.9442 + + + + + + 3 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 097f3667-b040-4f54-81c5-1a33da31df10 + Number Slider + + false + 0 + + + + + + 37 + 661 + 194 + 20 + + + 37.7684 + 661.9609 + + + + + + 3 + 1 + 1 + 100 + 0 + 0 + 1 + + + + + + + + + 4c619bc9-39fd-4717-82a6-1e07ea237bbe + Line SDL + + + + + Create a line segment defined by start point, tangent and length.} + true + 8c20a3fe-d1e1-4b09-bf6a-7e0d17df3e31 + Line SDL + Line + + + + + + 691 + 928 + 56 + 64 + + + 718 + 960 + + + + + + Line start point + d673981e-184d-4c9f-a23e-4c102d923065 + Start + S + false + 79a19e6e-1d5b-4fc3-ab55-b50cd14630d9 + 1 + + + + + + 693 + 930 + 10 + 20 + + + 699.5 + 940 + + + + + + + + Line tangent (direction) + c008c047-16c8-43e5-952a-01963a00cf22 + Direction + D + false + 1cc2fa64-a288-4238-a6b5-42ae97c06db9 + 1 + + + + + + 693 + 950 + 10 + 20 + + + 699.5 + 960 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 1 + + + + + + + + + + + + Line length + da9e6979-fb65-4059-af07-4cfd028fe0c3 + Length + L + false + ccadf9fd-c8ea-4841-b6bd-8ebd7b99f1d4 + 1 + + + + + + 693 + 970 + 10 + 20 + + + 699.5 + 980 + + + + + + 1 + + + + + 1 + {0} + + + + + 1 + + + + + + + + + + + Line segment + f81aa5b9-12d3-451e-85c7-596106fe80e0 + Line + L + false + 0 + + + + + + 733 + 930 + 12 + 60 + + + 739 + 960 + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + ccadf9fd-c8ea-4841-b6bd-8ebd7b99f1d4 + Number Slider + + false + 0 + + + + + + 504 + 970 + 163 + 20 + + + 504.5526 + 970.2043 + + + + + + 3 + 1 + 0 + 0.1 + 0 + 0 + 0.064 + + + + + + + + + 2162e72e-72fc-4bf8-9459-d4d82fa8aa14 + Divide Curve + + + + + Divide a curve into equal length segments + true + 58db72dd-9c73-4589-aa9d-19c2c3044808 + Divide Curve + Divide + + + + + + 768 + 929 + 56 + 64 + + + 795 + 961 + + + + + + Curve to divide + 02147d24-d37e-4914-917d-65cd58d479c8 + Curve + C + false + f81aa5b9-12d3-451e-85c7-596106fe80e0 + 1 + + + + + + 770 + 931 + 10 + 20 + + + 776.5 + 941 + + + + + + 1 + + + + + 1 + {0} + + + + + -1 + 42b29fa2-5c15-41ab-b712-10d737bed7ac + + + + + + + + + + + Number of segments + ee7c63b4-d73c-4a6c-ac72-d3a5ed645923 + Count + N + false + 0 + + + + + + 770 + 951 + 10 + 20 + + + 776.5 + 961 + + + + + + 1 + + + + + 1 + {0} + + + + + 2 + + + + + + + + + + + Split segments at kinks + c574da4f-c36c-4f24-a346-411c761c7eb8 + Kinks + K + false + 0 + + + + + + 770 + 971 + 10 + 20 + + + 776.5 + 981 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + 1 + Division points + 7413f076-90d4-4edf-b09b-4148ab5455a8 + Points + P + false + 0 + + + + + + 810 + 931 + 12 + 20 + + + 816 + 941 + + + + + + + + 1 + Tangent vectors at division points + 00ddd077-1fa3-4d56-a94b-9c9d03a32b5e + Tangents + T + false + 0 + + + + + + 810 + 951 + 12 + 20 + + + 816 + 961 + + + + + + + + 1 + Parameter values at division points + d8fa5418-2a30-4945-8a89-cc984c3c97f9 + Parameters + t + false + 0 + + + + + + 810 + 971 + 12 + 20 + + + 816 + 981 + + + + + + + + + + + + e9eb1dcf-92f6-4d4d-84ae-96222d60f56b + Move + + + + + Translate (move) an object along a vector. + ed40d732-05e2-42e6-b935-4856b911cfc3 + Move + Move + + + + + + 875 + 929 + 73 + 44 + + + 902 + 951 + + + + + + Base geometry + 26dfe39e-f78d-4f85-8d82-628622882cef + Geometry + G + true + 7413f076-90d4-4edf-b09b-4148ab5455a8 + 1 + + + + + + 877 + 931 + 10 + 20 + + + 883.5 + 941 + + + + + + + + Translation vector + c32ee708-f915-49f1-99d2-dc3aae299536 + Motion + T + false + 0a564858-bb5e-4a5d-9627-a81f76fa57d8 + 1 + + + + + + 877 + 951 + 10 + 20 + + + 883.5 + 961 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 10 + + + + + + + + + + + + Translated geometry + 8843c7bf-2a1c-4055-9f4f-52c97578cb42 + 1 + Geometry + G + false + 0 + + + + + + 917 + 931 + 29 + 20 + + + 923.5 + 941 + + + + + + + + Transformation data + b71256e2-baf1-4ac1-bf9b-725cfbee6445 + Transform + X + false + 0 + + + + + + 917 + 951 + 29 + 20 + + + 923.5 + 961 + + + + + + + + + + + + 56b92eab-d121-43f7-94d3-6cd8f0ddead8 + Vector XYZ + + + + + Create a vector from {xyz} components. + bf977be7-bcdd-4b7d-af14-70654c973d18 + Vector XYZ + Vec + + + + + + 845 + 976 + 71 + 64 + + + 887 + 1008 + + + + + + Vector {x} component + abf784fc-da02-4141-aff3-3692b557eff1 + 0.5*x +0.0005 + X component + X + false + d87fb28a-1fe7-43f1-9815-d869f233b385 + 1 + + + + + + 847 + 978 + 25 + 20 + + + 869 + 988 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Vector {y} component + 9b1a80ca-e788-4319-82d5-1284ccb5a39d + Y component + Y + false + 0 + + + + + + 847 + 998 + 25 + 20 + + + 869 + 1008 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Vector {z} component + 884da9fc-1ed3-47ea-9d7e-2ca638702bb6 + 1*x + 0.001 + Z component + Z + false + 38da7932-bace-4722-99e8-41530a8b7e79 + 1 + + + + + + 847 + 1018 + 25 + 20 + + + 869 + 1028 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Vector construct + 0a564858-bb5e-4a5d-9627-a81f76fa57d8 + Vector + V + false + 0 + + + + + + 902 + 978 + 12 + 30 + + + 908 + 993 + + + + + + + + Vector length + 3ecbc8c6-7163-4f86-b8e7-15a8e4d9434d + Length + L + false + 0 + + + + + + 902 + 1008 + 12 + 30 + + + 908 + 1023 + + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + ea9e7fe6-ff02-4a88-b813-3087b50d1029 + 7fa5418f-1f66-4c96-bb86-389e5f642741 + 322851fc-2052-4674-8d38-da537933ff29 + 99734e21-0c08-4685-af12-3ba4039ac001 + 283d9bf2-6447-4402-854f-899da397a476 + 5 + 76f7fe76-8716-4e03-bc4b-255253fe5e65 + Group + + + + + + + + + + + 4c619bc9-39fd-4717-82a6-1e07ea237bbe + Line SDL + + + + + Create a line segment defined by start point, tangent and length.} + true + ea9e7fe6-ff02-4a88-b813-3087b50d1029 + Line SDL + Line + + + + + + 691 + 1073 + 56 + 64 + + + 718 + 1105 + + + + + + Line start point + 2330ed5b-4e79-4b27-a4ae-06aa32110204 + Start + S + false + 79a19e6e-1d5b-4fc3-ab55-b50cd14630d9 + 1 + + + + + + 693 + 1075 + 10 + 20 + + + 699.5 + 1085 + + + + + + + + Line tangent (direction) + 2874f894-93f7-4436-9097-0cfad337f38e + Direction + D + false + 1cc2fa64-a288-4238-a6b5-42ae97c06db9 + 1 + + + + + + 693 + 1095 + 10 + 20 + + + 699.5 + 1105 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 1 + + + + + + + + + + + + Line length + 1701dccc-7085-44b2-b477-94ad9c9a9c18 + Length + L + false + 7fa5418f-1f66-4c96-bb86-389e5f642741 + 1 + + + + + + 693 + 1115 + 10 + 20 + + + 699.5 + 1125 + + + + + + 1 + + + + + 1 + {0} + + + + + 1 + + + + + + + + + + + Line segment + 3c95dee4-5d80-4196-b2b6-9b87af071b28 + Line + L + false + 0 + + + + + + 733 + 1075 + 12 + 60 + + + 739 + 1105 + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 7fa5418f-1f66-4c96-bb86-389e5f642741 + Number Slider + + false + 0 + + + + + + 504 + 1115 + 163 + 20 + + + 504.1653 + 1115.932 + + + + + + 3 + 1 + 0 + 0.1 + 0 + 0 + 0.032 + + + + + + + + + 2162e72e-72fc-4bf8-9459-d4d82fa8aa14 + Divide Curve + + + + + Divide a curve into equal length segments + true + 322851fc-2052-4674-8d38-da537933ff29 + Divide Curve + Divide + + + + + + 766 + 1072 + 56 + 64 + + + 793 + 1104 + + + + + + Curve to divide + 8e3c91ce-05af-422f-9190-f11c625898ce + Curve + C + false + 3c95dee4-5d80-4196-b2b6-9b87af071b28 + 1 + + + + + + 768 + 1074 + 10 + 20 + + + 774.5 + 1084 + + + + + + 1 + + + + + 1 + {0} + + + + + -1 + 42b29fa2-5c15-41ab-b712-10d737bed7ac + + + + + + + + + + + Number of segments + 6b5087df-2684-4477-91f2-a2bfc64be3f8 + Count + N + false + 0 + + + + + + 768 + 1094 + 10 + 20 + + + 774.5 + 1104 + + + + + + 1 + + + + + 1 + {0} + + + + + 1 + + + + + + + + + + + Split segments at kinks + 47830475-27ab-47c9-ac1a-f8dadb50c2fd + Kinks + K + false + 0 + + + + + + 768 + 1114 + 10 + 20 + + + 774.5 + 1124 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + 1 + Division points + 4b60d3d1-8cb3-4d3f-b1dd-0d5f7e7cdc92 + Points + P + false + 0 + + + + + + 808 + 1074 + 12 + 20 + + + 814 + 1084 + + + + + + + + 1 + Tangent vectors at division points + d8c11327-2008-4e97-b8b1-c6d26da94425 + Tangents + T + false + 0 + + + + + + 808 + 1094 + 12 + 20 + + + 814 + 1104 + + + + + + + + 1 + Parameter values at division points + bc46a527-7c77-4ab3-b4b7-215a1b03f0dd + Parameters + t + false + 0 + + + + + + 808 + 1114 + 12 + 20 + + + 814 + 1124 + + + + + + + + + + + + e9eb1dcf-92f6-4d4d-84ae-96222d60f56b + Move + + + + + Translate (move) an object along a vector. + 99734e21-0c08-4685-af12-3ba4039ac001 + Move + Move + + + + + + 876 + 1072 + 73 + 44 + + + 903 + 1094 + + + + + + Base geometry + c13e0a73-d9f8-4506-b9a9-3907857eefa4 + Geometry + G + true + 4b60d3d1-8cb3-4d3f-b1dd-0d5f7e7cdc92 + 1 + + + + + + 878 + 1074 + 10 + 20 + + + 884.5 + 1084 + + + + + + + + Translation vector + 846908bb-304d-44d9-a628-b03d294f150b + Motion + T + false + d9f9b8d1-b7e4-402e-9ac4-0c6bd1616d16 + 1 + + + + + + 878 + 1094 + 10 + 20 + + + 884.5 + 1104 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 10 + + + + + + + + + + + + Translated geometry + 266ecaa4-c6e6-4d90-b910-27572cd124b7 + 1 + Geometry + G + false + 0 + + + + + + 918 + 1074 + 29 + 20 + + + 924.5 + 1084 + + + + + + + + Transformation data + 18dc0401-4798-45b3-8571-352760bbe410 + Transform + X + false + 0 + + + + + + 918 + 1094 + 29 + 20 + + + 924.5 + 1104 + + + + + + + + + + + + 56b92eab-d121-43f7-94d3-6cd8f0ddead8 + Vector XYZ + + + + + Create a vector from {xyz} components. + 283d9bf2-6447-4402-854f-899da397a476 + Vector XYZ + Vec + + + + + + 841 + 1129 + 71 + 64 + + + 883 + 1161 + + + + + + Vector {x} component + 50028188-f5a3-4cff-870e-971fcb48e9af + x+0.0005 + X component + X + false + d87fb28a-1fe7-43f1-9815-d869f233b385 + 1 + + + + + + 843 + 1131 + 25 + 20 + + + 865 + 1141 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Vector {y} component + 03646ddd-7101-45d7-8a07-5ee9c2489c45 + Y component + Y + false + 0 + + + + + + 843 + 1151 + 25 + 20 + + + 865 + 1161 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Vector {z} component + c245a9e5-af0e-475e-933c-156edebcaa42 + 2*x + 2*0.001 + Z component + Z + false + 38da7932-bace-4722-99e8-41530a8b7e79 + 1 + + + + + + 843 + 1171 + 25 + 20 + + + 865 + 1181 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Vector construct + d9f9b8d1-b7e4-402e-9ac4-0c6bd1616d16 + Vector + V + false + 0 + + + + + + 898 + 1131 + 12 + 30 + + + 904 + 1146 + + + + + + + + Vector length + fe4c9f88-32f1-4ef3-b493-c8cdf129ba8d + Length + L + false + 0 + + + + + + 898 + 1161 + 12 + 30 + + + 904 + 1176 + + + + + + + + + + + + 59daf374-bc21-4a5e-8282-5504fb7ae9ae + List Item + + + + + 0 + Retrieve a specific item from a list. + 4e636644-b823-456e-9273-04a733ed6251 + List Item + Item + + + + + + 1174 + 810 + 58 + 64 + + + 1203 + 842 + + + + + + 3 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 2e3ab970-8545-46bb-836c-1c11e5610bce + cb95db89-6165-43b6-9c41-5702bc5bf137 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + 1 + Base list + b72dae72-9131-4fd1-ac32-8d509ef8a597 + List + L + false + af025e60-14ba-4c28-9dc9-21f04af24737 + 1 + + + + + + 1176 + 812 + 12 + 20 + + + 1183.5 + 822 + + + + + + + + Item index + 665a1634-1bde-45f9-9499-1de219e8bb0f + Index + i + false + 750fd83e-475e-457a-8900-4ec1748903c9 + 1 + + + + + + 1176 + 832 + 12 + 20 + + + 1183.5 + 842 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Wrap index to list bounds + a6a1c2c5-8aba-43a5-96d8-607ae4007599 + Wrap + W + false + 0 + + + + + + 1176 + 852 + 12 + 20 + + + 1183.5 + 862 + + + + + + 1 + + + + + 1 + {0} + + + + + true + + + + + + + + + + + Item at {i'} + bd698c7d-c7c4-442d-b790-ff6930fb16a5 + false + Item + i + false + 0 + + + + + + 1218 + 812 + 12 + 60 + + + 1224 + 842 + + + + + + + + + + + + + + 59daf374-bc21-4a5e-8282-5504fb7ae9ae + List Item + + + + + 0 + Retrieve a specific item from a list. + fb9384c0-9fc4-4771-931e-12d9d1a8140c + List Item + Item + + + + + + 2110 + 873 + 58 + 64 + + + 2139 + 905 + + + + + + 3 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 2e3ab970-8545-46bb-836c-1c11e5610bce + cb95db89-6165-43b6-9c41-5702bc5bf137 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + 1 + Base list + 16f25357-db5e-4c86-8f0d-baab19cf7576 + List + L + false + c818cec5-fc6d-4c1d-9452-fa15ce31c9ad + 1 + + + + + + 2112 + 875 + 12 + 20 + + + 2119.5 + 885 + + + + + + + + Item index + 78e5a5e6-d305-425f-808b-3d8f28f05fcd + Index + i + false + e023d2b7-87c6-4ca7-9350-fd27936f7322 + 1 + + + + + + 2112 + 895 + 12 + 20 + + + 2119.5 + 905 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Wrap index to list bounds + 9cc8a9d5-9c32-48b5-afcb-10fd4d4fe7e0 + Wrap + W + false + 0 + + + + + + 2112 + 915 + 12 + 20 + + + 2119.5 + 925 + + + + + + 1 + + + + + 1 + {0} + + + + + true + + + + + + + + + + + Item at {i'} + 4f71d325-568e-44cb-a557-d39b0f640dcd + false + Item + i + false + 0 + + + + + + 2154 + 875 + 12 + 60 + + + 2160 + 905 + + + + + + + + + + + + + + 59daf374-bc21-4a5e-8282-5504fb7ae9ae + List Item + + + + + 0 + Retrieve a specific item from a list. + 3a996974-9fdf-40c8-a956-b66641f9c5bd + List Item + Item + + + + + + 2068 + 613 + 58 + 64 + + + 2097 + 645 + + + + + + 3 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 2e3ab970-8545-46bb-836c-1c11e5610bce + cb95db89-6165-43b6-9c41-5702bc5bf137 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + 1 + Base list + a9ae7317-bc7b-4d77-869c-f93099caf911 + List + L + false + 018e7fe5-7b7b-4795-a848-46b5058d6488 + 1 + + + + + + 2070 + 615 + 12 + 20 + + + 2077.5 + 625 + + + + + + + + Item index + 44ebbdc6-3053-4e94-ab6d-24348b41e457 + Index + i + false + 0255eb72-e138-4712-a86e-b6296f1f1490 + 1 + + + + + + 2070 + 635 + 12 + 20 + + + 2077.5 + 645 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Wrap index to list bounds + e9cd87fc-db59-45be-96c7-7ecfa6f4c9c7 + Wrap + W + false + 0 + + + + + + 2070 + 655 + 12 + 20 + + + 2077.5 + 665 + + + + + + 1 + + + + + 1 + {0} + + + + + true + + + + + + + + + + + Item at {i'} + 4066d8af-276e-49f9-8416-1ae7d13ef971 + false + Item + i + false + 0 + + + + + + 2112 + 615 + 12 + 60 + + + 2118 + 645 + + + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 0255eb72-e138-4712-a86e-b6296f1f1490 + Number Slider + + false + 0 + + + + + + 1873 + 636 + 157 + 20 + + + 1873.841 + 636.2581 + + + + + + 3 + 1 + 1 + 112 + 0 + 0 + 93 + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 750fd83e-475e-457a-8900-4ec1748903c9 + Number Slider + + false + 0 + + + + + + 876 + 698 + 157 + 20 + + + 876.7572 + 698.089 + + + + + + 3 + 1 + 1 + 8 + 0 + 0 + 1 + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + 35751672-ebc9-4233-9be8-f68aeadf8d8a + f46e49b5-a27e-4610-b94f-dcf0d663895b + e533476e-d3b3-41dc-9462-9ffadaba3637 + b9b52d86-fc50-4ce3-b550-202f5693849d + 5cbb2f1e-7022-4588-b5fb-a85d2fe8c21a + 525a8a4c-8c1f-4a47-834b-2d42acb85441 + 3b72ac8b-7146-4b8a-911c-328bd10ac3ca + bc133248-6369-4f26-ab75-31129d6ab664 + 320bc8a7-6a2c-4cec-8e37-6b688afe3895 + 2e3ae2ac-a7c1-44bb-a86f-5a7999e61ed2 + 10 + 755672f7-d4af-4cb7-906f-a9077b832137 + Group + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + b9b52d86-fc50-4ce3-b550-202f5693849d + 320bc8a7-6a2c-4cec-8e37-6b688afe3895 + 2e3ae2ac-a7c1-44bb-a86f-5a7999e61ed2 + 3 + 35751672-ebc9-4233-9be8-f68aeadf8d8a + Group + + + + + + + + + + + 934ede4a-924a-4973-bb05-0dc4b36fae75 + Vector 2Pt + + + + + Create a vector between two points. + true + f46e49b5-a27e-4610-b94f-dcf0d663895b + Vector 2Pt + Vec2Pt + + + + + + 674 + 1293 + 56 + 64 + + + 701 + 1325 + + + + + + Base point + 0c345aba-11f4-4231-b3b4-25250bba3544 + Point A + A + false + 525a8a4c-8c1f-4a47-834b-2d42acb85441 + 1 + + + + + + 676 + 1295 + 10 + 20 + + + 682.5 + 1305 + + + + + + + + Tip point + 848400e0-b6fa-43a1-b456-ce50322a51a3 + Point B + B + false + b4e83913-46de-4496-9089-b58121746140 + 1 + + + + + + 676 + 1315 + 10 + 20 + + + 682.5 + 1325 + + + + + + + + Unitize output + 297f3dd3-f86d-4c78-bd1b-124dcd05383f + Unitize + U + false + 0 + + + + + + 676 + 1335 + 10 + 20 + + + 682.5 + 1345 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + Vector + 1e4caf5f-fc54-4a0b-b759-6ec01d965038 + Vector + V + false + 0 + + + + + + 716 + 1295 + 12 + 30 + + + 722 + 1310 + + + + + + + + Vector length + fed3c08b-9b83-43ac-89c4-04c1ae878a36 + Length + L + false + 0 + + + + + + 716 + 1325 + 12 + 30 + + + 722 + 1340 + + + + + + + + + + + + e9eb1dcf-92f6-4d4d-84ae-96222d60f56b + Move + + + + + Translate (move) an object along a vector. + true + e533476e-d3b3-41dc-9462-9ffadaba3637 + Move + Move + + + + + + 740 + 1373 + 57 + 44 + + + 767 + 1395 + + + + + + Base geometry + 896513e5-7fd1-4411-8d4b-2298a93ced19 + Geometry + G + true + 072893bb-d29b-4453-9920-6bdae29f92c8 + 1 + + + + + + 742 + 1375 + 10 + 20 + + + 748.5 + 1385 + + + + + + + + Translation vector + c9692661-855e-4de4-9176-2694fd83efd1 + Motion + T + false + 38496f12-3fa3-4951-8b4b-ec92bde66774 + 1 + + + + + + 742 + 1395 + 10 + 20 + + + 748.5 + 1405 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 10 + + + + + + + + + + + + Translated geometry + 1e3a6989-884e-4d2d-847d-94e01060038c + Geometry + G + false + 0 + + + + + + 782 + 1375 + 13 + 20 + + + 788.5 + 1385 + + + + + + + + Transformation data + 3d6f823e-ee0d-4d88-87f8-cef87dac3d52 + Transform + X + false + 0 + + + + + + 782 + 1395 + 13 + 20 + + + 788.5 + 1405 + + + + + + + + + + + + 378d0690-9da0-4dd1-ab16-1d15246e7c22 + Orient + + + + + Orient an object. Orientation is sometimes called a 'ChangeBasis tranformation'. It allows for remapping of geometry from one axis-system to another. + true + b9b52d86-fc50-4ce3-b550-202f5693849d + Orient + Orient + + + + + + 582 + 1368 + 57 + 64 + + + 609 + 1400 + + + + + + Base geometry + db60be57-34a1-45a4-b32d-0f4b52cb26bc + Geometry + G + true + 6088143e-d145-4a47-8c41-51e32cd53990 + 1 + + + + + + 584 + 1370 + 10 + 20 + + + 590.5 + 1380 + + + + + + + + Initial plane + 13ed2577-e817-47a7-9b3c-d0d2bbf4aba9 + Source + A + false + c00816ee-4bf1-4794-ace7-e6996d258d91 + 1 + + + + + + 584 + 1390 + 10 + 20 + + + 590.5 + 1400 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + + + + Final plane + 45364268-2ca9-4085-a25d-67c85ce27b0b + Target + B + false + 36430155-f01b-465b-af8d-7c97573ae688 + 1 + + + + + + 584 + 1410 + 10 + 20 + + + 590.5 + 1420 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + + + + Reoriented geometry + 072893bb-d29b-4453-9920-6bdae29f92c8 + Geometry + G + false + 0 + + + + + + 624 + 1370 + 13 + 30 + + + 630.5 + 1385 + + + + + + + + Transformation data + bce18a41-d369-4c4a-a8b7-b8c1ac413881 + Transform + X + false + 0 + + + + + + 624 + 1400 + 13 + 30 + + + 630.5 + 1415 + + + + + + + + + + + + 56b92eab-d121-43f7-94d3-6cd8f0ddead8 + Vector XYZ + + + + + Create a vector from {xyz} components. + 5cbb2f1e-7022-4588-b5fb-a85d2fe8c21a + Vector XYZ + Vec + + + + + + 659 + 1396 + 71 + 64 + + + 701 + 1428 + + + + + + Vector {x} component + 2c3fcb97-60bf-4d17-94ce-fc50af6dad69 + X component + X + false + 0 + + + + + + 661 + 1398 + 25 + 20 + + + 683 + 1408 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Vector {y} component + 3e6f7417-04d1-4100-8ca1-9f11d51dfb18 + Y component + Y + false + 0 + + + + + + 661 + 1418 + 25 + 20 + + + 683 + 1428 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Vector {z} component + 35fd88ad-9e56-4e85-af9d-c9eec2954b94 + -0.5*x + Z component + Z + false + 38da7932-bace-4722-99e8-41530a8b7e79 + 1 + + + + + + 661 + 1438 + 25 + 20 + + + 683 + 1448 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Vector construct + 38496f12-3fa3-4951-8b4b-ec92bde66774 + Vector + V + false + 0 + + + + + + 716 + 1398 + 12 + 30 + + + 722 + 1413 + + + + + + + + Vector length + 5dfbbc30-15b1-4c28-8a02-f9a7d4414327 + Length + L + false + 0 + + + + + + 716 + 1428 + 12 + 30 + + + 722 + 1443 + + + + + + + + + + + + fbac3e32-f100-4292-8692-77240a42fd1a + Point + + + + + Contains a collection of three-dimensional points + 525a8a4c-8c1f-4a47-834b-2d42acb85441 + Point + Pt + false + 3b72ac8b-7146-4b8a-911c-328bd10ac3ca + 1 + + + + + + 587 + 1296 + 50 + 20 + + + 612.3378 + 1306.013 + + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + 3b72ac8b-7146-4b8a-911c-328bd10ac3ca + Panel + + false + 0 + 0 + 0,0,0 + + + + + + 509 + 1294 + 56 + 24 + + 0 + 0 + 0 + + 509.7157 + 1294.605 + + + + + + 1 + + 255;255;250;90 + + true + true + true + false + false + true + + + + + Courier New + 8 + + + + + + + + + + + e9eb1dcf-92f6-4d4d-84ae-96222d60f56b + Move + + + + + Translate (move) an object along a vector. + bc133248-6369-4f26-ab75-31129d6ab664 + Move + Move + + + + + + 760 + 1278 + 57 + 44 + + + 787 + 1300 + + + + + + Base geometry + 6946457f-c2b3-4481-a7a0-2e31abff5fcb + Geometry + G + true + 1e3a6989-884e-4d2d-847d-94e01060038c + 1 + + + + + + 762 + 1280 + 10 + 20 + + + 768.5 + 1290 + + + + + + + + Translation vector + 8d66f433-e197-4df4-96d2-a5013283c246 + Motion + T + false + 1e4caf5f-fc54-4a0b-b759-6ec01d965038 + 1 + + + + + + 762 + 1300 + 10 + 20 + + + 768.5 + 1310 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 10 + + + + + + + + + + + + Translated geometry + 97ebc644-a351-4065-9935-a1f74ff41a9f + Geometry + G + false + 0 + + + + + + 802 + 1280 + 13 + 20 + + + 808.5 + 1290 + + + + + + + + Transformation data + 85ff3a85-3889-4977-9a0d-c524e73b9230 + Transform + X + false + 0 + + + + + + 802 + 1300 + 13 + 20 + + + 808.5 + 1310 + + + + + + + + + + + + fad344bc-09b1-4855-a2e6-437ef5715fe3 + YZ Plane + + + + + World YZ plane. + 320bc8a7-6a2c-4cec-8e37-6b688afe3895 + YZ Plane + YZ + + + + + + 508 + 1429 + 56 + 28 + + + 535 + 1443 + + + + + + Origin of plane + a9b8b49b-653e-43d8-85a9-52d8208a797b + Origin + O + false + 0 + + + + + + 510 + 1431 + 10 + 24 + + + 516.5 + 1443 + + + + + + 1 + + + + + 1 + {0} + + + + + + + 0 + 0 + 0 + + + + + + + + + + + + World YZ plane + 36430155-f01b-465b-af8d-7c97573ae688 + Plane + P + false + 0 + + + + + + 550 + 1431 + 12 + 24 + + + 556 + 1443 + + + + + + + + + + + + 8cc3a196-f6a0-49ea-9ed9-0cb343a3ae64 + XZ Plane + + + + + World XZ plane. + 2e3ae2ac-a7c1-44bb-a86f-5a7999e61ed2 + XZ Plane + XZ + + + + + + 507 + 1409 + 56 + 28 + + + 534 + 1423 + + + + + + Origin of plane + 80f6ce13-d8e7-452b-b513-714fcf4258d3 + Origin + O + false + 0 + + + + + + 509 + 1411 + 10 + 24 + + + 515.5 + 1423 + + + + + + 1 + + + + + 1 + {0} + + + + + + + 0 + 0 + 0 + + + + + + + + + + + + World XZ plane + c00816ee-4bf1-4794-ace7-e6996d258d91 + Plane + P + false + 0 + + + + + + 549 + 1411 + 12 + 24 + + + 555 + 1423 + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + e023d2b7-87c6-4ca7-9350-fd27936f7322 + Number Slider + + false + 0 + + + + + + 1885 + 895 + 157 + 20 + + + 1885.355 + 895.4221 + + + + + + 3 + 1 + 1 + 100 + 0 + 0 + 15 + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 3cf3489b-a232-4df1-af3a-85d4e2b9062d + Number Slider + + false + 0 + + + + + + 1355 + 851 + 157 + 20 + + + 1355.635 + 851.5984 + + + + + + 3 + 1 + 1 + 8 + 0 + 0 + 8 + + + + + + + + + + + + + + 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 + + + + + \ No newline at end of file diff --git a/lecture_06/assignment_05/asling/assembly.json b/lecture_06/assignment_05/asling/assembly.json new file mode 100644 index 0000000..5c2acd5 --- /dev/null +++ b/lecture_06/assignment_05/asling/assembly.json @@ -0,0 +1,9817 @@ +{ + "dtype": "assembly/Assembly", + "value": { + "compas": "1.1.0", + "data": { + "adjacency": { + "0": {}, + "1": {}, + "2": {}, + "3": {}, + "4": {}, + "5": {}, + "6": {}, + "7": {}, + "8": {} + }, + "attributes": { + "approach_offset": 0.050000000000000003, + "element": { + "dtype": "compas.geometry/Box", + "value": { + "frame": { + "point": [ + 0.0, + 0.0, + 0.0 + ], + "xaxis": [ + 1.0, + 0.0, + 0.0 + ], + "yaxis": [ + 0.0, + 1.0, + 0.0 + ] + }, + "xsize": 0.016, + "ysize": 0.031, + "zsize": 0.012 + } + }, + "home_config": { + "dtype": "compas_fab.robots/Configuration", + "value": { + "joint_names": [], + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.5700000000000001, + -1.5700000000000001, + 1.5700000000000001, + -1.5700000000000001, + -1.5700000000000001, + -3.1400000000000001 + ] + } + }, + "name": "Network", + "pick_t0cf_frame": { + "dtype": "compas.geometry/Frame", + "value": { + "point": [ + 0.63915837424403632, + -0.1580254622009728, + 0.082120000000000012 + ], + "xaxis": [ + 0.00079632671073326345, + 0.0, + -0.99999968293183472 + ], + "yaxis": [ + 0.99999968293183472, + 0.0, + 0.00079632671073326345 + ] + } + }, + "pick_trajectory": { + "dtype": "compas_fab.robots/JointTrajectory", + "value": { + "attached_collision_meshes": [ + { + "collision_mesh": { + "frame": { + "point": [ + 0.0, + 0.0, + 0.0 + ], + "xaxis": [ + 1.0, + 0.0, + 0.0 + ], + "yaxis": [ + 0.0, + 1.0, + 0.0 + ] + }, + "id": "attached_tool_link_collision_0", + "mesh": { + "compas": "1.1.0", + "data": { + "attributes": { + "name": "Mesh" + }, + "dea": {}, + "dfa": {}, + "dva": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "edgedata": {}, + "face": { + "0": [ + 0, + 1, + 2 + ], + "1": [ + 1, + 3, + 2 + ], + "10": [ + 9, + 11, + 10 + ], + "100": [ + 52, + 70, + 35 + ], + "101": [ + 52, + 35, + 13 + ], + "102": [ + 1, + 52, + 13 + ], + "103": [ + 1, + 13, + 15 + ], + "104": [ + 83, + 1, + 15 + ], + "105": [ + 83, + 15, + 49 + ], + "106": [ + 82, + 83, + 49 + ], + "107": [ + 82, + 49, + 48 + ], + "108": [ + 79, + 82, + 48 + ], + "109": [ + 79, + 48, + 45 + ], + "11": [ + 10, + 12, + 1 + ], + "110": [ + 80, + 79, + 45 + ], + "111": [ + 80, + 45, + 47 + ], + "112": [ + 81, + 80, + 47 + ], + "113": [ + 81, + 47, + 46 + ], + "114": [ + 85, + 81, + 46 + ], + "115": [ + 85, + 46, + 51 + ], + "116": [ + 10, + 85, + 51 + ], + "117": [ + 10, + 51, + 37 + ], + "118": [ + 84, + 10, + 37 + ], + "119": [ + 84, + 37, + 50 + ], + "12": [ + 6, + 1, + 12 + ], + "120": [ + 75, + 84, + 50 + ], + "121": [ + 75, + 50, + 41 + ], + "122": [ + 71, + 75, + 41 + ], + "123": [ + 71, + 41, + 36 + ], + "124": [ + 78, + 71, + 36 + ], + "125": [ + 78, + 36, + 44 + ], + "126": [ + 76, + 78, + 44 + ], + "127": [ + 76, + 44, + 43 + ], + "128": [ + 77, + 76, + 43 + ], + "129": [ + 77, + 43, + 42 + ], + "13": [ + 13, + 14, + 15 + ], + "130": [ + 72, + 77, + 42 + ], + "131": [ + 72, + 42, + 38 + ], + "132": [ + 74, + 72, + 38 + ], + "133": [ + 74, + 38, + 40 + ], + "134": [ + 9, + 74, + 40 + ], + "135": [ + 9, + 40, + 19 + ], + "136": [ + 73, + 9, + 19 + ], + "137": [ + 73, + 19, + 39 + ], + "138": [ + 58, + 73, + 39 + ], + "139": [ + 58, + 39, + 23 + ], + "14": [ + 16, + 15, + 17 + ], + "140": [ + 59, + 58, + 23 + ], + "141": [ + 59, + 23, + 25 + ], + "142": [ + 60, + 59, + 25 + ], + "143": [ + 60, + 25, + 24 + ], + "144": [ + 61, + 60, + 24 + ], + "145": [ + 61, + 24, + 26 + ], + "146": [ + 54, + 61, + 26 + ], + "147": [ + 54, + 26, + 18 + ], + "148": [ + 62, + 54, + 18 + ], + "149": [ + 62, + 18, + 27 + ], + "15": [ + 18, + 19, + 16 + ], + "150": [ + 57, + 62, + 27 + ], + "151": [ + 57, + 27, + 22 + ], + "152": [ + 5, + 57, + 22 + ], + "153": [ + 5, + 22, + 16 + ], + "154": [ + 55, + 5, + 16 + ], + "155": [ + 55, + 16, + 20 + ], + "156": [ + 56, + 55, + 20 + ], + "157": [ + 56, + 20, + 21 + ], + "158": [ + 0, + 56, + 21 + ], + "159": [ + 0, + 21, + 17 + ], + "16": [ + 20, + 16, + 21 + ], + "160": [ + 64, + 0, + 17 + ], + "161": [ + 64, + 17, + 29 + ], + "162": [ + 7, + 86, + 8 + ], + "163": [ + 8, + 86, + 87 + ], + "164": [ + 87, + 11, + 8 + ], + "165": [ + 88, + 7, + 4 + ], + "166": [ + 4, + 2, + 88 + ], + "167": [ + 12, + 89, + 6 + ], + "168": [ + 6, + 89, + 90 + ], + "169": [ + 6, + 90, + 3 + ], + "17": [ + 18, + 16, + 22 + ], + "170": [ + 3, + 90, + 2 + ], + "171": [ + 91, + 12, + 11 + ], + "172": [ + 7, + 88, + 86 + ], + "173": [ + 2, + 90, + 88 + ], + "174": [ + 89, + 12, + 91 + ], + "175": [ + 87, + 91, + 11 + ], + "176": [ + 92, + 93, + 94 + ], + "177": [ + 92, + 94, + 95 + ], + "178": [ + 93, + 96, + 97 + ], + "179": [ + 93, + 97, + 94 + ], + "18": [ + 16, + 17, + 21 + ], + "180": [ + 96, + 98, + 99 + ], + "181": [ + 96, + 99, + 97 + ], + "182": [ + 98, + 92, + 95 + ], + "183": [ + 98, + 95, + 99 + ], + "184": [ + 94, + 99, + 95 + ], + "185": [ + 99, + 94, + 97 + ], + "186": [ + 88, + 93, + 86 + ], + "187": [ + 92, + 86, + 93 + ], + "188": [ + 91, + 87, + 92 + ], + "189": [ + 86, + 92, + 87 + ], + "19": [ + 23, + 24, + 25 + ], + "190": [ + 92, + 98, + 91 + ], + "191": [ + 91, + 98, + 89 + ], + "192": [ + 96, + 89, + 98 + ], + "193": [ + 88, + 90, + 96 + ], + "194": [ + 89, + 96, + 90 + ], + "195": [ + 96, + 93, + 88 + ], + "2": [ + 2, + 4, + 0 + ], + "20": [ + 26, + 24, + 18 + ], + "21": [ + 18, + 24, + 19 + ], + "22": [ + 18, + 22, + 27 + ], + "23": [ + 28, + 29, + 17 + ], + "24": [ + 30, + 15, + 31 + ], + "25": [ + 32, + 28, + 30 + ], + "26": [ + 17, + 30, + 28 + ], + "27": [ + 15, + 30, + 17 + ], + "28": [ + 33, + 34, + 31 + ], + "29": [ + 15, + 14, + 31 + ], + "3": [ + 4, + 5, + 0 + ], + "30": [ + 33, + 31, + 14 + ], + "31": [ + 14, + 13, + 35 + ], + "32": [ + 16, + 19, + 15 + ], + "33": [ + 19, + 24, + 23 + ], + "34": [ + 36, + 37, + 19 + ], + "35": [ + 36, + 19, + 38 + ], + "36": [ + 39, + 19, + 23 + ], + "37": [ + 19, + 40, + 38 + ], + "38": [ + 36, + 41, + 37 + ], + "39": [ + 38, + 42, + 43 + ], + "4": [ + 1, + 6, + 3 + ], + "40": [ + 44, + 36, + 43 + ], + "41": [ + 36, + 38, + 43 + ], + "42": [ + 15, + 19, + 37 + ], + "43": [ + 45, + 46, + 47 + ], + "44": [ + 45, + 15, + 37 + ], + "45": [ + 15, + 45, + 48 + ], + "46": [ + 48, + 49, + 15 + ], + "47": [ + 45, + 37, + 46 + ], + "48": [ + 50, + 37, + 41 + ], + "49": [ + 37, + 51, + 46 + ], + "5": [ + 7, + 8, + 9 + ], + "50": [ + 52, + 1, + 53 + ], + "51": [ + 54, + 5, + 9 + ], + "52": [ + 55, + 56, + 5 + ], + "53": [ + 54, + 57, + 5 + ], + "54": [ + 5, + 56, + 0 + ], + "55": [ + 58, + 59, + 60 + ], + "56": [ + 61, + 54, + 60 + ], + "57": [ + 54, + 9, + 60 + ], + "58": [ + 54, + 62, + 57 + ], + "59": [ + 63, + 0, + 64 + ], + "6": [ + 4, + 7, + 5 + ], + "60": [ + 65, + 66, + 1 + ], + "61": [ + 67, + 65, + 63 + ], + "62": [ + 0, + 63, + 65 + ], + "63": [ + 1, + 0, + 65 + ], + "64": [ + 68, + 66, + 69 + ], + "65": [ + 1, + 66, + 53 + ], + "66": [ + 68, + 53, + 66 + ], + "67": [ + 53, + 70, + 52 + ], + "68": [ + 9, + 58, + 60 + ], + "69": [ + 71, + 9, + 10 + ], + "7": [ + 9, + 5, + 7 + ], + "70": [ + 71, + 72, + 9 + ], + "71": [ + 73, + 58, + 9 + ], + "72": [ + 9, + 72, + 74 + ], + "73": [ + 71, + 10, + 75 + ], + "74": [ + 72, + 76, + 77 + ], + "75": [ + 78, + 76, + 71 + ], + "76": [ + 71, + 76, + 72 + ], + "77": [ + 79, + 80, + 81 + ], + "78": [ + 79, + 10, + 1 + ], + "79": [ + 1, + 82, + 79 + ], + "8": [ + 10, + 11, + 12 + ], + "80": [ + 82, + 1, + 83 + ], + "81": [ + 79, + 81, + 10 + ], + "82": [ + 84, + 75, + 10 + ], + "83": [ + 10, + 81, + 85 + ], + "84": [ + 63, + 64, + 29 + ], + "85": [ + 63, + 29, + 28 + ], + "86": [ + 67, + 63, + 28 + ], + "87": [ + 67, + 28, + 32 + ], + "88": [ + 65, + 67, + 32 + ], + "89": [ + 65, + 32, + 30 + ], + "9": [ + 11, + 9, + 8 + ], + "90": [ + 66, + 65, + 30 + ], + "91": [ + 66, + 30, + 31 + ], + "92": [ + 69, + 66, + 31 + ], + "93": [ + 69, + 31, + 34 + ], + "94": [ + 68, + 69, + 34 + ], + "95": [ + 68, + 34, + 33 + ], + "96": [ + 53, + 68, + 33 + ], + "97": [ + 53, + 33, + 14 + ], + "98": [ + 70, + 53, + 14 + ], + "99": [ + 70, + 14, + 35 + ] + }, + "facedata": { + "0": {}, + "1": {}, + "10": {}, + "100": {}, + "101": {}, + "102": {}, + "103": {}, + "104": {}, + "105": {}, + "106": {}, + "107": {}, + "108": {}, + "109": {}, + "11": {}, + "110": {}, + "111": {}, + "112": {}, + "113": {}, + "114": {}, + "115": {}, + "116": {}, + "117": {}, + "118": {}, + "119": {}, + "12": {}, + "120": {}, + "121": {}, + "122": {}, + "123": {}, + "124": {}, + "125": {}, + "126": {}, + "127": {}, + "128": {}, + "129": {}, + "13": {}, + "130": {}, + "131": {}, + "132": {}, + "133": {}, + "134": {}, + "135": {}, + "136": {}, + "137": {}, + "138": {}, + "139": {}, + "14": {}, + "140": {}, + "141": {}, + "142": {}, + "143": {}, + "144": {}, + "145": {}, + "146": {}, + "147": {}, + "148": {}, + "149": {}, + "15": {}, + "150": {}, + "151": {}, + "152": {}, + "153": {}, + "154": {}, + "155": {}, + "156": {}, + "157": {}, + "158": {}, + "159": {}, + "16": {}, + "160": {}, + "161": {}, + "162": {}, + "163": {}, + "164": {}, + "165": {}, + "166": {}, + "167": {}, + "168": {}, + "169": {}, + "17": {}, + "170": {}, + "171": {}, + "172": {}, + "173": {}, + "174": {}, + "175": {}, + "176": {}, + "177": {}, + "178": {}, + "179": {}, + "18": {}, + "180": {}, + "181": {}, + "182": {}, + "183": {}, + "184": {}, + "185": {}, + "186": {}, + "187": {}, + "188": {}, + "189": {}, + "19": {}, + "190": {}, + "191": {}, + "192": {}, + "193": {}, + "194": {}, + "195": {}, + "2": {}, + "20": {}, + "21": {}, + "22": {}, + "23": {}, + "24": {}, + "25": {}, + "26": {}, + "27": {}, + "28": {}, + "29": {}, + "3": {}, + "30": {}, + "31": {}, + "32": {}, + "33": {}, + "34": {}, + "35": {}, + "36": {}, + "37": {}, + "38": {}, + "39": {}, + "4": {}, + "40": {}, + "41": {}, + "42": {}, + "43": {}, + "44": {}, + "45": {}, + "46": {}, + "47": {}, + "48": {}, + "49": {}, + "5": {}, + "50": {}, + "51": {}, + "52": {}, + "53": {}, + "54": {}, + "55": {}, + "56": {}, + "57": {}, + "58": {}, + "59": {}, + "6": {}, + "60": {}, + "61": {}, + "62": {}, + "63": {}, + "64": {}, + "65": {}, + "66": {}, + "67": {}, + "68": {}, + "69": {}, + "7": {}, + "70": {}, + "71": {}, + "72": {}, + "73": {}, + "74": {}, + "75": {}, + "76": {}, + "77": {}, + "78": {}, + "79": {}, + "8": {}, + "80": {}, + "81": {}, + "82": {}, + "83": {}, + "84": {}, + "85": {}, + "86": {}, + "87": {}, + "88": {}, + "89": {}, + "9": {}, + "90": {}, + "91": {}, + "92": {}, + "93": {}, + "94": {}, + "95": {}, + "96": {}, + "97": {}, + "98": {}, + "99": {} + }, + "max_face": 195, + "max_vertex": 99, + "vertex": { + "0": { + "x": 0.014816462062299252, + "y": -0.0047768764197826385, + "z": -0.029393302276730537 + }, + "1": { + "x": 0.014816462062299252, + "y": 0.029754780232906342, + "z": 0.0011990766506642103 + }, + "10": { + "x": 0.014816462062299252, + "y": 0.011672346852719784, + "z": 0.027396004647016525 + }, + "11": { + "x": 0.014816462062299252, + "y": -0.010380548425018787, + "z": 0.011409667320549488 + }, + "12": { + "x": 0.014816462062299252, + "y": 0.010380548425018787, + "z": 0.011409667320549488 + }, + "13": { + "x": 0.0, + "y": 0.029561810195446014, + "z": -0.0035894536413252354 + }, + "14": { + "x": 0.0, + "y": 0.026903789490461349, + "z": -0.012766006402671337 + }, + "15": { + "x": 0.0, + "y": 0.029754780232906342, + "z": 0.0011990766506642103 + }, + "16": { + "x": 0.0, + "y": -0.017889462411403656, + "z": -0.023806551471352577 + }, + "17": { + "x": 0.0, + "y": -0.0047768764197826385, + "z": -0.029393302276730537 + }, + "18": { + "x": 0.0, + "y": -0.026903789490461349, + "z": -0.012766006402671337 + }, + "19": { + "x": 0.0, + "y": -0.025789311155676842, + "z": 0.014889465644955635 + }, + "2": { + "x": 0.014816462062299252, + "y": 0.010380548425018787, + "z": -0.011409667320549488 + }, + "20": { + "x": 0.0, + "y": -0.01383895892649889, + "z": -0.026367934420704842 + }, + "21": { + "x": 0.0, + "y": -0.0094300340861082077, + "z": -0.028246402740478516 + }, + "22": { + "x": 0.0, + "y": -0.021476637572050095, + "z": -0.020628591999411583 + }, + "23": { + "x": 0.0, + "y": -0.029177118092775345, + "z": 0.0059565515257418156 + }, + "24": { + "x": 0.0, + "y": -0.029561810195446014, + "z": -0.0035894536413252354 + }, + "25": { + "x": 0.0, + "y": -0.029754780232906342, + "z": 0.0011990766506642103 + }, + "26": { + "x": 0.0, + "y": -0.028603203594684601, + "z": -0.008285018615424633 + }, + "27": { + "x": 0.0, + "y": -0.024507580325007439, + "z": -0.016916360706090927 + }, + "28": { + "x": 0.0, + "y": 0.0047768764197826385, + "z": -0.029393302276730537 + }, + "29": { + "x": 0.0, + "y": -2.045294925157771e-19, + "z": -0.02977893128991127 + }, + "3": { + "x": 0.014816462062299252, + "y": 0.010380548425018787, + "z": -0.008969305083155632 + }, + "30": { + "x": 0.0, + "y": 0.01383895892649889, + "z": -0.026367934420704842 + }, + "31": { + "x": 0.0, + "y": 0.017889462411403656, + "z": -0.023806551471352577 + }, + "32": { + "x": 0.0, + "y": 0.0094300340861082077, + "z": -0.028246402740478516 + }, + "33": { + "x": 0.0, + "y": 0.024507580325007439, + "z": -0.016916360706090927 + }, + "34": { + "x": 0.0, + "y": 0.021476637572050095, + "z": -0.020628591999411583 + }, + "35": { + "x": 0.0, + "y": 0.028603203594684601, + "z": -0.008285018615424633 + }, + "36": { + "x": 0.0, + "y": -0.0023962082341313362, + "z": 0.029682368040084839 + }, + "37": { + "x": 0.0, + "y": 0.011672346852719784, + "z": 0.027396004647016525 + }, + "38": { + "x": 0.0, + "y": -0.019747084006667137, + "z": 0.022289849817752838 + }, + "39": { + "x": 0.0, + "y": -0.027843784540891647, + "z": 0.010559754446148872 + }, + "4": { + "x": 0.014816462062299252, + "y": 0.0057308273389935493, + "z": -0.011409667320549488 + }, + "40": { + "x": 0.0, + "y": -0.023066908121109009, + "z": 0.018833547830581665 + }, + "41": { + "x": 0.0, + "y": 0.0023962082341313362, + "z": 0.029682368040084839 + }, + "42": { + "x": 0.0, + "y": -0.015915822237730026, + "z": 0.025168856605887413 + }, + "43": { + "x": 0.0, + "y": -0.011672346852719784, + "z": 0.027396004647016525 + }, + "44": { + "x": 0.0, + "y": -0.0071265646256506443, + "z": 0.028913609683513641 + }, + "45": { + "x": 0.0, + "y": 0.025789311155676842, + "z": 0.014889465644955635 + }, + "46": { + "x": 0.0, + "y": 0.019747084006667137, + "z": 0.022289849817752838 + }, + "47": { + "x": 0.0, + "y": 0.023066908121109009, + "z": 0.018833547830581665 + }, + "48": { + "x": 0.0, + "y": 0.027843784540891647, + "z": 0.010559754446148872 + }, + "49": { + "x": 0.0, + "y": 0.029177118092775345, + "z": 0.0059565515257418156 + }, + "5": { + "x": 0.014816462062299252, + "y": -0.017889462411403656, + "z": -0.023806551471352577 + }, + "50": { + "x": 0.0, + "y": 0.0071265646256506443, + "z": 0.028913609683513641 + }, + "51": { + "x": 0.0, + "y": 0.015915822237730026, + "z": 0.025168856605887413 + }, + "52": { + "x": 0.014816462062299252, + "y": 0.029561810195446014, + "z": -0.0035894536413252354 + }, + "53": { + "x": 0.014816462062299252, + "y": 0.026903789490461349, + "z": -0.012766006402671337 + }, + "54": { + "x": 0.014816462062299252, + "y": -0.026903789490461349, + "z": -0.012766006402671337 + }, + "55": { + "x": 0.014816462062299252, + "y": -0.01383895892649889, + "z": -0.026367934420704842 + }, + "56": { + "x": 0.014816462062299252, + "y": -0.0094300340861082077, + "z": -0.028246402740478516 + }, + "57": { + "x": 0.014816462062299252, + "y": -0.021476637572050095, + "z": -0.020628591999411583 + }, + "58": { + "x": 0.014816462062299252, + "y": -0.029177118092775345, + "z": 0.0059565515257418156 + }, + "59": { + "x": 0.014816462062299252, + "y": -0.029754780232906342, + "z": 0.0011990766506642103 + }, + "6": { + "x": 0.014816462062299252, + "y": 0.010380548425018787, + "z": 0.0059743961319327354 + }, + "60": { + "x": 0.014816462062299252, + "y": -0.029561810195446014, + "z": -0.0035894536413252354 + }, + "61": { + "x": 0.014816462062299252, + "y": -0.028603203594684601, + "z": -0.008285018615424633 + }, + "62": { + "x": 0.014816462062299252, + "y": -0.024507580325007439, + "z": -0.016916360706090927 + }, + "63": { + "x": 0.014816462062299252, + "y": 0.0047768764197826385, + "z": -0.029393302276730537 + }, + "64": { + "x": 0.014816462062299252, + "y": -2.045294925157771e-19, + "z": -0.02977893128991127 + }, + "65": { + "x": 0.014816462062299252, + "y": 0.01383895892649889, + "z": -0.026367934420704842 + }, + "66": { + "x": 0.014816462062299252, + "y": 0.017889462411403656, + "z": -0.023806551471352577 + }, + "67": { + "x": 0.014816462062299252, + "y": 0.0094300340861082077, + "z": -0.028246402740478516 + }, + "68": { + "x": 0.014816462062299252, + "y": 0.024507580325007439, + "z": -0.016916360706090927 + }, + "69": { + "x": 0.014816462062299252, + "y": 0.021476637572050095, + "z": -0.020628591999411583 + }, + "7": { + "x": 0.014816462062299252, + "y": -0.010380548425018787, + "z": -0.011409667320549488 + }, + "70": { + "x": 0.014816462062299252, + "y": 0.028603203594684601, + "z": -0.008285018615424633 + }, + "71": { + "x": 0.014816462062299252, + "y": -0.0023962082341313362, + "z": 0.029682368040084839 + }, + "72": { + "x": 0.014816462062299252, + "y": -0.019747084006667137, + "z": 0.022289849817752838 + }, + "73": { + "x": 0.014816462062299252, + "y": -0.027843784540891647, + "z": 0.010559754446148872 + }, + "74": { + "x": 0.014816462062299252, + "y": -0.023066908121109009, + "z": 0.018833547830581665 + }, + "75": { + "x": 0.014816462062299252, + "y": 0.0023962082341313362, + "z": 0.029682368040084839 + }, + "76": { + "x": 0.014816462062299252, + "y": -0.011672346852719784, + "z": 0.027396004647016525 + }, + "77": { + "x": 0.014816462062299252, + "y": -0.015915822237730026, + "z": 0.025168856605887413 + }, + "78": { + "x": 0.014816462062299252, + "y": -0.0071265646256506443, + "z": 0.028913609683513641 + }, + "79": { + "x": 0.014816462062299252, + "y": 0.025789311155676842, + "z": 0.014889465644955635 + }, + "8": { + "x": 0.014816462062299252, + "y": -0.010380548425018787, + "z": 0.011091546155512333 + }, + "80": { + "x": 0.014816462062299252, + "y": 0.023066908121109009, + "z": 0.018833547830581665 + }, + "81": { + "x": 0.014816462062299252, + "y": 0.019747084006667137, + "z": 0.022289849817752838 + }, + "82": { + "x": 0.014816462062299252, + "y": 0.027843784540891647, + "z": 0.010559754446148872 + }, + "83": { + "x": 0.014816462062299252, + "y": 0.029177118092775345, + "z": 0.0059565515257418156 + }, + "84": { + "x": 0.014816462062299252, + "y": 0.0071265646256506443, + "z": 0.028913609683513641 + }, + "85": { + "x": 0.014816462062299252, + "y": 0.015915822237730026, + "z": 0.025168856605887413 + }, + "86": { + "x": 0.05451495572924614, + "y": -0.010380548425018787, + "z": -0.011409667320549488 + }, + "87": { + "x": 0.05451495572924614, + "y": -0.010380548425018787, + "z": 0.011409667320549488 + }, + "88": { + "x": 0.05451495572924614, + "y": -0.0068432968109846115, + "z": -0.011409667320549488 + }, + "89": { + "x": 0.05451495572924614, + "y": 0.010380548425018787, + "z": 0.011409667320549488 + }, + "9": { + "x": 0.014816462062299252, + "y": -0.025789311155676842, + "z": 0.014889465644955635 + }, + "90": { + "x": 0.05451495572924614, + "y": 0.010380548425018787, + "z": -0.011409667320549488 + }, + "91": { + "x": 0.05451495572924614, + "y": 0.0068432968109846115, + "z": 0.011409667320549488 + }, + "92": { + "x": 0.05451495572924614, + "y": -0.017271781340241432, + "z": 0.028796831145882607 + }, + "93": { + "x": 0.05451495572924614, + "y": -0.017271781340241432, + "z": -0.028796831145882607 + }, + "94": { + "x": 0.070000000298023224, + "y": -0.017271781340241432, + "z": -0.028796831145882607 + }, + "95": { + "x": 0.070000000298023224, + "y": -0.017271781340241432, + "z": 0.028796831145882607 + }, + "96": { + "x": 0.05451495572924614, + "y": 0.017271781340241432, + "z": -0.028796831145882607 + }, + "97": { + "x": 0.070000000298023224, + "y": 0.017271781340241432, + "z": -0.028796831145882607 + }, + "98": { + "x": 0.05451495572924614, + "y": 0.017271781340241432, + "z": 0.028796831145882607 + }, + "99": { + "x": 0.070000000298023224, + "y": 0.017271781340241432, + "z": 0.028796831145882607 + } + } + }, + "datatype": "compas.datastructures/Mesh" + }, + "root_name": "ee_link" + }, + "link_name": "ee_link", + "touch_links": [ + "ee_link" + ], + "weight": 0.0 + }, + { + "collision_mesh": { + "frame": { + "point": [ + 0.076000000000000012, + 0.0, + 0.0 + ], + "xaxis": [ + 0.0, + 0.0, + 1.0 + ], + "yaxis": [ + 0.0, + 1.0, + -0.0 + ] + }, + "id": "brick", + "mesh": { + "compas": "1.1.0", + "data": { + "attributes": { + "name": "Mesh" + }, + "dea": {}, + "dfa": {}, + "dva": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "edgedata": {}, + "face": { + "0": [ + 1, + 2, + 3 + ], + "1": [ + 3, + 0, + 1 + ], + "10": [ + 5, + 6, + 7 + ], + "11": [ + 7, + 4, + 5 + ], + "2": [ + 3, + 5, + 4 + ], + "3": [ + 4, + 0, + 3 + ], + "4": [ + 2, + 6, + 5 + ], + "5": [ + 5, + 3, + 2 + ], + "6": [ + 1, + 7, + 6 + ], + "7": [ + 6, + 2, + 1 + ], + "8": [ + 0, + 4, + 7 + ], + "9": [ + 7, + 1, + 0 + ] + }, + "facedata": { + "0": {}, + "1": {}, + "10": {}, + "11": {}, + "2": {}, + "3": {}, + "4": {}, + "5": {}, + "6": {}, + "7": {}, + "8": {}, + "9": {} + }, + "max_face": 11, + "max_vertex": 7, + "vertex": { + "0": { + "x": -0.0080000000000000002, + "y": -0.0155, + "z": -0.0060000000000000001 + }, + "1": { + "x": -0.0080000000000000002, + "y": 0.0155, + "z": -0.0060000000000000001 + }, + "2": { + "x": 0.0080000000000000002, + "y": 0.0155, + "z": -0.0060000000000000001 + }, + "3": { + "x": 0.0080000000000000002, + "y": -0.0155, + "z": -0.0060000000000000001 + }, + "4": { + "x": -0.0080000000000000002, + "y": -0.0155, + "z": 0.0060000000000000001 + }, + "5": { + "x": 0.0080000000000000002, + "y": -0.0155, + "z": 0.0060000000000000001 + }, + "6": { + "x": 0.0080000000000000002, + "y": 0.0155, + "z": 0.0060000000000000001 + }, + "7": { + "x": -0.0080000000000000002, + "y": 0.0155, + "z": 0.0060000000000000001 + } + } + }, + "datatype": "compas.datastructures/Mesh" + }, + "root_name": "ee_link" + }, + "link_name": "ee_link", + "touch_links": [ + "ee_link" + ], + "weight": 0.0 + } + ], + "fraction": 1.0, + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "points": [ + { + "accelerations": [ + -1.8266198090047343, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 0, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.5700000000000001, + -1.5700000000000001, + 1.5700000000000001, + -1.5700000000000001, + -1.5700000000000001, + -3.1400000000000001 + ], + "velocities": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ] + }, + { + "accelerations": [ + -1.9645866967081818, + -2.2451859935885601, + 3.0671114090628557, + -0.82152024738846774, + -0.0034621506179514866, + -1.9674554906226032 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 128084141, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.555016651278408, + -1.5882855981777575, + 1.595465044112802, + -1.5771751649027854, + -1.5700272556452106, + -3.1550063135917048 + ], + "velocities": [ + -0.20562821371567716, + -0.24407152243878077, + 0.33721169317334454, + -0.093088464812985453, + -0.00036901685912772611, + -0.20593695698548367 + ] + }, + { + "accelerations": [ + -2.2192851347990379, + -2.2193513695775899, + 2.907088474769739, + -0.68744751227903411, + -0.0036792577971465337, + -2.2222245018987565 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 180491295, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.539594488260644, + -1.6063860152327907, + 1.6203903277445819, + -1.5839963635945686, + -1.5700547819194952, + -3.1704514409710267 + ], + "velocities": [ + -0.34554886080640784, + -0.39665513237656602, + 0.54277193805352031, + -0.14604012685735673, + -0.00061024209599619319, + -0.34605496142050746 + ] + }, + { + "accelerations": [ + -2.517800168399853, + -2.2670848941082657, + 2.8677196258666648, + -0.60047730367881225, + -0.0039827868096784748, + -2.5208900784915667 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 220497589, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.5237191181545422, + -1.6243060191045773, + 1.6447915851466239, + -1.590474281824483, + -1.5700825961084861, + -3.1863497750852328 + ], + "velocities": [ + -0.44303069577969789, + -0.48953714998687103, + 0.66256637278911712, + -0.172942964153911, + -0.00076834093354497207, + -0.44366141440848406 + ] + }, + { + "accelerations": [ + -2.6992236228197077, + -2.1704590156320034, + 2.6377771073520861, + -0.46733883208622395, + -0.0040605389536161737, + -2.7022785923188568 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 253902819, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.5073759574445689, + -1.6420490295318952, + 1.6686829149993077, + -1.5966196232435206, + -1.5701107044897054, + -3.2027158994648723 + ], + "velocities": [ + -0.53156596641656806, + -0.56517954302973095, + 0.75656013403342359, + -0.19129176832512773, + -0.00090510964384218667, + -0.53230129861373654 + ] + }, + { + "accelerations": [ + -3.0965598685873483, + -2.282363592380777, + 2.690503053744453, + -0.40833053618980486, + -0.0044796378844258068, + -3.0998547387158224 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 283221379, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.4905502603157899, + -1.6596171325966049, + 1.6920768674721258, + -1.6024428780338582, + -1.5701391078043545, + -3.2195645599747849 + ], + "velocities": [ + -0.61691015963268725, + -0.63092128644149348, + 0.83529979396095033, + -0.20429266450564332, + -0.0010310144495517229, + -0.61773916940718276 + ] + }, + { + "accelerations": [ + -2.7348667773668245, + -1.6347775519862386, + 1.7558005977655566, + -0.12149224022855272, + -0.0036336621235929533, + -2.7373964534493873 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 309471336, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.4732271795798539, + -1.6770110936495781, + 1.7149845908503709, + -1.6079544566625539, + -1.5701678054688493, + -3.2369106037145654 + ], + "velocities": [ + -0.69459687011233573, + -0.6833516503535374, + 0.89493424864657789, + -0.21150535752095825, + -0.001139308756678789, + -0.69550372042203656 + ] + }, + { + "accelerations": [ + -2.5481680221843108, + -1.2235760927658446, + 1.1652998580863885, + 0.057582922828224449, + -0.0031173900089109564, + -2.5502239597895424 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 333927908, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.4553918381371906, + -1.6942303582112372, + 1.7374159610472477, + -1.6131648187161436, + -1.570196795589746, + -3.2547689078757234 + ], + "velocities": [ + -0.75965205118622792, + -0.7186659700123218, + 0.93108780313207729, + -0.21235880772743504, + -0.0012225454689034944, + -0.76061548582270011 + ] + }, + { + "accelerations": [ + -2.5205195474203665, + -0.99572375564065474, + 0.83399644105818005, + 0.16083746805853849, + -0.0028765577758114447, + -2.5223375081945045 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 357170357, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.4370294129254613, + -1.7112730419666131, + 1.7593796964432153, + -1.6180845976509688, + -1.5702260745572261, + -3.2731542954920694 + ], + "velocities": [ + -0.81874060236619151, + -0.74459556238476687, + 0.95448080519692691, + -0.20984061807000312, + -0.0012924762177944314, + -0.8197492554790442 + ] + }, + { + "accelerations": [ + -2.4205444385315498, + -0.72488078055108807, + 0.46473610329879311, + 0.25906318525817923, + -0.0025335153310980883, + -2.42206012273122 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 379477678, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.4181252328605678, + -1.7281359111325107, + 1.7808834605480788, + -1.6227247231732709, + -1.5702556369516714, + -3.2920814377100109 + ], + "velocities": [ + -0.87401784237912428, + -0.76389271890801413, + 0.96908019308472348, + -0.205164856126969, + -0.0013530481212380746, + -0.87506383799432852 + ] + }, + { + "accelerations": [ + -2.4941946958538317, + -0.61993000780249297, + 0.31966091185320039, + 0.29900349241573471, + -0.0024647506500919559, + -2.4956335814122927 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 401086046, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.3986648920669227, + -1.7448143542801968, + 1.8019339542894333, + -1.6270965415972718, + -1.5702854751557933, + -3.3115647403374777 + ], + "velocities": [ + -0.92716259668744927, + -0.77845502652170384, + 0.97758773068668503, + -0.1991354417642586, + -0.0014071195170453242, + -0.92824056082702044 + ] + }, + { + "accelerations": [ + -2.377095612283294, + -0.36786887789057626, + 0.0027215105575117025, + 0.36370171905798226, + -0.0021113675322966649, + -2.3782530942984237 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 422088281, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.3786343799259595, + -1.7613023467348969, + 1.8225369996538949, + -1.6312119351555621, + -1.57031557924873, + -3.33161821405634 + ], + "velocities": [ + -0.97842582074274742, + -0.78888037259739474, + 0.98102123802081387, + -0.19217210255266887, + -0.0014553086817119876, + -0.97953113683353976 + ] + }, + { + "accelerations": [ + -2.516408887601977, + -0.33072081545141713, + -0.035751796195258562, + 0.3648391474828887, + -0.002139770905369846, + -2.5175873249554543 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 442638331, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.3580202292229486, + -1.7775924085996428, + 1.8426976158909008, + -1.6350834400627015, + -1.5703459366395542, + -3.3522553261539385 + ], + "velocities": [ + -1.0287038413624283, + -0.79606429248042976, + 0.9806860171647217, + -0.18468458690511597, + -0.0014989969838975407, + -1.0298331627498605 + ] + }, + { + "accelerations": [ + -2.1400898736949125, + 0.083223530088303049, + -0.52403703415285474, + 0.43903805449030542, + -0.0014314908555107199, + -2.1407510324381942 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 462756683, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.3368096837311556, + -1.7936755575526639, + 1.8624200894160026, + -1.638724363436485, + -1.5703765316684486, + -3.3734888327746275 + ], + "velocities": [ + -1.0756925920439717, + -0.79859440175183882, + 0.97508135398168216, + -0.17658417925350955, + -0.0015350693454580496, + -1.0768405073200051 + ] + }, + { + "accelerations": [ + -2.2531394981159156, + 0.1106392928155546, + -0.52653104347871216, + 0.41271777558063949, + -0.0010034606861216535, + -2.2538338801663693 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 482644443, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.3149908864410575, + -1.8095412576818402, + 1.8817080384000657, + -1.6421488990702107, + -1.5704073454944423, + -3.3953305910382157 + ], + "velocities": [ + -1.1193700248082505, + -0.79666832175244018, + 0.96463519452502999, + -0.1681132331291102, + -0.0015593060866913111, + -1.1205314169505662 + ] + }, + { + "accelerations": [ + -2.3729352981910545, + 0.14284939025266902, + -0.5297745025980356, + 0.38600796412543148, + -0.0018310665872784354, + -2.3736678954053332 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 502298423, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.2925530525613877, + -1.8251774647042702, + 1.9005646600761834, + -1.64537280695306, + -1.5704381870249293, + -3.4177913858055247 + ], + "velocities": [ + -1.164820936489265, + -0.79417932266763325, + 0.95425563319731777, + -0.16026300525649262, + -0.0015871106766340765, + -1.1659963485441451 + ] + }, + { + "accelerations": [ + -2.5000595812787996, + 0.17922873379917845, + -0.5312021462693548, + 0.34965398076243254, + -0.0014279732162185222, + -2.5008361025903865 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 521714447, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.2694868433180702, + -1.8405701788199318, + 1.9189920408953194, + -1.6484112724593882, + -1.5704693496587281, + -3.4408805558118836 + ], + "velocities": [ + -1.2121173374426846, + -0.79105497288352433, + 0.94395640899290822, + -0.1531194652693787, + -0.0016187716663588604, + -1.2133073964533538 + ] + }, + { + "accelerations": [ + -1.9567872715594634, + 0.62610270821377711, + -1.0099897470032566, + 0.38150987328543545, + -0.00054461232463355255, + -1.9569826503230814 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 540887508, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.2457844130253037, + -1.8557039727408218, + 1.936992319695596, + -1.6512823666452208, + -1.5705006505960035, + -3.4646059468103401 + ], + "velocities": [ + -1.2549656855312685, + -0.78333309682173158, + 0.92916453479797201, + -0.14609459661261706, + -0.0016377605255367645, + -1.2561651059421042 + ] + }, + { + "accelerations": [ + -2.0229274138052009, + 0.6632828877416399, + -0.99150245442207996, + 0.32570323890868269, + -0.00048850233274021877, + -2.0231586357890055 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 560000867, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.2214398180468811, + -1.8705615566439395, + 1.9545670017918024, + -1.6540049295755483, + -1.5705320533350478, + -3.488973502485174 + ], + "velocities": [ + -1.2929924007685512, + -0.77101309720844557, + 0.91003916617199909, + -0.13933598465698857, + -0.0016476332637501566, + -1.2941958969417668 + ] + }, + { + "accelerations": [ + -2.0925187663287033, + 0.70507979381193608, + -0.97271143061474141, + 0.26495447154424567, + -0.00041804482751429023, + -2.0927912651618916 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 579044330, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.1964492808394456, + -1.885123824546018, + 1.9717171833170799, + -1.6565992021817195, + -1.5705635187195726, + -3.5139870004313716 + ], + "velocities": [ + -1.3321713635042394, + -0.75798666546823079, + 0.89133890726842746, + -0.13371159805965782, + -0.0016562651959418223, + -1.3333796544698848 + ] + }, + { + "accelerations": [ + -2.1659248270901665, + 0.7520627809421695, + -0.95361453603999147, + 0.19871695747729923, + -0.0003427382698514348, + -2.1662446324136915 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 598006437, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.1708115028381916, + -1.8993698173415643, + 1.9884435973981525, + -1.6590869199545049, + -1.5705950003156219, + -3.5396477392707388 + ], + "velocities": [ + -1.3725374879897818, + -0.74417477507730023, + 0.87307796342079036, + -0.12931479156259143, + -0.001663478658775603, + -1.3737513926397742 + ] + }, + { + "accelerations": [ + -2.2435557552471641, + 0.80489908982451197, + -0.93421925021754604, + 0.12630937642179541, + -0.00025197878467659218, + -2.243929581068385 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 616874419, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.1445279939904831, + -1.9132766917999693, + 2.004746649044161, + -1.6614913691176167, + -1.5706264479597236, + -3.5659542091162586 + ], + "velocities": [ + -1.4141267464133591, + -0.72949049367566376, + 0.85527099587530042, + -0.12624723782006406, + -0.0016690904608468568, + -1.415347192183356 + ] + }, + { + "accelerations": [ + -3.1321773249212033, + 0.48934890513155066, + -0.47334018275565592, + -0.019505792894027655, + -0.0010563335907576277, + -3.133277035858661 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 635634165, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.1176034108157495, + -1.9268197066012551, + 2.020626452828354, + -1.6638374452604485, + -1.5706578041406376, + -3.592901753513821 + ], + "velocities": [ + -1.4643698043522897, + -0.71736653796425998, + 0.84207946047603432, + -0.12524051298942934, + -0.0016812876892987705, + -1.465603997089165 + ] + }, + { + "accelerations": [ + -1.6250006352116351, + 1.3181509357164629, + -1.3481723990808794, + 0.026929666086512743, + 0.00086533391586055442, + -1.6248414241296874 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 654085699, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.0900459003860827, + -1.9399722217636379, + 2.0360828605460912, + -1.666151672945718, + -1.5706890077973785, + -3.620482225458622 + ], + "velocities": [ + -1.5085176402174709, + -0.70063875852595325, + 0.82522330599987948, + -0.12517322878375342, + -0.0016831216816398141, + -1.5097605927712969 + ] + }, + { + "accelerations": [ + -1.6545850649636034, + 1.3606297880928129, + -1.2967022724199668, + -0.067109687389981562, + 0.00097642024930190484, + -1.6544967745347914 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 672581238, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.061867438987929, + -1.9527057221269535, + 2.0511154905151852, + -1.6684622187296261, + -1.5707199902084572, + -3.6486836487356076 + ], + "velocities": [ + -1.5388388447858419, + -0.67587210145687648, + 0.80077092977541431, + -0.12554551550670773, + -0.0016660930469612092, + -1.5400795097084368 + ] + }, + { + "accelerations": [ + -1.6865523219002991, + 1.410195773188651, + -1.2474309498519143, + -0.16605374256641828, + 0.0011066347296008806, + -1.686540862232343 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 691101505, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.0330841602493426, + -1.9649898616085035, + 2.0657237459298896, + -1.6707988568608976, + -1.5707506793524442, + -3.6774898897883563 + ], + "velocities": [ + -1.5697695055660374, + -0.65022103471217807, + 0.77721881497219636, + -0.1277043738889809, + -0.0016468087244587884, + -1.571009247324946 + ] + }, + { + "accelerations": [ + -1.7211872576386009, + 1.4677660405110902, + -1.200521846889121, + -0.27062428915246772, + 0.0012358527688539483, + -1.7212591769803269 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 709625355, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 1.0037166574989087, + -1.9767925395468748, + 2.0799068339907754, + -1.6731929200316207, + -1.5707809947471205, + -3.7068803553632526 + ], + "velocities": [ + -1.6013218726279146, + -0.62357395252574299, + 0.75455300167104, + -0.13174739134367006, + -0.0016251197681442652, + -1.60256217402112 + ] + }, + { + "accelerations": [ + -1.7588035039595018, + 1.5343991284000569, + -1.1561643215507122, + -0.38172453183148952, + 0.0013881059325090447, + -1.7589661205313187 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 728129799, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.97379025369418792, + -1.9880800044232312, + 2.0936637713656445, + -1.6756771892748699, + -1.5708108549856843, + -3.7368297225742033 + ], + "velocities": [ + -1.6335084422677355, + -0.59580708203684951, + 0.73275536475680636, + -0.1377801638737704, + -0.0016008516570058455, + -1.6347509121919481 + ] + }, + { + "accelerations": [ + -1.7997461132351371, + 1.6113398199298363, + -1.1146204131886486, + -0.5003080757106636, + 0.0015431215292589465, + -1.800007607712969 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 746590060, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.94333521838444256, + -1.9988169988817563, + 2.1069933917278996, + -1.6782857672502502, + -1.570840170322664, + -3.7673077219451891 + ], + "velocities": [ + -1.6663419619573174, + -0.56678300999695108, + 0.71180263971826419, + -0.14591682054286553, + -0.0015738079651028739, + -1.6675883436598893 + ] + }, + { + "accelerations": [ + 4.7947139922207615e-14, + 2.2370822849946315, + -1.790743622813004, + -0.44893653225662283, + 0.0033244422305083307, + 0.00096962707125970672 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 764979678, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.91238692523456877, + -2.00896693845546, + 2.1198943379442912, + -1.681053880859015, + -1.5708688506231101, + -3.7982789798786234 + ], + "velocities": [ + -1.6829220686031972, + -0.53121860387210218, + 0.68494826086101601, + -0.15468396993916844, + -0.0015288008266058609, + -1.6841618785731836 + ] + }, + { + "accelerations": [ + 1.7480822733397854, + 2.681311784539175, + -2.317362696429814, + -0.36537797847864023, + 0.0048003691652986728, + 1.7501722928803745 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 783638294, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.88098592848746005, + -2.0184921361544133, + 2.1323650532850542, + -1.6840176536163809, + -1.5708968014100053, + -3.8297029421957296 + ], + "velocities": [ + -1.6663419619573174, + -0.48506707077443162, + 0.64638270515389551, + -0.16230756160833917, + -0.0014524793929433222, + -1.667552967891873 + ] + }, + { + "accelerations": [ + 1.6598460102918591, + 2.5203944565347278, + -2.0886993352532706, + -0.43296276535183281, + 0.0045580650446974333, + 1.6617025197672539 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 802918639, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.84917794954586157, + -2.0273540679750508, + 2.1444037613411795, + -1.6872138158516399, + -1.5709239278757972, + -3.8615338875504865 + ], + "velocities": [ + -1.6335084422677364, + -0.43495551684387512, + 0.60395032474144328, + -0.1700127007049011, + -0.0013623160127172031, + -1.634681445743918 + ] + }, + { + "accelerations": [ + 2.3447241134836641, + 2.5440879131751597, + -2.1444985390456854, + -0.40018666323049173, + 0.0049134809892654461, + 2.3469078455911601 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 822806778, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.81701375763476147, + -2.0355136841008648, + 2.1560084409570037, + -1.6906793702046721, + -1.570950134135493, + -3.8937210467673493 + ], + "velocities": [ + -1.5934734136376587, + -0.38447182496316545, + 0.56174672178943363, + -0.17831126062649005, + -0.001267847380610484, + -1.5946060892114282 + ] + }, + { + "accelerations": [ + 2.1905239348676031, + 2.34733833467204, + -1.9067554773582029, + -0.44103541531983004, + 0.0045596887950087213, + 2.1924477969945824 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 843489068, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.7845489363274244, + -2.0429317626753201, + 2.1671767931945154, + -1.6944512035393429, + -1.5709753254105323, + -3.9262088363130121 + ], + "velocities": [ + -1.5466095962613433, + -0.33393353894365385, + 0.51990386633955321, + -0.18701751800305777, + -0.0011699650770314895, + -1.547699850791139 + ] + }, + { + "accelerations": [ + 2.050478379665051, + 2.1751236870633255, + -1.7013464905849847, + -0.47409951409272971, + 0.0042372583498313642, + 2.0521716233864526 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 864955967, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.75184352807149746, + -2.0495693049410844, + 2.1779062028459046, + -1.69856565322968, + -1.5709994095166275, + -3.9589372137689338 + ], + "velocities": [ + -1.5011240368216117, + -0.285433715215616, + 0.48122304570412733, + -0.19684481144956201, + -0.00107562234568961, + -1.5021755188031083 + ] + }, + { + "accelerations": [ + 1.9232943852121929, + 2.0245985571471148, + -1.5241579377627017, + -0.50064589672976978, + 0.0039428850742163624, + 1.9247827579312153 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 887192738, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.71896155441422305, + -2.055387967398524, + 2.1881936954292001, + -1.7030580321537105, + -1.571022298412678, + -3.9918421576049918 + ], + "velocities": [ + -1.4569762009564309, + -0.23877868520989687, + 0.44540237294753371, + -0.20768501114927379, + -0.0009847487424380142, + -1.457992355377681 + ] + }, + { + "accelerations": [ + 2.3863767108108189, + 1.9561069129126998, + -1.5318312558871079, + -0.42392449323583575, + 0.0040134520200071694, + 2.3880850181216258 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 910179368, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.68597041463504871, + -2.060350525020179, + 2.1980358913998073, + -1.7079621200988202, + -1.5710439097767812, + -4.0248562685459603 + ], + "velocities": [ + -1.4072305990366982, + -0.19293642740644806, + 0.41019636204131826, + -0.21831945841684128, + -0.00089307827218929698, + -1.4082098813052322 + ] + }, + { + "accelerations": [ + 2.2036165456223094, + 1.786678781759111, + -1.3571117100844976, + -0.4291449772837736, + 0.003651214652511928, + 2.2051100404204784 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 934127698, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.6529401716247365, + -2.0644213574587078, + 2.2074289594459002, + -1.7133096308536102, + -1.5710641697162298, + -4.0579094836911809 + ], + "velocities": [ + -1.3523209458290459, + -0.14816670690347683, + 0.37565045799266117, + -0.22853400017981257, + -0.00080140020969702902, + -1.3532619460851207 + ] + }, + { + "accelerations": [ + 2.5237499972755972, + 1.6636610136839582, + -1.330062192205326, + -0.33271945635251976, + 0.0035706384133259599, + 2.5253950022521003 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 959023672, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.61994273800479904, + -2.0675669497908991, + 2.2163685726696025, + -1.7191296704001242, + -1.5710830113618557, + -4.0909298903970921 + ], + "velocities": [ + -1.2932484261938151, + -0.10514686998087289, + 0.34212765519091543, + -0.23801467298474965, + -0.00071130886570642832, + -1.2941502244672214 + ] + }, + { + "accelerations": [ + 2.2946807949737162, + 1.4894645803377362, + -1.1660928763985228, + -0.32247966231284003, + 0.0031720666555887086, + 2.2961108622283759 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 985105790, + "secs": 0 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.58705098498143837, + -2.069756395024092, + 2.2248498683320377, + -1.7254481945076459, + -1.5711003769085556, + -4.1238446174229102 + ], + "velocities": [ + -1.2304815030748435, + -0.064080109653041839, + 0.30962508856587889, + -0.24655576291533576, + -0.00062349862206659669, + -1.2313432645006483 + ] + }, + { + "accelerations": [ + 2.488047897752407, + 1.33413993377437, + -1.1177053952651677, + -0.21519790986645435, + 0.002989983134929639, + 2.4895754647584716 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 12369537, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.55433779915044001, + -2.0709618865611601, + 2.2328674146767495, + -1.7322874827265031, + -1.5711162224473614, + -4.1565807781240682 + ], + "velocities": [ + -1.1650546552469638, + -0.025542651459635135, + 0.27842958807073087, + -0.25386851548138717, + -0.00053934522036398519, + -1.1658759640666849 + ] + }, + { + "accelerations": [ + -2.509378313647737, + 1.365341737491313, + 0.042933475639384072, + -1.4112701146944495, + 0.00082601567337506614, + -2.5114604502209414 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 41091714, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.52187511235702877, + -2.0711591903178013, + 2.2404151903748861, + -1.7396656506132124, + -1.5711305116146579, + -4.1890664405980607 + ], + "velocities": [ + -1.1650546552469641, + 0.012078151991985274, + 0.26338145547535918, + -0.27646543965556647, + -0.00048603294037101658, + -1.1658834783689285 + ] + }, + { + "accelerations": [ + -2.3555151463064643, + 1.6722395816274036, + -0.090548884007682628, + -1.5846629516872319, + 0.0012585469661083942, + -2.3576235562073564 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 67879565, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.48973294390522171, + -2.0703280787178535, + 2.2474865740408259, + -1.7475962033123988, + -1.5711432243225252, + -4.2212315854715632 + ], + "velocities": [ + -1.2304815030748428, + 0.052751484948097636, + 0.26280085089516386, + -0.3166383454246251, + -0.00045821881713362306, + -1.2313666135946755 + ] + }, + { + "accelerations": [ + -2.636498607865474, + 2.0333684862968804, + -0.14332617134317996, + -1.8933730621095335, + 0.0015545853444605285, + -2.6389739217132862 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 93059850, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.45797847824509369, + -2.0684527196094482, + 2.2540743519515027, + -1.7560876587148566, + -1.5711543506780046, + -4.2530090282187398 + ], + "velocities": [ + -1.2932484261938137, + 0.099283376944271418, + 0.25987592770469442, + -0.36032456333835311, + -0.00042290255322978865, + -1.2941911268619717 + ] + }, + { + "accelerations": [ + 1.6393899959916836, + 1.7954793869991785, + -1.0226447418243867, + -0.77227267581832482, + 0.002984268671096644, + 1.6399343988149981 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 116677603, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.42667521469138342, + -2.0655220049854948, + 2.2601707416626819, + -1.7651432435138754, + -1.5711638907712866, + -4.2843352694441519 + ], + "velocities": [ + -1.3059223247762359, + 0.14543525501344626, + 0.24596957969158845, + -0.3926040458339134, + -0.00036845852567592407, + -1.3068887508589251 + ] + }, + { + "accelerations": [ + 2.5676167965736556, + 1.5580502889190133, + -1.1425867165481416, + -0.41390914726498984, + 0.0029965993842824379, + 2.5688309806117995 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 140614347, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.39588221647062627, + -2.0615298101607351, + 2.2657674332947293, + -1.7747606752573133, + -1.5711718612203598, + -4.3151512458346257 + ], + "velocities": [ + -1.2552141812866477, + 0.18572439682325675, + 0.2199197411032762, + -0.40681776872711972, + -0.00029654589319809757, + -1.2561593726619871 + ] + }, + { + "accelerations": [ + 2.3702016088434559, + 1.4245183512012611, + -1.049292477787686, + -0.37371787069734219, + 0.0026737983038438232, + 2.3712721279656459 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 165311110, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.36565347417688199, + -2.0564751790278732, + 2.2708556515942031, + -1.7849320428201738, + -1.5711782851474738, + -4.3454029667096057 + ], + "velocities": [ + -1.1942932240916431, + 0.22251954570152657, + 0.19287821241169825, + -0.41653359163145964, + -0.00022660458945970244, + -1.1952102374229159 + ] + }, + { + "accelerations": [ + 2.6045102464362406, + 1.1928657587725449, + -1.0246543181361272, + -0.16634763272491321, + 0.0024204240068794371, + 2.6057876054643656 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 190741568, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.33603740839281471, + -2.0503624258316249, + 2.2754262344179201, + -1.7956437830225818, + -1.5711831956944884, + -4.3750420113998825 + ], + "velocities": [ + -1.1308435398600198, + 0.25582735805318024, + 0.16645218233596495, + -0.42337232645174994, + -0.00016173550581555709, + -1.1317305868445575 + ] + }, + { + "accelerations": [ + 2.3658239248441424, + 1.0537917512028248, + -0.92909687633573412, + -0.12294253006218457, + 0.0020958863630225664, + 2.36695445862714 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 217139324, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.30707651572255179, + -2.0432011532455938, + 2.2794697286893739, + -1.8068767594884452, + -1.5711866372740093, + -4.4040258832158283 + ], + "velocities": [ + -1.0653057685431317, + 0.28544381427466442, + 0.14069085045431573, + -0.42717975402633912, + -0.00010221026239146877, + -1.066161073059003 + ] + }, + { + "accelerations": [ + 2.5471963154132671, + 0.7877483221951509, + -0.88610917350952034, + 0.10040411486313505, + 0.001819814815720053, + 2.5485346939671705 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 244491963, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.2788071596926151, + -2.0350061866506777, + 2.2829765015918602, + -1.8186064408546179, + -1.5711886626434151, + -4.4323182185490095 + ], + "velocities": [ + -0.99786547468651809, + 0.31062918130278477, + 0.1158044732138525, + -0.42742660000042243, + -4.8577353347397985e-05, + -0.99868685625798448 + ] + }, + { + "accelerations": [ + -2.6134804477557285, + 2.623996128699849, + -0.39180215666796653, + -2.235317859600551, + 0.0017455037010448773, + -2.6165398131827997 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 273121349, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.25125950160702609, + -2.0257974268062195, + 2.2859368638830233, + -1.8308031717091704, + -1.5711893242148141, + -4.459888856019341 + ], + "velocities": [ + -0.99786547468651809, + 0.35744685888577932, + 0.098058531361329554, + -0.45651235075704844, + 7.0150032969599406e-07, + -0.99870985638909793 + ] + }, + { + "accelerations": [ + -2.5603584036602185, + 3.095649221389106, + -0.61341526705990457, + -2.4854041341440758, + 0.0021859027854238908, + -2.5636646040591375 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 299054149, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.2244575695477202, + -2.0155996228793724, + 2.2883412010311268, + -1.8434325311260831, + -1.571188688572718, + -4.4867137674729971 + ], + "velocities": [ + -1.0653057685431322, + 0.43167709400036991, + 0.085097592763066165, + -0.5178636217188225, + 5.1652644647101528e-05, + -1.0662329334895251 + ] + }, + { + "accelerations": [ + -0.95242858248428053, + 2.8168472428697853, + -0.9270715629711862, + -1.891362498833326, + 0.0024064824720425233, + -0.95457963259597878 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 322787821, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.19841943477859481, + -2.0044420774059182, + 2.2901801108573974, + -1.8564557650774045, + -1.571186818497853, + -4.5127748815815423 + ], + "velocities": [ + -1.108122583330192, + 0.50272391755669044, + 0.066748773660008767, + -0.57061935894827531, + 0.00010665289222463069, + -1.1091157018101592 + ] + }, + { + "accelerations": [ + 6.9943105334726423e-14, + 2.5997498315173218, + -1.1188656623316775, + -1.4815035174536986, + 0.0024507776700067466, + -0.0014655183732822108 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 345360287, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.17315749505224709, + -1.9923582857003748, + 2.2914445413649438, + -1.8698302850624202, + -1.5711837822388408, + -4.5380598005342794 + ], + "velocities": [ + -1.1191484057770684, + 0.56421974675776276, + 0.043584488929630627, + -0.60897615502370606, + 0.00016174285084613932, + -1.120182709720636 + ] + }, + { + "accelerations": [ + -4.1269169558189206e-14, + 2.7758308388434685, + -1.2490761917236781, + -1.5276590615928456, + 0.0014488475969951287, + -0.0016182919802148472 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 367232866, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.1486788334436101, + -1.9793855226353354, + 2.2921259264412543, + -1.8835102166231203, + -1.5711796488883589, + -4.5625614412051148 + ], + "velocities": [ + -1.119148405777068, + 0.62297640215291739, + 0.017711423264870373, + -0.64187635871625148, + 0.00020456483861288558, + -1.1202164075917724 + ] + }, + { + "accelerations": [ + 0.52959018301401262, + 2.6076615601338484, + -1.3779705442786574, + -1.2295319461915484, + 0.0036912729399701744, + 0.52834887929795438 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 388403480, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.12498577397840994, + -1.965564359830587, + 2.292216332719907, + -1.8974471537239161, + -1.5711749880591195, + -4.5862774795925034 + ], + "velocities": [ + -1.1136080671346078, + 0.68012676171143949, + -0.010145353063378406, + -0.67117801005167366, + 0.00025877206291446476, + -1.1147064690342625 + ] + }, + { + "accelerations": [ + 0.53713762956550459, + 2.7034341275201359, + -1.4971609705740156, + -1.2063005627472982, + 0.002520974138864832, + 0.53578572305542138 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 409079100, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.10207578756152123, + -1.9509382827833985, + 2.2917085173389906, + -1.9115901214585187, + -1.5711688393671055, + -4.6092104446418114 + ], + "velocities": [ + -1.1025822446877305, + 0.73501561419160666, + -0.039850733406239139, + -0.69636009795239739, + 0.00032313381815394485, + -1.1037074388178005 + ] + }, + { + "accelerations": [ + 1.0797703906354148, + 2.379910228685354, + -1.5765167834414167, + -0.8028542356869327, + 0.0023484397768466559, + 1.0788890120846371 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 429253225, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.079942819466446144, + -1.9355530049472764, + 2.2905961080846233, + -1.9258871081481224, + -1.5711618010361266, + -4.6313663910740503 + ], + "velocities": [ + -1.0862881906971782, + 0.78644731543664448, + -0.0709214275144886, + -0.71671598744727283, + 0.0003723871371733815, + -1.0874360137415802 + ] + }, + { + "accelerations": [ + 1.0752661705613871, + 2.3861153635862435, + -1.6660958309796667, + -0.71947349550181838, + 0.0023086715066275043, + 1.0743168654952613 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 449119354, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.058577203432955756, + -1.9194560699284589, + 2.2888736658849931, + -1.9402851364092017, + -1.5711539361319498, + -4.6527549851793095 + ], + "velocities": [ + -1.064884021857835, + 0.83378298412807794, + -0.10312005400156346, + -0.73184225151776605, + 0.00041864465822025188, + -1.0660500219441276 + ] + }, + { + "accelerations": [ + 1.0714531910067362, + 2.3870944338622868, + -1.760859760547768, + -0.62568492957373456, + 0.0022715524894969708, + 1.0704368959242576 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 468668949, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.037966290911003946, + -1.9026962874685711, + 2.2865367531971201, + -1.9547309562489357, + -1.5711453070547723, + -4.6733888754061192 + ], + "velocities": [ + -1.0439015997037888, + 0.8804364418731907, + -0.13660767869550583, + -0.7449973746609807, + 0.00046341490908237133, + -1.0450868062894547 + ] + }, + { + "accelerations": [ + 1.0682217407243129, + 2.3824975013107004, + -1.8602994816219531, + -0.52164695552470486, + 0.0022374147179489595, + 1.0671400007097793 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 487895937, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + 0.01809491513269261, + -1.8853232182509132, + 2.2835819937732151, + -1.9691716324548698, + -1.5711359735891643, + -4.6932832285631969 + ], + "velocities": [ + -1.0233326141591892, + 0.92628696507941255, + -0.17140986249262402, + -0.75603513209629092, + 0.00050676244006631955, + -1.0245379838742226 + ] + }, + { + "accelerations": [ + 1.0788844160706974, + 2.3582529851551706, + -1.9605526941562987, + -0.39713477660045704, + 0.0021980669599702945, + 1.0777554809120036 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 506796472, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.0010541700894558823, + -1.8673866742507983, + 2.2800071085664531, + -1.9835550793466699, + -1.5711259924207559, + -4.7124552908011328 + ], + "velocities": [ + -1.0030419735282139, + 0.97109201617953067, + -0.20751117909755962, + -0.76472831539411579, + 0.00054868373558677487, + -1.0042682316829004 + ] + }, + { + "accelerations": [ + 1.2152199212395309, + 2.1870117112844403, + -2.0251851794549465, + -0.16110124600842904, + 0.002076494580177586, + 1.2142132253823517 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 525373459, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.019499882985288527, + -1.848936244830244, + 2.2758109323054856, + -1.9978305507657239, + -1.5711154169457433, + -4.7309239803757484 + ], + "velocities": [ + -0.98172947438130698, + 1.0133510809332706, + -0.2445520387820877, + -0.76993453499178888, + 0.00058842301650453756, + -0.98297559144041946 + ] + }, + { + "accelerations": [ + 1.0589497958281542, + 2.3135342902338594, + -2.1658719506411233, + -0.14711815844674764, + 0.0021338802828552396, + 1.0576945643088007 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 543675461, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.037262441624249291, + -1.8300208554973316, + 2.2709934110362453, + -2.0119490782368437, + -1.5711042972392684, + -4.7487095153211039 + ], + "velocities": [ + -0.96092138970646379, + 1.054497198356996, + -0.28286694419363562, + -0.77275412464274362, + 0.00062692083564152017, + -0.96218817247314625 + ] + }, + { + "accelerations": [ + 0.91932724696505963, + 2.454599840547536, + -2.3313477135102612, + -0.12287909823676274, + 0.0022136754861476677, + 0.91781766311002499 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 561651153, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.05436302884403791, + -1.8106883651085723, + 2.2655555816860988, + -2.0258638529076225, + -1.5710926800187159, + -4.7658330784770548 + ], + "velocities": [ + -0.94313963742525109, + 1.0973140131440546, + -0.32324818251746346, + -0.77518144749505424, + 0.00066596519866634046, + -0.94443123261364437 + ] + }, + { + "accelerations": [ + 1.3104659804859173, + 1.9391237563007948, + -2.2911348271362919, + 0.35284607248487937, + 0.0018931006711160314, + 1.3094572288147435 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 579256646, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.070823494727245195, + -1.7909852058878837, + 2.2594995349191631, + -2.0395305479275656, + -1.5710806086981679, + -4.7823165199400757 + ], + "velocities": [ + -0.92350326189538445, + 1.1361040636987934, + -0.36401984640021035, + -0.77318921472826418, + 0.00070220973082433906, + -0.9248171057830048 + ] + }, + { + "accelerations": [ + 1.1775385429983076, + 2.0272952981602237, + -2.4288505668986358, + 0.40223155726634258, + 0.0019430456750846564, + 1.1763170522333726 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 596627070, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.086666095922269995, + -1.7709560693371156, + 2.2528283630049248, + -2.0529075800126586, + -1.5710681234805504, + -4.7981820963767188 + ], + "velocities": [ + -0.90189759263244762, + 1.1705291529329314, + -0.40498315999741141, + -0.76663786147387736, + 0.00073550640668991756, + -0.90323078274689927 + ] + }, + { + "accelerations": [ + 1.0594606098646031, + 2.1242756897922486, + -2.5858389193956937, + 0.46209104779617494, + 0.0020086336333417845, + 1.0580243034569361 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 613725095, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.10191327022395447, + -1.7506436397563299, + 2.2455460946187813, + -2.0659563103615688, + -1.5710552614937614, + -4.813452245565486 + ], + "velocities": [ + -0.88277390839900294, + 1.2059973567959523, + -0.44782238916725936, + -0.75925653636280266, + 0.00076926879866707717, + -0.88412979391516 + ] + }, + { + "accelerations": [ + 0.95374615371625604, + 2.2304985609739525, + -2.7628467243379786, + 0.53273530684500514, + 0.0020892354688441836, + 0.95209047229614752 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 630518664, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.11658744423481078, + -1.7300883758278294, + 2.2376576186879538, + -2.0786411866554637, + -1.57104205691591, + -4.8281493941061813 + ], + "velocities": [ + -0.86586785105489583, + 1.242540282704226, + -0.49270198563394796, + -0.75091217498019325, + 0.0008036574532135298, + -0.86724967142782527 + ] + }, + { + "accelerations": [ + 2.486567010043621, + -0.21954682535464151, + -1.8157346690238902, + 2.0376050176374032, + 0.00048228176373792028, + 2.4874910107679402 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 646980715, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.13071087151599989, + -1.7093283395195586, + 2.2291685994100314, + -2.0909298289327602, + -1.5710285411249481, + -4.8422957955878951 + ], + "velocities": [ + -0.83735826045620021, + 1.259267342305582, + -0.53070007864791946, + -0.72961869210017105, + 0.00082501879540320604, + -0.83874619845449283 + ] + }, + { + "accelerations": [ + 1.0635702184151974, + 1.7554520208708873, + -2.7152853230771146, + 0.96038627525194109, + 0.0017724192942172674, + 1.0621977225568016 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 663624928, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.14430549842797291, + -1.6883990705273224, + 2.220085384576731, + -2.1027930632085869, + -1.5710147428992509, + -4.8559133963471863 + ], + "velocities": [ + -0.80799841271981787, + 1.2719412408880046, + -0.56814239804409039, + -0.70482647578387425, + 0.00084364148680468305, + -0.80939003291210421 + ] + }, + { + "accelerations": [ + 1.1170729048724104, + 1.590801695964742, + -2.7558353332779562, + 1.1656515673687127, + 0.0016766498324883327, + 1.1157801864303349 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 680000113, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.15739285482524909, + -1.6673335036198302, + 2.2104149093499865, + -2.1142049078217529, + -1.5710006885268717, + -4.8690237263104592 + ], + "velocities": [ + -0.79014020964353748, + 1.2993608771706642, + -0.61295368762501834, + -0.68742523578161374, + 0.00087189888389715509, + -0.79155366566678742 + ] + }, + { + "accelerations": [ + 1.0361716432617629, + 1.6481883500808243, + -2.9002983230307433, + 1.2526190811019142, + 0.0017312700584094713, + 1.034719256217151 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 696133427, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.16999396671911632, + -1.6461619254799065, + 2.2001645972898176, + -2.1251425173390928, + -1.5709864020708548, + -4.8816478114313009 + ], + "velocities": [ + -0.77277035773471003, + 1.3254780308017939, + -0.65855837608627588, + -0.66792860516401986, + 0.00089937854108503696, + -0.7742059415846001 + ] + }, + { + "accelerations": [ + 1.8836732623224302, + 2.7940836762263425e-14, + -2.1220488077927468, + 2.1236896806868439, + 0.00060807252757851926, + 1.8839024169599252 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 712007401, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.18212928826016295, + -1.6249119672089252, + 2.1893422605784529, + -2.1355860902849253, + -1.5709719054518383, + -4.8938061058767399 + ], + "velocities": [ + -0.74950962791239162, + 1.3386665404889959, + -0.69862987566851875, + -0.64102850153124291, + 0.00091806418152904181, + -0.75095501242292972 + ] + }, + { + "accelerations": [ + 2.5967640762779989, + -1.6397927135356549, + -1.1849873342528014, + 2.8274361771426562, + -0.00055441510654030733, + 2.598661337681242 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 727921252, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.1938186504249792, + -1.6036086282199344, + 2.1779560008409571, + -2.1455187459616707, + -1.5709572186149368, + -4.9055184406939256 + ], + "velocities": [ + -0.71365492894761473, + 1.3254780308017948, + -0.72502430970556908, + -0.6014111551694008, + 0.00091843746255310099, + -0.71508323309980781 + ] + }, + { + "accelerations": [ + 2.3506424757776192, + -1.5742646939565144, + -1.1040627269868064, + 2.6807352126860069, + -0.0005541068912819423, + 2.3523821952985449 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 744178564, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.20508122404763332, + -1.5822743271226785, + 2.1660141118945133, + -2.1549263761176256, + -1.5709423597819969, + -4.9168039866289828 + ], + "velocities": [ + -0.67346505474241936, + 1.2993608771706644, + -0.74362202663033328, + -0.5566551479386137, + 0.00090942781672044971, + -0.67486381217692615 + ] + }, + { + "accelerations": [ + 2.4877362024236547, + -2.2464639952765513, + -0.57079559137749325, + 2.8199448419646935, + -0.0010764055982046738, + 2.4901307448433885 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 760771239, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.21593549511598495, + -1.5609289752136166, + 2.1535249856726435, + -2.1637974775264572, + -1.5709273454484765, + -4.9276812297579307 + ], + "velocities": [ + -0.63321182912032359, + 1.2675153423865813, + -0.75749566004955748, + -0.51089359391430844, + 0.00089581308313310356, + -0.63457613529277157 + ] + }, + { + "accelerations": [ + 2.2279412862980683, + -2.1176748593451848, + -0.48967731048328067, + 2.6097698337192976, + -0.001037802849657138, + 2.230145497058472 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 777861527, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.22639925029660232, + -1.5395900681871049, + 2.1404970219090624, + -2.1721229697470212, + -1.5709121906536014, + -4.9381679567183348 + ], + "velocities": [ + -0.59294667380291566, + 1.2302379036675504, + -0.76654775496394179, + -0.46452048694590664, + 0.00087775104959866867, + -0.59427170532782503 + ] + }, + { + "accelerations": [ + 2.0007884571914949, + -1.9975889940915275, + -0.41571451957845429, + 2.4154873961255214, + -0.001000750172873794, + 2.0028265034996799 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 795451819, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.23648957107266855, + -1.5182727920179708, + 2.1269385424407665, + -2.1798960036209016, + -1.5708969090323208, + -4.9482812490203942 + ], + "velocities": [ + -0.55578099061191888, + 1.1940567889068832, + -0.77450193313358595, + -0.4203447500214561, + 0.00085982541841700866, + -0.55706872982203903 + ] + }, + { + "accelerations": [ + 1.8013992068411186, + -1.8853745291455288, + -0.34808645386255321, + 2.2354392915968244, + -0.00096487396475527024, + 1.8032905857941253 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 813545678, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.24622283491551319, + -1.4969901391568607, + 2.1128577103558319, + -2.1871117641189919, + -1.5708815130091567, + -4.9580374840622028 + ], + "velocities": [ + -0.521405805973299, + 1.1589397553791403, + -0.78140389071255956, + -0.3782881273711346, + 0.00084204591372858632, + -0.52265801214394969 + ] + }, + { + "accelerations": [ + 1.8652281566070144, + -2.3501151642980207, + 0.12796474728887766, + 2.2243048132875853, + -0.0013523570214833665, + 1.8676097550253914 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 832147905, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.25561472224888682, + -1.4757530316049172, + 2.0982624543712514, + -2.193767271835243, + -1.5708660137426878, + -4.9674523424414536 + ], + "velocities": [ + -0.48720199322931423, + 1.1193700248082505, + -0.78338445488099806, + -0.33669926525185867, + 0.000820377148160079, + -0.48841427620150363 + ] + }, + { + "accelerations": [ + 1.6562688528971707, + -2.1762613194405316, + 0.1722860981452875, + 2.0059058166100576, + -0.0012741390965094934, + 1.6584596423665345 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 851455759, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.26468022794399743, + -1.4545704477172865, + 2.0831603981726681, + -2.1998611852150787, + -1.5708504214892205, + -4.9765408189089193 + ], + "velocities": [ + -0.45323436540502993, + 1.0756925920439713, + -0.78047718206100725, + -0.29588969900176043, + 0.00079502862518962569, + -0.45440252967266015 + ] + }, + { + "accelerations": [ + 1.6624112264353315, + -2.4947430609534416, + 0.58299977146037574, + 1.913768037077632, + -0.001560780917329046, + 1.6649553966637505 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 871489079, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.27343367653775413, + -1.4334495501171469, + 2.0675587949972747, + -2.2053936074955529, + -1.570834745474371, + -4.9853172380524322 + ], + "velocities": [ + -0.41989578710238595, + 1.0287038413624283, + -0.77280380329722975, + -0.25653457452102613, + 0.00076649066442306733, + -0.42101631283546442 + ] + }, + { + "accelerations": [ + 1.4536262633643471, + -2.265890332798032, + 0.58743493788424761, + 1.6802458541520486, + -0.001439135899925778, + 1.4559346163697962 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 892477349, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.28188874018785209, + -1.4123958123424147, + 2.0514644668329924, + -2.2103658991155593, + -1.570818994108667, + -4.9937952719840979 + ], + "velocities": [ + -0.38723054073853558, + 0.97877640776560648, + -0.76051399373636042, + -0.21885695068040711, + 0.00073502334976156781, + -0.38830017595892907 + ] + }, + { + "accelerations": [ + 1.4165239807064196, + -2.445381182609196, + 0.90827194902109576, + 1.5389238686731941, + -0.0016225564928129025, + 1.419048490810731 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 914461771, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.29005845877055236, + -1.391413142345076, + 2.0348837481339448, + -2.2147804980833965, + -1.5708031749438578, + -5.0019879606863302 + ], + "velocities": [ + -0.35559325548993348, + 0.92677656990893165, + -0.74393062502090213, + -0.18340072300722549, + 0.00070121153245767233, + -0.35660953974943022 + ] + }, + { + "accelerations": [ + 1.3225276209561241, + -2.4675119944047417, + 1.1138578275040307, + 1.3554033453326133, + -0.0016872356219702058, + 1.3251010143898856 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 937716899, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.29795526143100864, + -1.3705040012241203, + 2.0178224333571504, + -2.2186407485913948, + -1.5707872949330892, + -5.0099077331887711 + ], + "velocities": [ + -0.32368124503701479, + 0.86947034835973191, + -0.72027423124353418, + -0.14970935406419325, + 0.00066258704357667966, + -0.3246380558810617 + ] + }, + { + "accelerations": [ + -0.50512578401445007, + 2.4760612612019162, + -3.0490865857899738, + 0.57186264920149299, + 0.002085418891508014, + -0.50800387808583891 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 962525141, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.3055909892196067, + -1.3496695159836529, + 2.0002857280887572, + -2.2219507396538098, + -1.5707713602648123, + -5.0175664306643437 + ], + "velocities": [ + -0.31383851669935436, + 0.86947034835973191, + -0.74340113489498982, + -0.12657535484754079, + 0.00066728503132045241, + -0.31479886937211704 + ] + }, + { + "accelerations": [ + -0.14909447658506741, + 1.6171720899091246, + -2.4645838170490642, + 0.84677951515366445, + 0.0014458003002509117, + -0.15104570677051316 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 985614317, + "secs": 1 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.31297691825986435, + -1.3289095852850745, + 1.9822782028146786, + -2.2247151529201417, + -1.5707553766305848, + -5.0249753291865433 + ], + "velocities": [ + -0.32157177013186988, + 0.91739287581121165, + -0.80776062889525546, + -0.11015945428728999, + 0.00070859344706327332, + -0.32258863411650995 + ] + }, + { + "accelerations": [ + -0.16001710233408992, + 1.7536389415170688, + -2.716618439220658, + 0.96229318786383478, + 0.0015642751343742942, + -0.16213593786477851 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 7723279, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.32012378324223051, + -1.3082229775136034, + 1.9638037489973634, + -2.2269391208218683, + -1.5707393491737229, + -5.0321451634343699 + ], + "velocities": [ + -0.32498797911735056, + 0.95464191915117613, + -0.86500522523997025, + -0.090178471395521112, + 0.00074185700374129488, + -0.32604981856040571 + ] + }, + { + "accelerations": [ + 1.1398855767694804, + -2.179845192519525, + 0.9134312045508447, + 1.267931200390918, + -0.0015161942709079664, + 1.1421574639106289 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 28897461, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.32704180089945939, + -1.2876074206094397, + 1.9448655365923633, + -2.2286280942638035, + -1.5707232825504365, + -5.0390861501425999 + ], + "velocities": [ + -0.31436448451199961, + 0.94999073840130843, + -0.88450066239831193, + -0.066022835118964465, + 0.00074234994532706793, + -0.31542462686299566 + ] + }, + { + "accelerations": [ + 1.1197065076272865, + -2.3519308549321405, + 1.2502114209258639, + 1.1032786132160124, + -0.0016917662939657954, + 1.1222030465836161 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 51078527, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.33374069327130357, + -1.2670596833206431, + 1.9254659723375636, + -2.2297877197004734, + -1.5707071809548372, + -5.0458080114035937 + ], + "velocities": [ + -0.28922978724862147, + 0.89952020808378486, + -0.86033095279128358, + -0.039687774045557851, + 0.00070660734455861942, + -0.29023681096948273 + ] + }, + { + "accelerations": [ + 1.1615659208122879, + -2.7356881751313153, + 1.8182082577265635, + 0.91919468992355868, + -0.0020349773867662604, + 1.1645271219985744 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 74551181, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.34022971056656376, + -1.2465756476513223, + 1.905606657998937, + -2.2304237248795662, + -1.570691048235578, + -5.0523199973862125 + ], + "velocities": [ + -0.26227397865983093, + 0.83928940885130121, + -0.82387176540017304, + -0.015877438996925713, + 0.00066246298272865252, + -0.26321636887512545 + ] + }, + { + "accelerations": [ + 1.0412646789602631, + -2.6000294988992518, + 1.8873767127937224, + 0.71423922197574718, + -0.0019663966880861285, + 1.0441073495426825 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 99895788, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.34651765353328923, + -1.2261503723988381, + 1.8852883478704889, + -2.2305418129388737, + -1.5706748878173515, + -5.0586309089234396 + ], + "velocities": [ + -0.23430475827327502, + 0.77146093931896564, + -0.77668065908337491, + 0.0048018665522606384, + 0.00061157962019057349, + -0.23517335364411029 + ] + }, + { + "accelerations": [ + 1.0107308413869782, + -2.7489919637940363, + 2.2440014468270997, + 0.50660490482846421, + -0.002119232421457058, + 1.0137723649144652 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 127537146, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.352612895158809, + -1.205778147700463, + 1.8645109044877883, + -2.2301475634097438, + -1.5706587029241632, + -5.064749118857991 + ], + "velocities": [ + -0.20570360102487117, + 0.69674463551331045, + -0.71880303845306204, + 0.021685216571442803, + 0.00055448323288158395, + -0.20648998011638181 + ] + }, + { + "accelerations": [ + -0.3947934309592192, + 2.0370661566006927, + -2.7289694922872387, + 0.69096106880992469, + 0.0016845719504571378, + -0.39714837018751131 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 158499139, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.35852340174019237, + -1.1854525406100103, + 1.8432732519212438, + -2.229246340210107, + -1.57064249634263, + -5.0706825936099387 + ], + "velocities": [ + -0.19674458536203993, + 0.68664962922211426, + -0.72635741782595042, + 0.039344294272925934, + 0.0005483923751351252, + -0.19752129304382013 + ] + }, + { + "accelerations": [ + 0.082668506734495509, + 0.43876420399629434, + -1.1103959048958574, + 0.67155162351010622, + 0.00040496656454205231, + 0.082125920582851841 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 186798902, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.36425675312908568, + -1.1651664316498271, + 1.8215733253188657, + -2.2278432044385204, + -1.5706262706725445, + -5.0764389130049983 + ], + "velocities": [ + -0.20143464139209516, + 0.72298097005199979, + -0.78235563820337073, + 0.058996091067832511, + 0.00057902752922129133, + -0.20225384538905006 + ] + }, + { + "accelerations": [ + 0.99755158769236052, + -3.025166111634797, + 2.7841001349319181, + 0.24276496621070559, + -0.0023904885177187, + 1.0009540352150601 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 214577660, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.36982016223250963, + -1.1449120423509345, + 1.7994080159098984, + -2.2259428319156527, + -1.5706100282934796, + -5.0820252898871523 + ], + "velocities": [ + -0.18545522606551046, + 0.68418796668207382, + -0.7565601340334247, + 0.072017709175100572, + 0.0005491899792585737, + -0.18623148740652282 + ] + }, + { + "accelerations": [ + 0.85634918789908898, + -2.7602172594429843, + 2.7039046225723617, + 0.057824606328174939, + -0.0021991166609419692, + 0.85947022720173794 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 246226138, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.37522049371521093, + -1.1246809537024391, + 1.776773110202301, + -2.2235494340613071, + -1.5705937712631866, + -5.0874485890446834 + ], + "velocities": [ + -0.15590751649685997, + 0.59177413514011912, + -0.66869622411771223, + 0.076618874831245909, + 0.00047585509730282819, + -0.15657955348247407 + ] + }, + { + "accelerations": [ + 0.79576984275746454, + -2.7806054093838397, + 2.9351733287836326, + -0.15309415264703463, + -0.0022304072620352089, + 0.79892624851479788 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 283368645, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.38046428184125902, + -1.1044641153569916, + 1.7536632219180377, + -2.2206666804593409, + -1.5705775015357819, + -5.0927153446912303 + ], + "velocities": [ + -0.12437017909319042, + 0.48556634450272629, + -0.56019174863608534, + 0.074379324708935615, + 0.0003909195096032308, + -0.1249218644521598 + ] + }, + { + "accelerations": [ + 0.70112778582661339, + -2.6630020817763285, + 3.0087179494829916, + -0.34435099249949064, + -0.0021440392661719594, + 0.7041551677045691 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 330723239, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.38555774754930561, + -1.0842518453925638, + 1.7300717153960081, + -2.2172976226376897, + -1.5705612208477275, + -5.0978317777834068 + ], + "velocities": [ + -0.085649982023210447, + 0.34360966348412658, + -0.40416636447438803, + 0.060384405961459359, + 0.00027680287415623669, + -0.086040385378377882 + ] + }, + { + "accelerations": [ + -0.53553109861910075, + 2.3746329857308659, + -2.9817545970731074, + 0.60597654693312009, + 0.0019115082860713317, + -0.53822248839332265 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 408368032, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.39050681469322612, + -1.0640338202522364, + 1.7059906185495775, + -2.2134446170267337, + -1.5705449308168145, + -5.1028038121122403 + ], + "velocities": [ + -0.080726101631449859, + 0.33571110746154215, + -0.40472124131739623, + 0.068844171216326883, + 0.00027043219516134485, + -0.081107266675281092 + ] + }, + { + "accelerations": [ + -0.43582945049488753, + 2.1645478839648487, + -2.896503508964948, + 0.73095631993361943, + 0.0017342898513116576, + -0.43826806557690018 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 457597331, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.39531712551999204, + -1.0437990543730244, + 1.6814105235228809, + -2.2091092460995387, + -1.5705286328462715, + -5.1076370899798968 + ], + "velocities": [ + -0.10742646062492077, + 0.4592760740893263, + -0.56385760127028728, + 0.10435697150621813, + 0.00036971760688383104, + -0.10794734631432425 + ] + }, + { + "accelerations": [ + 0.66821037681484785, + -2.6513304833498084, + 3.0900234734393703, + -0.4373549286494155, + -0.0021445635279676925, + 0.67123444178860947 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 497523123, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.39999405534932869, + -1.0235358687840674, + 1.6563204725582426, + -2.2042922355655645, + -1.5705123282387314, + -5.1123369866990762 + ], + "velocities": [ + -0.10165193728550632, + 0.44606529208754087, + -0.55679262979958977, + 0.11051152403751817, + 0.00035866338807025139, + -0.1021570811020289 + ] + }, + { + "accelerations": [ + 0.5647611095154863, + -2.4538409292060575, + 3.0433910245940612, + -0.5883576409814576, + -0.0019754803575132564, + 0.5675435511586413 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 550314400, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.40454272652676476, + -1.0032318477514615, + 1.6307078264099661, + -2.1989933661929153, + -1.5704960181637844, + -5.1169086246268396 + ], + "velocities": [ + -0.063117158607279039, + 0.28447574565131029, + -0.36097678780052894, + 0.076364904129619771, + 0.00022834074173871168, + -0.063438663987562524 + ] + }, + { + "accelerations": [ + 0.40900652444903324, + -0.50074988098820017, + 3.1395456875551511, + -2.63790291808216, + -0.0015078614829524652, + 0.41112920796568564 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 660750735, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.40896802164852025, + -0.98287378222602706, + 1.6045581118922119, + -2.1932113779114495, + -1.5704797036794294, + -5.1213568863708367 + ], + "velocities": [ + -0.020035509123835466, + 0.15981248086764932, + -0.082992376686073233, + -0.076863843003992127, + 7.3863757481952346e-05, + -0.020139490401020421 + ] + }, + { + "accelerations": [ + -1.6845273888241929e-07, + 2.0997876297285201, + 0.90011694399709741, + -2.9999045736723646, + 1.2310228676462573e-10, + -1.68452631476416e-07 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 746257462, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.40896802262234322, + -0.97130618715141837, + 1.6106120457182014, + -2.2108329068117394, + -1.5704797036787177, + -5.1213568873446595 + ], + "velocities": [ + -1.6831062243675448e-08, + 0.20312087140497931, + 0.099880822524609614, + -0.30300169392426279, + 1.2299846940934833e-11, + -1.6831056826094672e-08 + ] + }, + { + "accelerations": [ + -1.7062499884971055e-07, + 2.2852858585912204, + 0.66955328900089972, + -2.9548391475379696, + 1.2468995215671902e-10, + -1.7062518586375654e-07 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 789979054, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.40896802359616641, + -0.95945943362370179, + 1.6162504247483109, + -2.2283180393692574, + -1.570479703678006, + -5.1213568883184823 + ], + "velocities": [ + -2.5576631162157578e-08, + 0.3152027201493483, + 0.1419237316159378, + -0.45712645175719113, + 1.8690958448278742e-11, + -2.557662589525231e-08 + ] + }, + { + "accelerations": [ + 3.6070061727002047e-08, + -0.22834579289292053, + -0.53571981717254147, + 0.76406561005422635, + -2.6359446211897581e-11, + 3.6070151053693852e-08 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 823698701, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.40896802456998926, + -0.94733902255270364, + 1.6214731424870734, + -2.2456611681787098, + -1.5704797036772944, + -5.1213568892923051 + ], + "velocities": [ + -2.825816603617196e-08, + 0.35551007002132728, + 0.14565112540076053, + -0.50116119541313819, + 2.0650579549355566e-11, + -2.8258162849998469e-08 + ] + }, + { + "accelerations": [ + 1.6828712471509873e-07, + -2.0052215771918713, + -1.0458978989890708, + 3.0511194761275671, + -1.2298131623808611e-10, + 1.6828709593631954e-07 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 858935736, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.40896802554381223, + -0.93495061205959884, + 1.6262800294107176, + -2.2628564655951502, + -1.5704797036765827, + -5.1213568902661279 + ], + "velocities": [ + -2.4176134853768405e-08, + 0.31034348230986858, + 0.11491067019347609, + -0.42525415249568621, + 1.7667500653418387e-11, + -2.4176130719407879e-08 + ] + }, + { + "accelerations": [ + 1.5115111644809485e-07, + -1.9341914954468644, + -0.7292210398598693, + 2.6634125352588365, + -1.1045861816887501e-10, + 1.5115109059974428e-07 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 905944167, + "secs": 2 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.4089680265176352, + -0.922300014057997, + 1.6306708791607432, + -2.2798979133464692, + -1.5704797036758711, + -5.1213568912399507 + ], + "velocities": [ + -1.4757084965645828e-08, + 0.19286167618646649, + 0.064657469331878548, + -0.25751914551367228, + 1.0784222120288968e-11, + -1.4757082442036908e-08 + ] + }, + { + "accelerations": [ + 8.4847279674340636e-08, + -2.4116254743205912, + -0.74264564976197056, + 3.1542711240557315, + -6.2004914456061312e-11, + 8.4847254093374027e-08 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 16627900, + "secs": 3 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.40896802749145816, + -0.90939318775914202, + 1.6346454609988987, + -2.2967793214831715, + -1.5704797036751594, + -5.1213568922137735 + ], + "velocities": [ + -4.3991235851211168e-09, + -0.0084269395384295662, + -0.0025950091480545015, + 0.011021948687877453, + 3.214803748661254e-12, + -4.3991234068435728e-09 + ] + }, + { + "accelerations": [ + -1.6443445293766622e-14, + -2.3093489064014872, + -0.87637182410980929, + 3.185720730511413, + 0.0, + 0.0 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 113334421, + "secs": 3 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.40896802749145805, + -0.92230001196368783, + 1.6306708832301628, + -2.2798979195098896, + -1.5704797036751594, + -5.1213568922137735 + ], + "velocities": [ + 5.740166252936391e-16, + -0.21407983751684687, + -0.071692235353646924, + 0.2857720728705001, + 0.0, + 0.0 + ] + }, + { + "accelerations": [ + 0.0, + -1.9570172344772749, + -1.0748732115623798, + 3.0318904460396441, + 0.0, + 0.0 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 156262049, + "secs": 3 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.40896802749145805, + -0.93495060492608018, + 1.6262800267701103, + -2.2628564700874443, + -1.5704797036751594, + -5.1213568922137735 + ], + "velocities": [ + 0.0, + -0.33210150455344567, + -0.12282980690455364, + 0.45493131145800947, + 0.0, + 0.0 + ] + }, + { + "accelerations": [ + 0.0, + 0.63237155466256423, + -0.19110959992841509, + -0.44126195473434726, + 0.0, + 0.0 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 189788882, + "secs": 3 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.40896802749145805, + -0.94733901032165369, + 1.6214731332191481, + -2.2456611711409082, + -1.5704797036751594, + -5.1213568922137735 + ], + "velocities": [ + 0.0, + -0.35869891626827582, + -0.14664089501258198, + 0.50533981128086447, + 0.0, + 0.0 + ] + }, + { + "accelerations": [ + -8.8959833156065672e-14, + 2.2573343372851338, + 0.68766148457012144, + -2.944995821855334, + 0.0, + 0.0 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 224628582, + "secs": 3 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.40896802749145805, + -0.95945941624069808, + 1.6162504089356813, + -2.2283180409383969, + -1.5704797036751594, + -5.1213568922137735 + ], + "velocities": [ + -1.8023161155642852e-15, + -0.30215731637105514, + -0.1359753266105346, + 0.43813264298159132, + 0.0, + 0.0 + ] + }, + { + "accelerations": [ + 7.1541371828969563e-14, + 1.9366481830752824, + 0.85855190495794109, + -2.795200088033198, + 0.0, + 0.0 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 270828428, + "secs": 3 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.40896802749145822, + -0.97130616456602625, + 1.6106120234431516, + -2.210832907120539, + -1.5704797036751594, + -5.1213568922137735 + ], + "velocities": [ + -7.99075062992806e-16, + -0.1804766348698745, + -0.088374522775123393, + 0.26885115764499889, + 0.0, + 0.0 + ] + }, + { + "accelerations": [ + -3.6262717931094992e-14, + 1.889135304371548, + 0.98868362882806271, + -2.8778189331996469, + 0.0, + 0.0 + ], + "effort": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "time_from_start": { + "nsecs": 381492064, + "secs": 3 + }, + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.408968027491458, + -0.98287375591718129, + 1.6045580959307097, + -2.193211388256942, + -1.5704797036751594, + -5.1213568922137735 + ], + "velocities": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ] + } + ], + "start_configuration": { + "joint_names": [ + "shoulder_pan_joint", + "shoulder_lift_joint", + "elbow_joint", + "wrist_1_joint", + "wrist_2_joint", + "wrist_3_joint" + ], + "types": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "values": [ + -0.408968027491458, + -0.98287375591718129, + 1.6045580959307097, + -2.193211388256942, + -1.5704797036751594, + -5.1213568922137735 + ] + } + } + }, + "place_tolerance": 0.0080000000000000002 + }, + "edge": { + "0": {}, + "1": {}, + "2": {}, + "3": {}, + "4": {}, + "5": {}, + "6": {}, + "7": {}, + "8": {} + }, + "edge_attributes": {}, + "max_int_key": 8, + "node": { + "0": { + "element": { + "dtype": "assembly/Element", + "value": { + "approach_frame": { + "dtype": "compas.geometry/Frame", + "value": { + "point": [ + 0.59326091545004345, + 0.60750268375392014, + 0.056000022194771577 + ], + "xaxis": [ + 6.123233995736766e-17, + -1.0, + 0.0 + ], + "yaxis": [ + 0.99999968293183461, + 6.1232320542541972e-17, + 0.00079632671073326335 + ] + } + }, + "frame": { + "dtype": "compas.geometry/Frame", + "value": { + "point": [ + 0.59326091545004345, + 0.60750268375392014, + 0.0060000221947715763 + ], + "xaxis": [ + 6.123233995736766e-17, + -1.0, + 0.0 + ], + "yaxis": [ + 0.99999968293183461, + 6.1232320542541972e-17, + 0.00079632671073326335 + ] + } + }, + "geometry_at_origin": { + "dtype": "compas.datastructures/Mesh", + "value": { + "compas": "1.1.0", + "data": { + "attributes": { + "name": "Box" + }, + "dea": {}, + "dfa": {}, + "dva": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "edgedata": {}, + "face": { + "0": [ + 0, + 1, + 2, + 3 + ], + "1": [ + 0, + 3, + 5, + 4 + ], + "2": [ + 3, + 2, + 6, + 5 + ], + "3": [ + 2, + 1, + 7, + 6 + ], + "4": [ + 1, + 0, + 4, + 7 + ], + "5": [ + 4, + 5, + 6, + 7 + ] + }, + "facedata": { + "0": {}, + "1": {}, + "2": {}, + "3": {}, + "4": {}, + "5": {} + }, + "max_face": 5, + "max_vertex": 7, + "vertex": { + "0": { + "x": -0.0080000000000000002, + "y": -0.0155, + "z": -0.0060000000000000001 + }, + "1": { + "x": -0.0080000000000000002, + "y": 0.0155, + "z": -0.0060000000000000001 + }, + "2": { + "x": 0.0080000000000000002, + "y": 0.0155, + "z": -0.0060000000000000001 + }, + "3": { + "x": 0.0080000000000000002, + "y": -0.0155, + "z": -0.0060000000000000001 + }, + "4": { + "x": -0.0080000000000000002, + "y": -0.0155, + "z": 0.0060000000000000001 + }, + "5": { + "x": 0.0080000000000000002, + "y": -0.0155, + "z": 0.0060000000000000001 + }, + "6": { + "x": 0.0080000000000000002, + "y": 0.0155, + "z": 0.0060000000000000001 + }, + "7": { + "x": -0.0080000000000000002, + "y": 0.0155, + "z": 0.0060000000000000001 + } + } + }, + "datatype": "compas.datastructures/Mesh" + } + }, + "trajectory": null + } + }, + "x": 0.59326091545004345, + "y": 0.60750268375392014, + "z": 0.0060000221947715763 + }, + "1": { + "element": { + "dtype": "assembly/Element", + "value": { + "approach_frame": { + "dtype": "compas.geometry/Frame", + "value": { + "point": [ + 0.62526091545004348, + 0.60750268375392014, + 0.056000022194771577 + ], + "xaxis": [ + 6.123233995736766e-17, + -1.0, + 0.0 + ], + "yaxis": [ + 0.99999968293183461, + 6.1232320542541972e-17, + 0.00079632671073326335 + ] + } + }, + "frame": { + "dtype": "compas.geometry/Frame", + "value": { + "point": [ + 0.62526091545004348, + 0.60750268375392014, + 0.0060000221947715763 + ], + "xaxis": [ + 6.123233995736766e-17, + -1.0, + 0.0 + ], + "yaxis": [ + 0.99999968293183461, + 6.1232320542541972e-17, + 0.00079632671073326335 + ] + } + }, + "geometry_at_origin": { + "dtype": "compas.datastructures/Mesh", + "value": { + "compas": "1.1.0", + "data": { + "attributes": { + "name": "Box" + }, + "dea": {}, + "dfa": {}, + "dva": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "edgedata": {}, + "face": { + "0": [ + 0, + 1, + 2, + 3 + ], + "1": [ + 0, + 3, + 5, + 4 + ], + "2": [ + 3, + 2, + 6, + 5 + ], + "3": [ + 2, + 1, + 7, + 6 + ], + "4": [ + 1, + 0, + 4, + 7 + ], + "5": [ + 4, + 5, + 6, + 7 + ] + }, + "facedata": { + "0": {}, + "1": {}, + "2": {}, + "3": {}, + "4": {}, + "5": {} + }, + "max_face": 5, + "max_vertex": 7, + "vertex": { + "0": { + "x": -0.0080000000000000002, + "y": -0.0155, + "z": -0.0060000000000000001 + }, + "1": { + "x": -0.0080000000000000002, + "y": 0.0155, + "z": -0.0060000000000000001 + }, + "2": { + "x": 0.0080000000000000002, + "y": 0.0155, + "z": -0.0060000000000000001 + }, + "3": { + "x": 0.0080000000000000002, + "y": -0.0155, + "z": -0.0060000000000000001 + }, + "4": { + "x": -0.0080000000000000002, + "y": -0.0155, + "z": 0.0060000000000000001 + }, + "5": { + "x": 0.0080000000000000002, + "y": -0.0155, + "z": 0.0060000000000000001 + }, + "6": { + "x": 0.0080000000000000002, + "y": 0.0155, + "z": 0.0060000000000000001 + }, + "7": { + "x": -0.0080000000000000002, + "y": 0.0155, + "z": 0.0060000000000000001 + } + } + }, + "datatype": "compas.datastructures/Mesh" + } + }, + "trajectory": null + } + }, + "x": 0.62526091545004348, + "y": 0.60750268375392014, + "z": 0.0060000221947715763 + }, + "2": { + "element": { + "dtype": "assembly/Element", + "value": { + "approach_frame": { + "dtype": "compas.geometry/Frame", + "value": { + "point": [ + 0.65726091545004339, + 0.60750268375392014, + 0.056000022194771577 + ], + "xaxis": [ + 6.123233995736766e-17, + -1.0, + 0.0 + ], + "yaxis": [ + 0.99999968293183461, + 6.1232320542541972e-17, + 0.00079632671073326335 + ] + } + }, + "frame": { + "dtype": "compas.geometry/Frame", + "value": { + "point": [ + 0.65726091545004339, + 0.60750268375392014, + 0.0060000221947715763 + ], + "xaxis": [ + 6.123233995736766e-17, + -1.0, + 0.0 + ], + "yaxis": [ + 0.99999968293183461, + 6.1232320542541972e-17, + 0.00079632671073326335 + ] + } + }, + "geometry_at_origin": { + "dtype": "compas.datastructures/Mesh", + "value": { + "compas": "1.1.0", + "data": { + "attributes": { + "name": "Box" + }, + "dea": {}, + "dfa": {}, + "dva": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "edgedata": {}, + "face": { + "0": [ + 0, + 1, + 2, + 3 + ], + "1": [ + 0, + 3, + 5, + 4 + ], + "2": [ + 3, + 2, + 6, + 5 + ], + "3": [ + 2, + 1, + 7, + 6 + ], + "4": [ + 1, + 0, + 4, + 7 + ], + "5": [ + 4, + 5, + 6, + 7 + ] + }, + "facedata": { + "0": {}, + "1": {}, + "2": {}, + "3": {}, + "4": {}, + "5": {} + }, + "max_face": 5, + "max_vertex": 7, + "vertex": { + "0": { + "x": -0.0080000000000000002, + "y": -0.0155, + "z": -0.0060000000000000001 + }, + "1": { + "x": -0.0080000000000000002, + "y": 0.0155, + "z": -0.0060000000000000001 + }, + "2": { + "x": 0.0080000000000000002, + "y": 0.0155, + "z": -0.0060000000000000001 + }, + "3": { + "x": 0.0080000000000000002, + "y": -0.0155, + "z": -0.0060000000000000001 + }, + "4": { + "x": -0.0080000000000000002, + "y": -0.0155, + "z": 0.0060000000000000001 + }, + "5": { + "x": 0.0080000000000000002, + "y": -0.0155, + "z": 0.0060000000000000001 + }, + "6": { + "x": 0.0080000000000000002, + "y": 0.0155, + "z": 0.0060000000000000001 + }, + "7": { + "x": -0.0080000000000000002, + "y": 0.0155, + "z": 0.0060000000000000001 + } + } + }, + "datatype": "compas.datastructures/Mesh" + } + }, + "trajectory": null + } + }, + "x": 0.65726091545004339, + "y": 0.60750268375392014, + "z": 0.0060000221947715763 + }, + "3": { + "element": { + "dtype": "assembly/Element", + "value": { + "approach_frame": { + "dtype": "compas.geometry/Frame", + "value": { + "point": [ + 0.68926091545004342, + 0.60750268375392014, + 0.056000022194771577 + ], + "xaxis": [ + 6.123233995736766e-17, + -1.0, + 0.0 + ], + "yaxis": [ + 0.99999968293183461, + 6.1232320542541972e-17, + 0.00079632671073326335 + ] + } + }, + "frame": { + "dtype": "compas.geometry/Frame", + "value": { + "point": [ + 0.68926091545004342, + 0.60750268375392014, + 0.0060000221947715763 + ], + "xaxis": [ + 6.123233995736766e-17, + -1.0, + 0.0 + ], + "yaxis": [ + 0.99999968293183461, + 6.1232320542541972e-17, + 0.00079632671073326335 + ] + } + }, + "geometry_at_origin": { + "dtype": "compas.datastructures/Mesh", + "value": { + "compas": "1.1.0", + "data": { + "attributes": { + "name": "Box" + }, + "dea": {}, + "dfa": {}, + "dva": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "edgedata": {}, + "face": { + "0": [ + 0, + 1, + 2, + 3 + ], + "1": [ + 0, + 3, + 5, + 4 + ], + "2": [ + 3, + 2, + 6, + 5 + ], + "3": [ + 2, + 1, + 7, + 6 + ], + "4": [ + 1, + 0, + 4, + 7 + ], + "5": [ + 4, + 5, + 6, + 7 + ] + }, + "facedata": { + "0": {}, + "1": {}, + "2": {}, + "3": {}, + "4": {}, + "5": {} + }, + "max_face": 5, + "max_vertex": 7, + "vertex": { + "0": { + "x": -0.0080000000000000002, + "y": -0.0155, + "z": -0.0060000000000000001 + }, + "1": { + "x": -0.0080000000000000002, + "y": 0.0155, + "z": -0.0060000000000000001 + }, + "2": { + "x": 0.0080000000000000002, + "y": 0.0155, + "z": -0.0060000000000000001 + }, + "3": { + "x": 0.0080000000000000002, + "y": -0.0155, + "z": -0.0060000000000000001 + }, + "4": { + "x": -0.0080000000000000002, + "y": -0.0155, + "z": 0.0060000000000000001 + }, + "5": { + "x": 0.0080000000000000002, + "y": -0.0155, + "z": 0.0060000000000000001 + }, + "6": { + "x": 0.0080000000000000002, + "y": 0.0155, + "z": 0.0060000000000000001 + }, + "7": { + "x": -0.0080000000000000002, + "y": 0.0155, + "z": 0.0060000000000000001 + } + } + }, + "datatype": "compas.datastructures/Mesh" + } + }, + "trajectory": null + } + }, + "x": 0.68926091545004342, + "y": 0.60750268375392014, + "z": 0.0060000221947715763 + }, + "4": { + "element": { + "dtype": "assembly/Element", + "value": { + "approach_frame": { + "dtype": "compas.geometry/Frame", + "value": { + "point": [ + 0.60926091545004346, + 0.60750268375392014, + 0.069000022194771582 + ], + "xaxis": [ + 6.123233995736766e-17, + -1.0, + 0.0 + ], + "yaxis": [ + 0.99999968293183461, + 6.1232320542541972e-17, + 0.00079632671073326335 + ] + } + }, + "frame": { + "dtype": "compas.geometry/Frame", + "value": { + "point": [ + 0.60926091545004346, + 0.60750268375392014, + 0.019000022194771572 + ], + "xaxis": [ + 6.123233995736766e-17, + -1.0, + 0.0 + ], + "yaxis": [ + 0.99999968293183461, + 6.1232320542541972e-17, + 0.00079632671073326335 + ] + } + }, + "geometry_at_origin": { + "dtype": "compas.datastructures/Mesh", + "value": { + "compas": "1.1.0", + "data": { + "attributes": { + "name": "Box" + }, + "dea": {}, + "dfa": {}, + "dva": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "edgedata": {}, + "face": { + "0": [ + 0, + 1, + 2, + 3 + ], + "1": [ + 0, + 3, + 5, + 4 + ], + "2": [ + 3, + 2, + 6, + 5 + ], + "3": [ + 2, + 1, + 7, + 6 + ], + "4": [ + 1, + 0, + 4, + 7 + ], + "5": [ + 4, + 5, + 6, + 7 + ] + }, + "facedata": { + "0": {}, + "1": {}, + "2": {}, + "3": {}, + "4": {}, + "5": {} + }, + "max_face": 5, + "max_vertex": 7, + "vertex": { + "0": { + "x": -0.0080000000000000002, + "y": -0.0155, + "z": -0.0060000000000000001 + }, + "1": { + "x": -0.0080000000000000002, + "y": 0.0155, + "z": -0.0060000000000000001 + }, + "2": { + "x": 0.0080000000000000002, + "y": 0.0155, + "z": -0.0060000000000000001 + }, + "3": { + "x": 0.0080000000000000002, + "y": -0.0155, + "z": -0.0060000000000000001 + }, + "4": { + "x": -0.0080000000000000002, + "y": -0.0155, + "z": 0.0060000000000000001 + }, + "5": { + "x": 0.0080000000000000002, + "y": -0.0155, + "z": 0.0060000000000000001 + }, + "6": { + "x": 0.0080000000000000002, + "y": 0.0155, + "z": 0.0060000000000000001 + }, + "7": { + "x": -0.0080000000000000002, + "y": 0.0155, + "z": 0.0060000000000000001 + } + } + }, + "datatype": "compas.datastructures/Mesh" + } + }, + "trajectory": null + } + }, + "x": 0.60926091545004346, + "y": 0.60750268375392014, + "z": 0.019000022194771572 + }, + "5": { + "element": { + "dtype": "assembly/Element", + "value": { + "approach_frame": { + "dtype": "compas.geometry/Frame", + "value": { + "point": [ + 0.64126091545004338, + 0.60750268375392014, + 0.069000022194771582 + ], + "xaxis": [ + 6.123233995736766e-17, + -1.0, + 0.0 + ], + "yaxis": [ + 0.99999968293183461, + 6.1232320542541972e-17, + 0.00079632671073326335 + ] + } + }, + "frame": { + "dtype": "compas.geometry/Frame", + "value": { + "point": [ + 0.64126091545004338, + 0.60750268375392014, + 0.019000022194771572 + ], + "xaxis": [ + 6.123233995736766e-17, + -1.0, + 0.0 + ], + "yaxis": [ + 0.99999968293183461, + 6.1232320542541972e-17, + 0.00079632671073326335 + ] + } + }, + "geometry_at_origin": { + "dtype": "compas.datastructures/Mesh", + "value": { + "compas": "1.1.0", + "data": { + "attributes": { + "name": "Box" + }, + "dea": {}, + "dfa": {}, + "dva": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "edgedata": {}, + "face": { + "0": [ + 0, + 1, + 2, + 3 + ], + "1": [ + 0, + 3, + 5, + 4 + ], + "2": [ + 3, + 2, + 6, + 5 + ], + "3": [ + 2, + 1, + 7, + 6 + ], + "4": [ + 1, + 0, + 4, + 7 + ], + "5": [ + 4, + 5, + 6, + 7 + ] + }, + "facedata": { + "0": {}, + "1": {}, + "2": {}, + "3": {}, + "4": {}, + "5": {} + }, + "max_face": 5, + "max_vertex": 7, + "vertex": { + "0": { + "x": -0.0080000000000000002, + "y": -0.0155, + "z": -0.0060000000000000001 + }, + "1": { + "x": -0.0080000000000000002, + "y": 0.0155, + "z": -0.0060000000000000001 + }, + "2": { + "x": 0.0080000000000000002, + "y": 0.0155, + "z": -0.0060000000000000001 + }, + "3": { + "x": 0.0080000000000000002, + "y": -0.0155, + "z": -0.0060000000000000001 + }, + "4": { + "x": -0.0080000000000000002, + "y": -0.0155, + "z": 0.0060000000000000001 + }, + "5": { + "x": 0.0080000000000000002, + "y": -0.0155, + "z": 0.0060000000000000001 + }, + "6": { + "x": 0.0080000000000000002, + "y": 0.0155, + "z": 0.0060000000000000001 + }, + "7": { + "x": -0.0080000000000000002, + "y": 0.0155, + "z": 0.0060000000000000001 + } + } + }, + "datatype": "compas.datastructures/Mesh" + } + }, + "trajectory": null + } + }, + "x": 0.64126091545004338, + "y": 0.60750268375392014, + "z": 0.019000022194771572 + }, + "6": { + "element": { + "dtype": "assembly/Element", + "value": { + "approach_frame": { + "dtype": "compas.geometry/Frame", + "value": { + "point": [ + 0.67326091545004341, + 0.60750268375392014, + 0.069000022194771582 + ], + "xaxis": [ + 6.123233995736766e-17, + -1.0, + 0.0 + ], + "yaxis": [ + 0.99999968293183461, + 6.1232320542541972e-17, + 0.00079632671073326335 + ] + } + }, + "frame": { + "dtype": "compas.geometry/Frame", + "value": { + "point": [ + 0.67326091545004341, + 0.60750268375392014, + 0.019000022194771572 + ], + "xaxis": [ + 6.123233995736766e-17, + -1.0, + 0.0 + ], + "yaxis": [ + 0.99999968293183461, + 6.1232320542541972e-17, + 0.00079632671073326335 + ] + } + }, + "geometry_at_origin": { + "dtype": "compas.datastructures/Mesh", + "value": { + "compas": "1.1.0", + "data": { + "attributes": { + "name": "Box" + }, + "dea": {}, + "dfa": {}, + "dva": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "edgedata": {}, + "face": { + "0": [ + 0, + 1, + 2, + 3 + ], + "1": [ + 0, + 3, + 5, + 4 + ], + "2": [ + 3, + 2, + 6, + 5 + ], + "3": [ + 2, + 1, + 7, + 6 + ], + "4": [ + 1, + 0, + 4, + 7 + ], + "5": [ + 4, + 5, + 6, + 7 + ] + }, + "facedata": { + "0": {}, + "1": {}, + "2": {}, + "3": {}, + "4": {}, + "5": {} + }, + "max_face": 5, + "max_vertex": 7, + "vertex": { + "0": { + "x": -0.0080000000000000002, + "y": -0.0155, + "z": -0.0060000000000000001 + }, + "1": { + "x": -0.0080000000000000002, + "y": 0.0155, + "z": -0.0060000000000000001 + }, + "2": { + "x": 0.0080000000000000002, + "y": 0.0155, + "z": -0.0060000000000000001 + }, + "3": { + "x": 0.0080000000000000002, + "y": -0.0155, + "z": -0.0060000000000000001 + }, + "4": { + "x": -0.0080000000000000002, + "y": -0.0155, + "z": 0.0060000000000000001 + }, + "5": { + "x": 0.0080000000000000002, + "y": -0.0155, + "z": 0.0060000000000000001 + }, + "6": { + "x": 0.0080000000000000002, + "y": 0.0155, + "z": 0.0060000000000000001 + }, + "7": { + "x": -0.0080000000000000002, + "y": 0.0155, + "z": 0.0060000000000000001 + } + } + }, + "datatype": "compas.datastructures/Mesh" + } + }, + "trajectory": null + } + }, + "x": 0.67326091545004341, + "y": 0.60750268375392014, + "z": 0.019000022194771572 + }, + "7": { + "element": { + "dtype": "assembly/Element", + "value": { + "approach_frame": { + "dtype": "compas.geometry/Frame", + "value": { + "point": [ + 0.62476091545004342, + 0.60750268375392014, + 0.082000022194771566 + ], + "xaxis": [ + 6.123233995736766e-17, + -1.0, + 0.0 + ], + "yaxis": [ + 0.99999968293183461, + 6.1232320542541972e-17, + 0.00079632671073326335 + ] + } + }, + "frame": { + "dtype": "compas.geometry/Frame", + "value": { + "point": [ + 0.62476091545004342, + 0.60750268375392014, + 0.03200002219477157 + ], + "xaxis": [ + 6.123233995736766e-17, + -1.0, + 0.0 + ], + "yaxis": [ + 0.99999968293183461, + 6.1232320542541972e-17, + 0.00079632671073326335 + ] + } + }, + "geometry_at_origin": { + "dtype": "compas.datastructures/Mesh", + "value": { + "compas": "1.1.0", + "data": { + "attributes": { + "name": "Box" + }, + "dea": {}, + "dfa": {}, + "dva": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "edgedata": {}, + "face": { + "0": [ + 0, + 1, + 2, + 3 + ], + "1": [ + 0, + 3, + 5, + 4 + ], + "2": [ + 3, + 2, + 6, + 5 + ], + "3": [ + 2, + 1, + 7, + 6 + ], + "4": [ + 1, + 0, + 4, + 7 + ], + "5": [ + 4, + 5, + 6, + 7 + ] + }, + "facedata": { + "0": {}, + "1": {}, + "2": {}, + "3": {}, + "4": {}, + "5": {} + }, + "max_face": 5, + "max_vertex": 7, + "vertex": { + "0": { + "x": -0.0080000000000000002, + "y": -0.0155, + "z": -0.0060000000000000001 + }, + "1": { + "x": -0.0080000000000000002, + "y": 0.0155, + "z": -0.0060000000000000001 + }, + "2": { + "x": 0.0080000000000000002, + "y": 0.0155, + "z": -0.0060000000000000001 + }, + "3": { + "x": 0.0080000000000000002, + "y": -0.0155, + "z": -0.0060000000000000001 + }, + "4": { + "x": -0.0080000000000000002, + "y": -0.0155, + "z": 0.0060000000000000001 + }, + "5": { + "x": 0.0080000000000000002, + "y": -0.0155, + "z": 0.0060000000000000001 + }, + "6": { + "x": 0.0080000000000000002, + "y": 0.0155, + "z": 0.0060000000000000001 + }, + "7": { + "x": -0.0080000000000000002, + "y": 0.0155, + "z": 0.0060000000000000001 + } + } + }, + "datatype": "compas.datastructures/Mesh" + } + }, + "trajectory": null + } + }, + "x": 0.62476091545004342, + "y": 0.60750268375392014, + "z": 0.03200002219477157 + }, + "8": { + "element": { + "dtype": "assembly/Element", + "value": { + "approach_frame": { + "dtype": "compas.geometry/Frame", + "value": { + "point": [ + 0.65676091545004345, + 0.60750268375392014, + 0.082000022194771566 + ], + "xaxis": [ + 6.123233995736766e-17, + -1.0, + 0.0 + ], + "yaxis": [ + 0.99999968293183461, + 6.1232320542541972e-17, + 0.00079632671073326335 + ] + } + }, + "frame": { + "dtype": "compas.geometry/Frame", + "value": { + "point": [ + 0.65676091545004345, + 0.60750268375392014, + 0.03200002219477157 + ], + "xaxis": [ + 6.123233995736766e-17, + -1.0, + 0.0 + ], + "yaxis": [ + 0.99999968293183461, + 6.1232320542541972e-17, + 0.00079632671073326335 + ] + } + }, + "geometry_at_origin": { + "dtype": "compas.datastructures/Mesh", + "value": { + "compas": "1.1.0", + "data": { + "attributes": { + "name": "Box" + }, + "dea": {}, + "dfa": {}, + "dva": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "edgedata": {}, + "face": { + "0": [ + 0, + 1, + 2, + 3 + ], + "1": [ + 0, + 3, + 5, + 4 + ], + "2": [ + 3, + 2, + 6, + 5 + ], + "3": [ + 2, + 1, + 7, + 6 + ], + "4": [ + 1, + 0, + 4, + 7 + ], + "5": [ + 4, + 5, + 6, + 7 + ] + }, + "facedata": { + "0": {}, + "1": {}, + "2": {}, + "3": {}, + "4": {}, + "5": {} + }, + "max_face": 5, + "max_vertex": 7, + "vertex": { + "0": { + "x": -0.0080000000000000002, + "y": -0.0155, + "z": -0.0060000000000000001 + }, + "1": { + "x": -0.0080000000000000002, + "y": 0.0155, + "z": -0.0060000000000000001 + }, + "2": { + "x": 0.0080000000000000002, + "y": 0.0155, + "z": -0.0060000000000000001 + }, + "3": { + "x": 0.0080000000000000002, + "y": -0.0155, + "z": -0.0060000000000000001 + }, + "4": { + "x": -0.0080000000000000002, + "y": -0.0155, + "z": 0.0060000000000000001 + }, + "5": { + "x": 0.0080000000000000002, + "y": -0.0155, + "z": 0.0060000000000000001 + }, + "6": { + "x": 0.0080000000000000002, + "y": 0.0155, + "z": 0.0060000000000000001 + }, + "7": { + "x": -0.0080000000000000002, + "y": 0.0155, + "z": 0.0060000000000000001 + } + } + }, + "datatype": "compas.datastructures/Mesh" + } + }, + "trajectory": null + } + }, + "x": 0.65676091545004345, + "y": 0.60750268375392014, + "z": 0.03200002219477157 + } + }, + "node_attributes": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + } + }, + "datatype": "assembly/Assembly" + } +} \ No newline at end of file diff --git a/lecture_06/assignment_05/asling/vacuum_gripper.stl b/lecture_06/assignment_05/asling/vacuum_gripper.stl new file mode 100644 index 0000000000000000000000000000000000000000..4fbbb2e731785db0ee5d2f99b3f77678209388ca GIT binary patch literal 9884 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 VuKUeLH#2k>b(vtS$k5ED^j~ijBhCN- literal 0 HcmV?d00001