From fd63483097acf678809e9347c7510aa4d3b331ef Mon Sep 17 00:00:00 2001 From: gheyselinck Date: Mon, 27 Mar 2023 12:27:51 +0200 Subject: [PATCH 1/3] assignment 3 --- .../aurele_gheyselinck/assignment_03.ghx | 6289 +++++++++++++++++ 1 file changed, 6289 insertions(+) create mode 100644 lecture_04/assignment_03/aurele_gheyselinck/assignment_03.ghx diff --git a/lecture_04/assignment_03/aurele_gheyselinck/assignment_03.ghx b/lecture_04/assignment_03/aurele_gheyselinck/assignment_03.ghx new file mode 100644 index 0000000..ae9e29e --- /dev/null +++ b/lecture_04/assignment_03/aurele_gheyselinck/assignment_03.ghx @@ -0,0 +1,6289 @@ + + + + + + + + 0 + 2 + 2 + + + + + + + 1 + 0 + 7 + + + + + + c4f913db-409d-41a9-88e1-f6f90989047d + Shaded + 1 + + 100;150;0;0 + + + 100;0;150;0 + + + + + + 637527254194888879 + + assignment_03.ghx + + + + + 0 + + + + + + -376 + 244 + + 0.5220064 + + + + + 0 + + + + + + + 0 + + + + + 1 + + + + + GhPython, Version=7.28.23058.3001, Culture=neutral, PublicKeyToken=null + 7.28.23058.3001 + + 00000000-0000-0000-0000-000000000000 + + + + + + + + + 62 + + + + + 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 + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + d5ffda3e-a3ab-4688-9de8-1d9d9e2789e3 + 4b0a07e0-a378-4f92-8f0a-6c1f1fb427f2 + 1d31a79f-b7ba-423f-944c-23f606999dae + eaec99d4-5f03-4209-953f-02aee1235de3 + 4a5bf47a-b0af-4831-a451-6b776364bb7e + 5 + 5a4ca04f-0f26-4978-bcce-92edaa3c4b8e + Group + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + 781a5de8-c54c-4805-927f-519a45da032f + 4b0a07e0-a378-4f92-8f0a-6c1f1fb427f2 + 1d31a79f-b7ba-423f-944c-23f606999dae + eaec99d4-5f03-4209-953f-02aee1235de3 + 4a5bf47a-b0af-4831-a451-6b776364bb7e + 20c7f0ab-fd13-4bd7-a130-c6fe893d2a0b + 47c152bc-c823-4835-aad3-3bf5c281e892 + d19cf29a-0512-4632-b4e0-ecc00c5b8487 + 2ceac33a-a5ff-4a42-8067-32e6a2c7fbee + ac227038-eb23-4cb5-94d8-f63bb92375a4 + b3787c61-219b-4ed9-b49f-1e7dd56236b1 + b395bfb0-5717-46c4-924c-a3ba167b1e0d + 4e66fe1b-29b3-4955-9524-ca986decd9ac + 78471367-17af-4599-8661-808ba87f82a6 + bfa816f1-e4c0-482e-9515-4b540fd2f427 + 82091d9c-f1c0-4207-8d3d-b1dca673d5df + 48fd0fd8-a319-4a4e-9ad8-52b581bc5ce1 + 8afc6a4d-4416-4b4a-90ec-c8964ff80e2a + 4c4192d8-2798-43a8-92cd-f892409f235f + 19 + 8b8d6fbf-db19-4267-9188-c4fdd76620b6 + Group + + + + + + + + + + + 8ec86459-bf01-4409-baee-174d0d2b13d0 + Data + + + + + Contains a collection of generic data + 4e66fe1b-29b3-4955-9524-ca986decd9ac + Data + Robot + false + 93b2a330-6167-419e-a7b7-8e956dd8dc5b + 1 + + + + + + 1254 + 232 + 50 + 20 + + + 1279.353 + 242.9772 + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + false + + 46.70692 + 119.7138 + + + 272.0458 + 119.7138 + + + 272.0458 + 139.8124 + + + 46.70692 + 139.8124 + + A quick note + Cambria + 82091d9c-f1c0-4207-8d3d-b1dca673d5df + false + Scribble + Scribble + 22 + 1) Load robot from ROS + + + + + + 41.70692 + 114.7138 + 235.3389 + 30.09863 + + + 46.70692 + 119.7138 + + + + + + + + + + 8ec86459-bf01-4409-baee-174d0d2b13d0 + Data + + + + + Contains a collection of generic data + aacb02be-ffde-4997-b910-3a5670a6e5b1 + Data + Target planes + false + 5b4ba2cc-99bc-4cfd-9fcb-e8306e4116a8 + 1 + + + + + + 1226 + 659 + 78 + 20 + + + 1265.041 + 669.0404 + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;240;218;146 + + A group of Grasshopper objects + 0c3c0677-cbf3-46be-b539-e48399697bc7 + de6b7a53-8f17-48cc-bb14-1aedc473dd1c + 04770360-9eb5-44e4-911f-142deec44bdc + aacb02be-ffde-4997-b910-3a5670a6e5b1 + 50ee1702-2c6a-4092-b68b-7fd9ec30c129 + 9dbe68e7-ae2d-4df4-89a9-ae0ec5759854 + d17c9d6f-7bf6-411c-816c-4c1caad151b9 + 31d6da72-251a-49f0-bcdc-b93470126a69 + 8fb4057b-f638-4f04-8d11-d6659d5ac430 + 8876176f-7f14-480c-bf5b-f362b1680fab + 61f941bf-a670-4bd4-9743-24d756a9ddee + 043a4e79-bd11-48e8-bb8c-c44fe6ea9aa2 + 3ad8d5d4-190e-47d5-a8a8-a7e800bb20f3 + 13 + cf91e427-c398-45be-b915-f55275cc67b7 + Group + + + + + + + + + + + 8ec86459-bf01-4409-baee-174d0d2b13d0 + Data + + + + + Contains a collection of generic data + d385349b-7e03-4362-b9d0-eacd34e2562b + Data + Pickup plane + false + 56856eaa-bd8a-4ba7-a018-89ea3ec16886 + 1 + + + + + + 1229 + 414 + 75 + 20 + + + 1266.929 + 424.2716 + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;240;218;146 + + A group of Grasshopper objects + d385349b-7e03-4362-b9d0-eacd34e2562b + 66c3b06d-1415-476b-875b-53498de1860a + c9e84bc7-5f07-46ef-9e42-32f7d85d0c13 + 39a429c7-2480-4ff8-8f4c-5bd8a47369a7 + 224add91-1cc7-47af-8c77-af2d42147144 + ff0bbdd7-eb5b-4ed6-a652-505db2c0ac8c + 4f6df0a0-fef8-46a2-af3d-7e027d7a3b99 + 63119651-183f-4652-b382-de4851f36cac + 267ba84a-194a-4035-89e9-3bb99e1acd04 + 9 + 3c032157-3bf9-40ee-9b12-e4e807d15ccc + Group + + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + false + + 46.70692 + 345.0585 + + + 269.3387 + 345.0585 + + + 269.3387 + 365.1571 + + + 46.70692 + 365.1571 + + A quick note + Cambria + ff0bbdd7-eb5b-4ed6-a652-505db2c0ac8c + false + Scribble + Scribble + 22 + 2) Define pick-up plane + + + + + + 41.70692 + 340.0585 + 232.6318 + 30.09863 + + + 46.70692 + 345.0585 + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + false + + 46.70692 + 611.7747 + + + 263.9891 + 611.7747 + + + 263.9891 + 632.0023 + + + 46.70692 + 632.0023 + + A quick note + Cambria + 9dbe68e7-ae2d-4df4-89a9-ae0ec5759854 + false + Scribble + Scribble + 22 + 3) Define target planes + + + + + + 41.70692 + 606.7747 + 227.2822 + 30.22754 + + + 46.70692 + 611.7747 + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + Robot Visualize + + + + + """ +Visualizes the robot. + +COMPAS FAB v0.27.0 +""" +from compas.artists import Artist +from compas.geometry import Frame +from compas.geometry import Transformation +from compas_fab.robots import PlanningScene +from ghpythonlib.componentbase import executingcomponent as component + + +class RobotVisualize(component): + def RunScript( + self, + robot, + group, + configuration, + show_visual, + show_collision, + show_frames, + show_base_frame, + show_end_effector_frame, + show_cm, + show_acm, + ): + + visual = None + collision = None + collision_meshes = None + attached_meshes = None + frames = None + base_frame = None + ee_frame = None + + if robot: + show_visual = True if show_visual is None else show_visual + show_cm = True if show_cm is None else show_cm + show_acm = True if show_acm is None else show_acm + configuration = configuration or robot.zero_configuration() + + robot.update(configuration, visual=show_visual, collision=show_collision) + compas_frames = robot.transformed_frames(configuration, group) + + if show_visual: + visual = robot.artist.draw_visual() + + if show_collision: + collision = robot.artist.draw_collision() + + if show_base_frame: + base_compas_frame = compas_frames[0] + artist = Artist(base_compas_frame) + base_frame = artist.draw() + + if show_end_effector_frame: + ee_compas_frame = robot.forward_kinematics( + configuration, group, options=dict(solver="model") + ) + artist = Artist(ee_compas_frame) + ee_frame = artist.draw() + + if show_frames: + frames = [] + for compas_frame in compas_frames[1:]: + artist = Artist(compas_frame) + frame = artist.draw() + frames.append(frame) + + if show_cm or show_acm: + scene = PlanningScene(robot) + scene = robot.client.get_planning_scene() + + collision_meshes = [] + attached_meshes = [] + + if show_cm: + for co in scene.world.collision_objects: + header = co.header + frame_id = header.frame_id + cms = co.to_collision_meshes() + + for cm in cms: + if cm.frame != Frame.worldXY(): + t = Transformation.from_frame(cm.frame) + mesh = cm.mesh.transformed(t) + else: + mesh = cm.mesh + + collision_meshes.append(Artist(mesh).draw()) + + if show_acm: + 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) + + attached_meshes.append(Artist(mesh).draw()) + + return ( + visual, + collision, + collision_meshes, + attached_meshes, + frames, + base_frame, + ee_frame, + ) + + Visualizes the robot. +COMPAS FAB v0.27.0 + true + true + 2 + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEAAACxABrSO9dQAAAdhJREFUSEu1lLFKA0EQhlUIQVBMOhGLgGAtxAcIYmmRJpWNrZ2dhSCWqURtxC6VRSofIYWlhS8QyBMEOzvP/zt2jtm9VSLEg+9ud2bnn9nZu1spiuJfyRqXSdb4F3ZvX1vigmfOXzP8FQm/iEJ8iH7qjyZUIUZiIgjseb9HvjMxE4jbE4jt2Lo0CGca0BOI3Ti8nzGFdYTFv9cShAWlUzyK6zC/E9aGHFFbND8Q1c5TBwHPgiQPYU4C2uZFPVEbNa/aA9wqg5wIE2RP6AuSsH2DAzV/2Q49aRPtwzYzTW5VBXKwC+sjIvQ+qiiso52IWSG00B941CKfwA7UDs0qqiUJ61nnD5z10ffALe2hb48x8Ws88lEIhWWLqBnC4jQBRIUsStYosdxbUx6croFgAJcWo6st5sE+ruw28EiMbfs3xbjBnxWKEw8quw1SEEvEgaQtCQydWJv1zjb3OpFoisT8G2KMJNINYlBWq8t2NfQakWCKxH48cAlNg+CT8AmPvUYkCArmq82JRmydnJeCa+sbX42dvfsgPk31ogko2L7kX9m+GpcJYLXR/AzjqD0QTUDBCyWA5v5hlSTQTfWiCSiQX4X91H5l8+jUzgHeUi2oGZZN1rg8ipVvhzuVIxcFIsQAAAAASUVORK5CYII= + + false + 7a58f25a-3dc8-4dfa-bf0f-35404273569e + true + true + Robot Visualize + Robot Visualize + + + + + + 2356 + 139 + 257 + 204 + + + 2503 + 241 + + + + + + 10 + 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 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 7 + 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 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + The robot. + 439bbb30-bb2a-4f39-bfd6-8205cd93fd09 + robot + robot + true + 0 + true + 619d4216-bdfd-4395-b679-83b02e397c53 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + 2 + + + + + + 2358 + 141 + 130 + 20 + + + 2424.5 + 151 + + + + + + + + true + The planning group used for end-effector and base visualization. + ad36f822-0439-4ba3-b51a-c348f6f591ec + group + group + true + 0 + true + 0 + 37261734-eec7-4f50-b6a8-b8d1f3c4396b + + + + + + 2358 + 161 + 130 + 20 + + + 2424.5 + 171 + + + + + + + + true + The robot's full configuration. + 9fb95b19-f673-4906-9998-b63a5811ea88 + configuration + configuration + true + 0 + true + 4ca3f55b-10fb-41c3-9f24-2b4809b96eeb + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 2358 + 181 + 130 + 20 + + + 2424.5 + 191 + + + + + + + + true + Whether or not to show the robot's visual meshes. + 22d8ace2-7a15-4a22-9430-2f721280765e + show_visual + show_visual + true + 0 + true + 0 + d60527f5-b5af-4ef6-8970-5f96fe412559 + + + + + + 2358 + 201 + 130 + 20 + + + 2424.5 + 211 + + + + + + + + true + Whether or not to show the robot's collision meshes. + ad827435-eaa9-47db-8456-0f04c22dde3a + show_collision + show_collision + true + 0 + true + 0 + d60527f5-b5af-4ef6-8970-5f96fe412559 + + + + + + 2358 + 221 + 130 + 20 + + + 2424.5 + 231 + + + + + + + + true + Whether or not to show the robot's joint frames. + 35824dc3-741e-4a85-9d9f-f350f6328850 + show_frames + show_frames + true + 0 + true + 0 + d60527f5-b5af-4ef6-8970-5f96fe412559 + + + + + + 2358 + 241 + 130 + 20 + + + 2424.5 + 251 + + + + + + + + true + Whether or not to show the robot's base frame. + 5c36de85-2908-4ed4-8bfb-be05a5fc15a0 + show_base_frame + show_base_frame + true + 0 + true + 0 + d60527f5-b5af-4ef6-8970-5f96fe412559 + + + + + + 2358 + 261 + 130 + 20 + + + 2424.5 + 271 + + + + + + + + true + Whether or not to show the robot's end-effector frame. + 43679585-4dff-44fc-8144-04d51b6597a3 + show_end_effector_frame + show_end_effector_frame + true + 0 + true + 0 + d60527f5-b5af-4ef6-8970-5f96fe412559 + + + + + + 2358 + 281 + 130 + 20 + + + 2424.5 + 291 + + + + + + + + true + Whether or not to show the collision meshes (if any). + b0245b8b-4b25-480e-8434-34500dd361dd + show_cm + show_cm + true + 0 + true + 0 + d60527f5-b5af-4ef6-8970-5f96fe412559 + + + + + + 2358 + 301 + 130 + 20 + + + 2424.5 + 311 + + + + + + + + true + Whether or not to show the attached collision meshes (if any). + c258dd5f-afd6-4742-9840-e8ae6df45c59 + show_acm + show_acm + true + 0 + true + 0 + d60527f5-b5af-4ef6-8970-5f96fe412559 + + + + + + 2358 + 321 + 130 + 20 + + + 2424.5 + 331 + + + + + + + + Rhino meshes of the robot's visual geometry (if any). + b51fd205-41de-4772-b77b-54118aa40c2c + visual + visual + false + 0 + + + + + + 2518 + 141 + 93 + 28 + + + 2564.5 + 155.2857 + + + + + + + + Rhino meshes of the robot's collision geometry (if any). + 3fd4309e-805a-4b2a-8b39-fb39cda51d21 + collision + collision + false + 0 + + + + + + 2518 + 169 + 93 + 29 + + + 2564.5 + 183.8571 + + + + + + + + Rhino meshes of the scene's collision meshes (if any). + ba8f5aaf-7d4f-4021-b0f3-328651e5f766 + collision_meshes + collision_meshes + false + 0 + + + + + + 2518 + 198 + 93 + 28 + + + 2564.5 + 212.4286 + + + + + + + + Rhino meshes of the scene's attached collision meshes (if any). + 00b4652c-1968-4bef-b124-5b86f4dc25bc + attached_meshes + attached_meshes + false + 0 + + + + + + 2518 + 226 + 93 + 29 + + + 2564.5 + 241 + + + + + + + + The robot's joint frames as Rhino planes (if any). + 243eeb3c-e1ad-4233-9a1a-b0ec9fd1c962 + frames + frames + false + 0 + + + + + + 2518 + 255 + 93 + 28 + + + 2564.5 + 269.5714 + + + + + + + + The robot's base frame as a Rhino plane (if any). + 91fd1995-e0da-4f23-a4c6-afeefc044dee + base_frame + base_frame + false + 0 + + + + + + 2518 + 283 + 93 + 29 + + + 2564.5 + 298.1429 + + + + + + + + The robot's end-effector frame as a Rhino plane (if any). + 5a2c4711-ae2f-4f0f-b633-afc7c8fccfd2 + ee_frame + ee_frame + false + 0 + + + + + + 2518 + 312 + 93 + 29 + + + 2564.5 + 326.7143 + + + + + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + false + + 46.70692 + 847.7205 + + + 317.5712 + 847.7205 + + + 317.5712 + 867.8192 + + + 46.70692 + 867.8192 + + A quick note + Cambria + fccb98c9-c6e5-4caa-8384-ca0ddf85fd1f + false + Scribble + Scribble + 22 + 4) Solve IK for pick-up plane + + + + + + 41.70692 + 842.7205 + 280.8643 + 30.09863 + + + 46.70692 + 847.7205 + + + + + + + + + + 8ec86459-bf01-4409-baee-174d0d2b13d0 + Data + + + + + Contains a collection of generic data + 02bc89eb-6961-419b-a5c7-ecf1d7beb296 + Data + Pickup config + false + 30aea09c-2c7c-4c06-8c55-6ccfa9c88fd1 + 1 + + + + + + 1226 + 945 + 78 + 20 + + + 1265.877 + 955.8425 + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + false + + 73.59002 + 871.8442 + + + 238.8635 + 871.8442 + + + 238.8635 + 886.5551 + + + 73.59002 + 886.5551 + + A quick note + Cambria + 6e5b9db8-970d-4e5b-bf3d-6ec1c492b072 + false + Scribble + Scribble + 16 + Results in pickup config + + + + + + 68.59002 + 866.8442 + 175.2734 + 24.71094 + + + 73.59002 + 871.8442 + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;240;218;146 + + A group of Grasshopper objects + fccb98c9-c6e5-4caa-8384-ca0ddf85fd1f + 02bc89eb-6961-419b-a5c7-ecf1d7beb296 + 6e5b9db8-970d-4e5b-bf3d-6ec1c492b072 + fb4c5d39-e0a5-4c45-b606-72de43c589ac + b96209a7-93e4-4212-b096-c83e82b4da7b + 98209ace-c305-4683-b351-d9b9daf31e36 + 6bcd8cf7-fa64-4874-9fee-b061d4b8a3c5 + 26cbd1d0-f20d-4b28-a901-cde801435fd7 + 8 + 3962a36b-d451-45d1-acb9-c99a5708db90 + Group + + + + + + + + + + + 00027467-0d24-4fa7-b178-8dc0ac5f42ec + Value List + + + + + Provides a list of preset values to choose from + 137a3255-a54e-4e4c-a9c3-e6d902b2a8bb + 2 + 3 + Value List + List + false + 0 + + + + + 0 + Pickup config + false + + + + + 1 + Trajectory + true + + + + + + 1591 + 171 + 123 + 22 + + + + + + + + + + eeafc956-268e-461d-8e73-ee05c6f72c01 + Stream Filter + + + + + Filters a collection of input streams + 471af287-d88e-43f4-9bb2-98daa088f633 + Stream Filter + Filter + + + + + + 2046 + 170 + 77 + 64 + + + 2078 + 202 + + + + + + 3 + 2e3ab970-8545-46bb-836c-1c11e5610bce + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + Index of Gate stream + fde7ac2c-1b3d-473c-8b2b-4addc4d52e1a + Gate + G + false + 137a3255-a54e-4e4c-a9c3-e6d902b2a8bb + 1 + + + + + + 2048 + 172 + 15 + 20 + + + 2057 + 182 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + 2 + Input stream at index 0 + e6a67ce5-d55f-4ec2-a44c-573291be81a5 + false + Stream 0 + 0 + true + a38644b3-ef3b-4bc2-bf1d-8843907a4a1f + 1 + + + + + + 2048 + 192 + 15 + 20 + + + 2057 + 202 + + + + + + + + 2 + Input stream at index 1 + 14985ec3-7977-426f-bc6b-ad27afc61e04 + false + Stream 1 + 1 + true + a4b043bc-8e30-4b4c-bb40-e7f42497696d + 1 + + + + + + 2048 + 212 + 15 + 20 + + + 2057 + 222 + + + + + + + + 2 + Filtered stream + ddfd1927-535b-4f08-acf1-f1762fa62a54 + false + Stream + S(1) + false + 0 + + + + + + 2093 + 172 + 28 + 60 + + + 2107 + 202 + + + + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;0;155;194 + + A group of Grasshopper objects + 7a58f25a-3dc8-4dfa-bf0f-35404273569e + 137a3255-a54e-4e4c-a9c3-e6d902b2a8bb + 471af287-d88e-43f4-9bb2-98daa088f633 + 766f518e-d29b-4814-a406-a45e5ded4a64 + e4b338fe-125d-4929-92e1-4e17c08f9b3b + f53212f5-507f-4bda-b372-34bf2b7020a3 + a38644b3-ef3b-4bc2-bf1d-8843907a4a1f + e9d20ac9-0dbc-44cb-9f48-878ae446678f + 619d4216-bdfd-4395-b679-83b02e397c53 + df7fb28b-31b3-40c8-ab8a-ec66c12ea055 + 10 + ca0ff086-508f-4122-8664-195d1a456efe + Group + + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + false + + 1582.769 + 120.3864 + + + 1707.131 + 120.3864 + + + 1707.131 + 135.9303 + + + 1582.769 + 135.9303 + + A quick note + Cambria + 766f518e-d29b-4814-a406-a45e5ded4a64 + false + Scribble + Scribble + 22 + Visualization + + + + + + 1577.769 + 115.3864 + 134.3623 + 25.54395 + + + 1582.769 + 120.3864 + + + + + + + + + + 8ec86459-bf01-4409-baee-174d0d2b13d0 + Data + + + + + Contains a collection of generic data + b96209a7-93e4-4212-b096-c83e82b4da7b + Data + Pickup plane + false + d385349b-7e03-4362-b9d0-eacd34e2562b + 1 + 2 + + + + + + 70 + 931 + 75 + 20 + + + 108.0366 + 941.8735 + + + + + + + + + + 8ec86459-bf01-4409-baee-174d0d2b13d0 + Data + + + + + Contains a collection of generic data + 98209ace-c305-4683-b351-d9b9daf31e36 + Data + Robot + false + 4e66fe1b-29b3-4955-9524-ca986decd9ac + 1 + 2 + + + + + + 70 + 908 + 50 + 20 + + + 95.8785 + 918.0554 + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + false + + 46.87446 + 1055.518 + + + 380.1078 + 1055.518 + + + 380.1078 + 1075.692 + + + 46.87446 + 1075.692 + + A quick note + Cambria + ba94b074-3f68-4274-8b84-f87aa5c4cb3e + false + Scribble + Scribble + 22 + 5) Plan trajectory to selected plane + + + + + + 41.87446 + 1050.518 + 343.2334 + 30.17395 + + + 46.87446 + 1055.518 + + + + + + + + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + false + + 75.28395 + 1082.404 + + + 315.0027 + 1082.404 + + + 315.0027 + 1097.115 + + + 75.28395 + 1097.115 + + A quick note + Cambria + 01b0a494-be40-47b6-bdc4-7c92967b9f38 + false + Scribble + Scribble + 16 + From pickup config to target plane + + + + + + 70.28395 + 1077.404 + 249.7187 + 24.71094 + + + 75.28395 + 1082.404 + + + + + + + + + + 8ec86459-bf01-4409-baee-174d0d2b13d0 + Data + + + + + Contains a collection of generic data + 55db7485-e593-4762-a166-64303d976c7a + Data + Target planes + false + aacb02be-ffde-4997-b910-3a5670a6e5b1 + 1 + 2 + + + + + + 70 + 1192 + 78 + 20 + + + 109.3292 + 1202.894 + + + + + + + + + + 8ec86459-bf01-4409-baee-174d0d2b13d0 + Data + + + + + Contains a collection of generic data + 538c02c6-6b3b-4712-a784-dda0bc63f847 + Data + Robot + false + 4e66fe1b-29b3-4955-9524-ca986decd9ac + 1 + 2 + + + + + + 70 + 1135 + 50 + 20 + + + 95.50974 + 1145.363 + + + + + + + + + + 8ec86459-bf01-4409-baee-174d0d2b13d0 + Data + + + + + Contains a collection of generic data + c666c109-2ccb-4c50-90cd-00130af76eaa + Data + Pickup config + false + 02bc89eb-6961-419b-a5c7-ecf1d7beb296 + 1 + 2 + + + + + + 70 + 1163 + 78 + 20 + + + 109.8615 + 1173.738 + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + e4b338fe-125d-4929-92e1-4e17c08f9b3b + Number Slider + + false + 0 + + + + + + 1597 + 220 + 160 + 20 + + + 1597.912 + 220.7585 + + + + + + 3 + 1 + 1 + 255 + 0 + 0 + 79 + + + + + + + + + 59daf374-bc21-4a5e-8282-5504fb7ae9ae + List Item + + + + + 0 + Retrieve a specific item from a list. + df7fb28b-31b3-40c8-ab8a-ec66c12ea055 + List Item + Item + + + + + + 2177 + 246 + 64 + 64 + + + 2211 + 278 + + + + + + 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 + 39c89e61-bc93-43d0-a501-c5bba7a3da6e + List + L + false + ddfd1927-535b-4f08-acf1-f1762fa62a54 + 1 + + + + + + 2179 + 248 + 17 + 20 + + + 2189 + 258 + + + + + + + + Item index + 83d287eb-3d9d-4785-b735-156766b364e7 + Index + i + false + e4b338fe-125d-4929-92e1-4e17c08f9b3b + 1 + + + + + + 2179 + 268 + 17 + 20 + + + 2189 + 278 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Wrap index to list bounds + 60da4aea-66d4-49fc-8aa9-a5189edc913b + Wrap + W + false + 0 + + + + + + 2179 + 288 + 17 + 20 + + + 2189 + 298 + + + + + + 1 + + + + + 1 + {0} + + + + + true + + + + + + + + + + + Item at {i'} + 4ca3f55b-10fb-41c3-9f24-2b4809b96eeb + false + Item + i + false + 0 + + + + + + 2226 + 248 + 13 + 60 + + + 2232.5 + 278 + + + + + + + + + + + + + + 8ec86459-bf01-4409-baee-174d0d2b13d0 + Data + + + + + Contains a collection of generic data + bcf27a28-24e5-4d31-8438-444d7fe511cb + Data + Trajectory + false + 9870c40b-647a-4d6e-afd8-4edf023096eb + 1 + + + + + + 1244 + 1220 + 61 + 20 + + + 1274.562 + 1230.189 + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + configs = trajectory.points + GhPython provides a Python script component + + 182 + 182 + + + 558 + 571 + + true + true + 2 + false + f53212f5-507f-4bda-b372-34bf2b7020a3 + false + true + GhPython Script + get configs + + + + + + 1704 + 378 + 132 + 28 + + + 1774 + 392 + + + + + + 1 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + Script variable Python + 50f68354-3c25-4a84-a5f7-ddaf267be516 + trajectory + trajectory + true + 0 + true + e9d20ac9-0dbc-44cb-9f48-878ae446678f + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1706 + 380 + 53 + 24 + + + 1734 + 392 + + + + + + + + Script output configs. + a4b043bc-8e30-4b4c-bb40-e7f42497696d + configs + configs + false + 0 + + + + + + 1789 + 380 + 45 + 24 + + + 1811.5 + 392 + + + + + + + + + + + + + + 8ec86459-bf01-4409-baee-174d0d2b13d0 + Data + + + + + Contains a collection of generic data + a38644b3-ef3b-4bc2-bf1d-8843907a4a1f + Data + Pickup config + false + 02bc89eb-6961-419b-a5c7-ecf1d7beb296 + 1 + 2 + + + + + + 1591 + 364 + 78 + 20 + + + 1630.11 + 374.3318 + + + + + + + + + + 8ec86459-bf01-4409-baee-174d0d2b13d0 + Data + + + + + Contains a collection of generic data + e9d20ac9-0dbc-44cb-9f48-878ae446678f + Data + Trajectory + false + bcf27a28-24e5-4d31-8438-444d7fe511cb + 1 + 2 + + + + + + 1591 + 387 + 61 + 20 + + + 1621.626 + 397.6615 + + + + + + + + + + 8ec86459-bf01-4409-baee-174d0d2b13d0 + Data + + + + + Contains a collection of generic data + 619d4216-bdfd-4395-b679-83b02e397c53 + Data + Robot + false + 4e66fe1b-29b3-4955-9524-ca986decd9ac + 1 + 2 + + + + + + 1591 + 339 + 50 + 20 + + + 1616.464 + 349.4858 + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;240;218;146 + + A group of Grasshopper objects + ba94b074-3f68-4274-8b84-f87aa5c4cb3e + 01b0a494-be40-47b6-bdc4-7c92967b9f38 + 55db7485-e593-4762-a166-64303d976c7a + 97392278-c93e-4240-86e9-5e59dc2eb992 + 4a09e38e-e49b-43a1-809e-f310b5a4c3e2 + 1f8b3c58-8382-468d-8885-a179a0ad05e0 + 538c02c6-6b3b-4712-a784-dda0bc63f847 + c666c109-2ccb-4c50-90cd-00130af76eaa + 13b3eb29-3c6d-41ba-80fe-d6214ebc9674 + 9d4e5cda-5bb7-42fe-acfa-968fa6c6c067 + cd76efff-9d02-4eb1-b6dd-080d6a0e6d4d + bcf27a28-24e5-4d31-8438-444d7fe511cb + 97ff64a4-7932-4dc4-a5b7-0ad3457d6b2f + 874fa7bf-30c9-4e1f-acf7-712c9ca99fd3 + 284cb8fa-579f-4550-a187-2424af855a09 + 0da55ec5-d8ec-478c-a5bb-a80c603f9948 + d30e9b90-4e6d-4fc4-ba6c-64c326911588 + d7895240-ed55-4de4-a92c-9ada96405a40 + 731c8e7c-0e16-42ff-aa11-7547a70a5b11 + 7a465745-a31e-4edb-970a-1911a5d90ad2 + 20 + 4c3c7466-b1c2-4942-9ac0-63cb70a5b6b7 + Group + + + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + ecc8c71a-07d9-4980-90b1-a3cd2f8081a6 + Panel + + false + 0 + 0 + Define multiple target planes in any way you like, for example, +reference a curve from Rhino, divide it and assign a plane to each point + +Make sure all planes are oriented in a way that makes sense +for the robot to reach it as well. + + + + + + -530 + 627 + 523 + 96 + + 0 + 0 + 0 + + -530 + 627.58 + + + + + + 3 + + 255;255;250;90 + + true + true + true + false + false + true + + + + + Courier New + 8 + + + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + fb166dfc-4abf-4aa5-9ecf-d86922966dfe + Panel + + false + 0 + 0 + Define one pick-up plane in any way you like, +for example, reference a point from Rhino and assign a plane to it. + +Make sure the plane is oriented in a way that makes sense +for the robot to reach it. You can check this by observing the +results of the IK solution for this pickup-plane. + + + + + + -536 + 357 + 529 + 96 + + 0 + 0 + 0 + + -535.2353 + 357.0506 + + + + + + 3 + + 255;255;250;90 + + true + true + true + false + false + true + + + + + Courier New + 8 + + + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + c7cc41e4-23fe-4958-87c2-e75feb10ebac + Panel + + false + 0 + 0 + Load the robot from ROS. + +Make sure ROS/MoveIt is running before you start (ie. "Compose up"). + + + + + + -536 + 124 + 529 + 96 + + 0 + 0 + 0 + + -535.2353 + 124.4706 + + + + + + 3 + + 255;255;250;90 + + true + true + true + false + false + true + + + + + Courier New + 8 + + + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + 3f032319-94be-407d-8e0f-7615f6976834 + Panel + + false + 0 + 0 + Use inverse kinematics of the robot to find +a feasible configuration to reach the pickup plane. + +You can use the COMPAS FAB component or +code it in a GHPython component. + + + + + + -530 + 877 + 523 + 96 + + 0 + 0 + 0 + + -529.5882 + 877.4415 + + + + + + 3 + + 255;255;250;90 + + true + true + true + false + false + true + + + + + Courier New + 8 + + + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + 1f02a236-cf56-4437-8d21-1243b22a7b8e + Panel + + false + 0 + 0 + With the pickup config and a list of target planes, you are ready to compute the solution trajectory for each plane. + +First create a constraint from the selected plane, then use the plan free-space motion to calculate a trajectory. + + + + + + -530 + 1139 + 523 + 96 + + 0 + 0 + 0 + + -529.353 + 1139.206 + + + + + + 3 + + 255;255;250;90 + + true + true + true + false + false + true + + + + + Courier New + 8 + + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + ROS Connect + + + + + """ +Connect or disconnect to ROS. + +COMPAS FAB v0.27.0 +""" +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 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) + is_connected = ros_client.is_connected if ros_client else False + return (ros_client, is_connected) + + Connect or disconnect to ROS. +COMPAS FAB v0.27.0 + true + true + 2 + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEQAACxEBf2RfkQAAAdZJREFUSEu1lD2O4kAQRrkBcwP2BnADfARuABEhcAMcEEyCQKuVCCEkY27A3ADCyUAimQyHm/V+r9bNNp5iSLwtPWF/9dvdZRohhP+KK9aJK9aJK9aJKzpk4k08W4XYiB/CYquJPJbX6zVMp9PQbrcV0XhIt9sN6/VaIVZoQLyXMGVC8piYXwp5jMfj0Gq1zK/f7yvUVsdLGnkRBV0RlHT2/g2WHH+KonmJI4PD4ZA6HwVFPd9IR1hTzWZTj76Tcjay1Wr1QWIKnE6n0Ov17DnhXeSiWnTJbvHZ7/d3BkNrg3E2m/2OBbiH4XCITkLg+YhNnMVtakRuib0CWgMMYlMUxetutzPH8vwZ00f+HB8auznHe6CxagDdnMt3ztPOkunAWYsiPcF3YYxGo19ZloXtdvtT78d4b9yDVpEmf8Eg8qiJt7gLCi0WC9v2IxjV6Mu9aU3SAh2MYhI1wZaPBMcZfwadl8n5oqX8Sya7OZkhgSJoge1Xu04pE/Ot3E4hTUQBmyDB+d7ZBIU4f4INBmE+n3/meR4ul8tS2pe4+5e/91CURRjH7BuYIIYCX/vf8fgqaKYFHxEvz6CZh8nBFUGLQl7nN7y4Kq5YJ65YJ65YJ65YH6HxB7b14P1B22tpAAAAAElFTkSuQmCC + + false + 48fd0fd8-a319-4a4e-9ad8-52b581bc5ce1 + true + true + ROS Connect + ROS + + + + + + 315 + 138 + 153 + 64 + + + 378 + 170 + + + + + + 3 + 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 + The ip address ROS. Defaults to 127.0.0.1. + 052f9848-35a0-4ea8-9de6-3bb17d0601c6 + ip + ip + true + 0 + true + 0 + 37261734-eec7-4f50-b6a8-b8d1f3c4396b + + + + + + 317 + 140 + 46 + 20 + + + 341.5 + 150 + + + + + + + + true + The port of ROS. Defaults to 9090. + 60b0ffb8-bdbd-44e8-926a-82926d790406 + port + port + true + 0 + true + 0 + 48d01794-d3d8-4aef-990e-127168822244 + + + + + + 317 + 160 + 46 + 20 + + + 341.5 + 170 + + + + + + + + true + If True, connects to ROS. If False, disconnects from ROS. Defaults to False. + eb3a34a9-af49-49ea-bd3b-6ce0e8239882 + connect + connect + true + 0 + true + 4c4192d8-2798-43a8-92cd-f892409f235f + 1 + d60527f5-b5af-4ef6-8970-5f96fe412559 + + + + + + 317 + 180 + 46 + 20 + + + 341.5 + 190 + + + + + + + + The ROS client. + 65da7679-6844-401c-89dc-b6119a036c3c + ros_client + ros_client + false + 0 + + + + + + 393 + 140 + 73 + 30 + + + 429.5 + 155 + + + + + + + + True if connection established. + 621c6a7c-75a6-43dd-9fc1-39d31026ad37 + is_connected + is_connected + false + 0 + + + + + + 393 + 170 + 73 + 30 + + + 429.5 + 185 + + + + + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + ROS Robot + + + + + """ +Load robot directly from ROS. + +COMPAS FAB v0.27.0 +""" +from compas_ghpython.artists import RobotModelArtist +from ghpythonlib.componentbase import executingcomponent as component +from scriptcontext import sticky as st + +from compas_fab.ghpython.components import create_id + + +class ROSRobot(component): + def RunScript(self, ros_client, load): + key = create_id(self, 'robot') + + if ros_client and ros_client.is_connected and load: + # Load URDF from ROS + st[key] = ros_client.load_robot(load_geometry=True, precision='12f') + st[key].artist = RobotModelArtist(st[key].model) + + robot = st.get(key, None) + if robot: # client sometimes need to be restarted, without needing to reload geometry + robot.client = ros_client + return robot + + Load robot directly from ROS. +COMPAS FAB v0.27.0 + true + true + 2 + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEQAACxEBf2RfkQAAAVtJREFUSEu9lMFRwzAQRVMCJaSElJASUgIlUAGTEhguXHPinBJSAiWkBDow/9n6ZmWtQzwYduaNpdVqtf5redN13Z+SOtckdS5B9iCeeKbrmXMJsrNg8CkOzXo1Gao5iYtg4z6uR2SP4iqY+Ans3Y5xk00sTjfsBcmOgbjOmMK2wvs/mgNKQL8o3sRzmb8Iy5BRySLbifHNpwsM3gWHvJY5ByAb44xKRtkoTz+vJkNiBn7CQXAIr29oqNd7OWTIhHxMrmNOD0oQb2EdSYL2VUUlDjlJ5kKQMDa8lahsdEPdNFfUHFLiiYsNJ766D9WG3lHLYy7TOCOjEArLi2gcQ7ATR2bvxC1yZ/7VjI1bQu4cXjt+KeaYxd8idQLJQmLDoelPbY7UaWTxCzGnLHaO1Glkv2546xhubUz2E8i2m+YxreP7Ji9htvmt4x8O4Ffhn9q93C/R2qTO9eg2XxfZxOCoCLXEAAAAAElFTkSuQmCC + + false + 8afc6a4d-4416-4b4a-90ec-c8964ff80e2a + true + true + ROS Robot + Robot + + + + + + 544 + 208 + 124 + 44 + + + 614 + 230 + + + + + + 2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + The ROS client. + c37fe19d-5b01-49d4-ad94-3913045efa79 + ros_client + ros_client + true + 0 + true + 65da7679-6844-401c-89dc-b6119a036c3c + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 546 + 210 + 53 + 20 + + + 574 + 220 + + + + + + + + true + If True, loads the robot from ROS. Defaults to False. + b3b8ed27-1fcb-4357-8d58-140f0c12e623 + load + load + true + 0 + true + 4c4192d8-2798-43a8-92cd-f892409f235f + 1 + d60527f5-b5af-4ef6-8970-5f96fe412559 + + + + + + 546 + 230 + 53 + 20 + + + 574 + 240 + + + + + + + + The robot. + 93b2a330-6167-419e-a7b7-8e956dd8dc5b + robot + robot + false + 0 + + + + + + 629 + 210 + 37 + 40 + + + 647.5 + 230 + + + + + + + + + + + + + + 2e78987b-9dfb-42a2-8b76-3923ac8bd91a + Boolean Toggle + + + + + Boolean (true/false) toggle + 4c4192d8-2798-43a8-92cd-f892409f235f + Boolean Toggle + Toggle + false + 0 + true + + + + + + 122 + 195 + 104 + 22 + + + + + + + + + + fbac3e32-f100-4292-8692-77240a42fd1a + Point + + + + + Contains a collection of three-dimensional points + 4f6df0a0-fef8-46a2-af3d-7e027d7a3b99 + Point + Pt + false + 0 + + + + + + 123 + 445 + 50 + 20 + + + 148 + 455 + + + + + + 1 + + + + + 1 + {0} + + + + + + + 0.340816918016863 + 0.372114973462012 + 0 + + + + + + + + + + + + + + 17b7152b-d30d-4d50-b9ef-c9fe25576fc2 + XY Plane + + + + + World XY plane. + true + 63119651-183f-4652-b382-de4851f36cac + XY Plane + XY + + + + + + 267 + 451 + 65 + 31 + + + 299 + 467 + + + + + + Origin of plane + 5034d1a6-b809-4816-8172-e41337bb0a9d + Origin + O + false + 4f6df0a0-fef8-46a2-af3d-7e027d7a3b99 + 1 + + + + + + 269 + 453 + 15 + 27 + + + 278 + 466.5 + + + + + + 1 + + + + + 1 + {0} + + + + + + + 0 + 0 + 0 + + + + + + + + + + + + World XY plane + 945d4564-fdf3-4cd7-8cc9-ec8a5bc96d6e + Plane + P + false + 0 + + + + + + 314 + 453 + 16 + 27 + + + 322 + 466.5 + + + + + + + + + + + + c73e1ed0-82a2-40b0-b4df-8f10e445d60b + Flip Plane + + + + + Flip or swap the axes of a plane + 267ba84a-194a-4035-89e9-3bb99e1acd04 + Flip Plane + PFlip + + + + + + 431 + 454 + 64 + 84 + + + 462 + 496 + + + + + + Plane to adjust + 601fab8c-2a59-49c9-abbd-cdd4e1cbcd68 + Plane + P + false + 945d4564-fdf3-4cd7-8cc9-ec8a5bc96d6e + 1 + + + + + + 433 + 456 + 14 + 20 + + + 441.5 + 466 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + + + + Reverse the x-axis direction + ba282a33-735e-4d96-b4bf-e4f5345cf018 + Reverse X + X + false + 0 + + + + + + 433 + 476 + 14 + 20 + + + 441.5 + 486 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + Reverse the y-axis direction + 1c3ae742-7e68-4f51-8380-291276bff881 + Reverse Y + Y + false + 0 + + + + + + 433 + 496 + 14 + 20 + + + 441.5 + 506 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + Swap the x and y axis directions + 05444331-c238-46be-b373-42b902ce19f7 + Swap axes + S + false + 0 + + + + + + 433 + 516 + 14 + 20 + + + 441.5 + 526 + + + + + + 1 + + + + + 1 + {0} + + + + + true + + + + + + + + + + + Flipped plane + 56856eaa-bd8a-4ba7-a018-89ea3ec16886 + Plane + P + false + 0 + + + + + + 477 + 456 + 16 + 80 + + + 485 + 496 + + + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + Inverse Kinematics + + + + + """ +Calculate the robot's inverse kinematic for a given plane. + +COMPAS FAB v0.27.0 +""" +from compas_rhino.conversions import RhinoPlane +from ghpythonlib.componentbase import executingcomponent as component + + +class InverseKinematics(component): + def RunScript(self, robot, plane, start_configuration, group): + configuration = None + if robot and robot.client and robot.client.is_connected and plane: + frame = RhinoPlane.from_geometry(plane).to_compas_frame() + configuration = robot.inverse_kinematics(frame, start_configuration, group) + return configuration + + Calculate the robot's inverse kinematic for a given plane. +COMPAS FAB v0.27.0 + true + true + 2 + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEQAACxEBf2RfkQAAAYFJREFUSEu1lLFxwzAMRVWn8gApNIKKDOAubbqk1AgeQRP4NIJG0AgqMoCq1BpBGzD/ywANkbAt3dm4eyfwkwBEElIRQngprvhMXHEL7+ff0tNTXFFBkhqMIAgz6MG3+AcvzuKKDJRETDqBFjSgE005efEWV0QgEzJBl+gs/CdzZLTzHpmAoEqCe9VgNWjePj5/oHMn3B13xnV37yITJEEMhH0BOsrqWLBuuQfYEVR2btFTAQEDmHQMawCdyTyZzCYeAAeEfrz8VXKC5Mv2dQzrJFALWDyNtDFeHQXJ0yOybzcD3scJWJ3YnQyazytQSoHlkmG6Az5XfQ9jMTosbIveLkCQnG2qBRg8p2tk7iDzHFhiI2RBFpi+YWzZFFgFRlnHYs1q3g5SYL0E1t78FlyRwLh9OiTr76344iW5Xq57/lvJhaIogZ6psunX7JEL11azH1H8cPaSC9fE/EW04se+3ksu5MdDbrbpI3Lh0tf246H/ki7iv+Xoze/BFZ9HKP4BuwtzfPsUblIAAAAASUVORK5CYII= + + false + 6bcd8cf7-fa64-4874-9fee-b061d4b8a3c5 + true + true + Inverse Kinematics + IK + + + + + + 313 + 880 + 207 + 84 + + + 428 + 922 + + + + + + 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 + The robot. + ebe9afad-5a5b-41b3-aaee-c50a21e91f5d + robot + robot + true + 0 + true + 98209ace-c305-4683-b351-d9b9daf31e36 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + 2 + + + + + + 315 + 882 + 98 + 20 + + + 365.5 + 892 + + + + + + + + true + The plane or frame to calculate the inverse kinematic for. + 4fe4a350-6669-4585-9f6e-fd32cd950ab9 + plane + plane + true + 0 + true + b96209a7-93e4-4212-b096-c83e82b4da7b + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 315 + 902 + 98 + 20 + + + 365.5 + 912 + + + + + + + + true + If passed, calculates the inverse such that the joint positions differ the least from the start_configuration. Defaults to the zero configuration. + aa7cf200-ae0e-4202-a3b8-b4c8cbb4dbef + start_configuration + start_configuration + true + 0 + true + fefcd536-972e-488c-947d-a252cd77c34c + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 315 + 922 + 98 + 20 + + + 365.5 + 932 + + + + + + + + true + The planning group used for calculation. Defaults to the robot's main planning group. + c4f4dac0-5d44-4711-9981-bf04cdb6997a + group + group + true + 0 + true + 0 + 37261734-eec7-4f50-b6a8-b8d1f3c4396b + + + + + + 315 + 942 + 98 + 20 + + + 365.5 + 952 + + + + + + + + The planning group's configuration. + 30aea09c-2c7c-4c06-8c55-6ccfa9c88fd1 + configuration + configuration + false + 0 + + + + + + 443 + 882 + 75 + 80 + + + 480.5 + 922 + + + + + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + Zero config + + + + + """ +Get a zero configuration for a robot. + +COMPAS FAB v0.27.0 +""" +from ghpythonlib.componentbase import executingcomponent as component + + +class ConfigZero(component): + def RunScript(self, robot, group): + + if robot: + return robot.zero_configuration(group) + + return None + + Get a zero configuration for a robot. +COMPAS FAB v0.27.0 + true + true + 2 + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEQAACxEBf2RfkQAAASFJREFUSEu1lWuxwkAUg7GABSxgAQtYuBawgAUsYAELWMACFsr52Iamnfyh7M1MhiWdzck+TrsZhuFfGcWejGJPZnGObfFUfBZ5CB+jNkP0iuKEXREzGS95LxLgjegVxQkYyOxaPBb/xrH0S/GN6BXFBoxkgqGD1L5l+2L2imKDpzwgGNh/PYPnYvaKYoMS8utQet8+xtkriu1wZ5MNSs+q/AJkryi2yZp4Qxih9NK8wC56RXFe4HNLCozRdCZdC2jbfEVdCshQ6SkkrC7gh0wB/fftAt4L2SuKDZpMSvWEp+fA0eDX1xR4o8Fleu/0VY3mBtDTA2+0Va8K4Cak5PApzLlI/6wsekVxAqn9pixJgJ9e10LfD05PRrEno9iPw+YFseBH4JnHF1UAAAAASUVORK5CYII= + + false + 26cbd1d0-f20d-4b28-a901-cde801435fd7 + true + true + Zero config + Zero config + + + + + + 175 + 965 + 110 + 44 + + + 228 + 987 + + + + + + 2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + The robot. + 817576e6-d60d-4c2a-967b-139364c33b0e + robot + robot + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + 2 + + + + + + 177 + 967 + 36 + 20 + + + 196.5 + 977 + + + + + + + + true + If assigned, it will return the zero configuration for the given group, otherwise a full zero configuration. + a3f4c747-58c7-4d23-9465-e0ef7ffd1bf7 + group + group + true + 0 + true + 0 + 37261734-eec7-4f50-b6a8-b8d1f3c4396b + + + + + + 177 + 987 + 36 + 20 + + + 196.5 + 997 + + + + + + + + The zero configuration. + fefcd536-972e-488c-947d-a252cd77c34c + config + config + false + 0 + + + + + + 243 + 967 + 40 + 40 + + + 263 + 987 + + + + + + + + + + + + + + fbac3e32-f100-4292-8692-77240a42fd1a + Point + + + + + Contains a collection of three-dimensional points + 31d6da72-251a-49f0-bcdc-b93470126a69 + Point + Pt + false + 0 + + + + + + 144 + 661 + 50 + 20 + + + 169.7647 + 671.5051 + + + + + + 1 + + + + + 1 + {0} + + + + + + + -0.794932538936091 + -0.335402123768854 + 0 + + + + + + + + + + + + + + 17b7152b-d30d-4d50-b9ef-c9fe25576fc2 + XY Plane + + + + + World XY plane. + true + 8fb4057b-f638-4f04-8d11-d6659d5ac430 + XY Plane + XY + + + + + + 292 + 663 + 65 + 31 + + + 324 + 679 + + + + + + Origin of plane + 6ed034d8-f6ce-49ec-9582-0437fbced864 + Origin + O + false + 31d6da72-251a-49f0-bcdc-b93470126a69 + 1 + + + + + + 294 + 665 + 15 + 27 + + + 303 + 678.5 + + + + + + 1 + + + + + 1 + {0} + + + + + + + 0 + 0 + 0 + + + + + + + + + + + + World XY plane + eda89015-1d2f-4f03-a22b-bf2ed4629bb6 + Plane + P + false + 0 + + + + + + 339 + 665 + 16 + 27 + + + 347 + 678.5 + + + + + + + + + + + + c73e1ed0-82a2-40b0-b4df-8f10e445d60b + Flip Plane + + + + + Flip or swap the axes of a plane + 8876176f-7f14-480c-bf5b-f362b1680fab + Flip Plane + PFlip + + + + + + 456 + 666 + 64 + 84 + + + 487 + 708 + + + + + + Plane to adjust + 30839f46-40ab-4a5d-8bc1-721858d56389 + Plane + P + false + eda89015-1d2f-4f03-a22b-bf2ed4629bb6 + 1 + + + + + + 458 + 668 + 14 + 20 + + + 466.5 + 678 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + + + + Reverse the x-axis direction + b891346d-359e-40d7-9dee-fa2f51b7727e + Reverse X + X + false + 0 + + + + + + 458 + 688 + 14 + 20 + + + 466.5 + 698 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + Reverse the y-axis direction + bd72531d-423e-4e71-a8cb-2ebdd5d9c907 + Reverse Y + Y + false + 0 + + + + + + 458 + 708 + 14 + 20 + + + 466.5 + 718 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + Swap the x and y axis directions + 47c4663d-51e2-4067-a779-ca4cec96c42f + Swap axes + S + false + 0 + + + + + + 458 + 728 + 14 + 20 + + + 466.5 + 738 + + + + + + 1 + + + + + 1 + {0} + + + + + true + + + + + + + + + + + Flipped plane + 7cc034be-6229-4366-9f2e-954fafff2420 + Plane + P + false + 0 + + + + + + 502 + 668 + 16 + 80 + + + 510 + 708 + + + + + + + + + + + + fbac3e32-f100-4292-8692-77240a42fd1a + Point + + + + + Contains a collection of three-dimensional points + 61f941bf-a670-4bd4-9743-24d756a9ddee + Point + Pt + false + 0 + + + + + + 113 + 732 + 50 + 20 + + + 138.5629 + 742.6732 + + + + + + 1 + + + + + 1 + {0} + + + + + + + -0.461779329339006 + 0.549283756428269 + 0.346990568391562 + + + + + + + + + + + + + + 17b7152b-d30d-4d50-b9ef-c9fe25576fc2 + XY Plane + + + + + World XY plane. + 043a4e79-bd11-48e8-bb8c-c44fe6ea9aa2 + XY Plane + XY + + + + + + 291 + 740 + 65 + 31 + + + 323 + 756 + + + + + + Origin of plane + 5b3bd28f-b0e3-4c5c-b0ff-5fd10b484cee + Origin + O + false + 61f941bf-a670-4bd4-9743-24d756a9ddee + 1 + + + + + + 293 + 742 + 15 + 27 + + + 302 + 755.5 + + + + + + 1 + + + + + 1 + {0} + + + + + + + 0 + 0 + 0 + + + + + + + + + + + + World XY plane + 74c908f7-e1a4-43e5-b768-75a611af3e6b + Plane + P + false + 0 + + + + + + 338 + 742 + 16 + 27 + + + 346 + 755.5 + + + + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + 97ff64a4-7932-4dc4-a5b7-0ad3457d6b2f + Panel + + false + 0 + ad56936d-d5c4-4d23-a81c-6ec436f60ed3 + 1 + Double click to edit panel content… + + + + + + 769 + 1070 + 160 + 204 + + 0 + 0 + 0 + + 769.7095 + 1070.748 + + + + + + + 255;255;250;90 + + true + true + true + false + false + true + + + + + + + + + 2e78987b-9dfb-42a2-8b76-3923ac8bd91a + Boolean Toggle + + + + + Boolean (true/false) toggle + 874fa7bf-30c9-4e1f-acf7-712c9ca99fd3 + Boolean Toggle + Toggle + false + 0 + true + + + + + + 532 + 1422 + 104 + 22 + + + + + + + + + + 3cadddef-1e2b-4c09-9390-0e8f78f7609f + Merge + + + + + Merge a bunch of data streams + 3ad8d5d4-190e-47d5-a8a8-a7e800bb20f3 + Merge + Merge + + + + + + 588 + 696 + 72 + 64 + + + 626 + 728 + + + + + + 3 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + 2 + Data stream 1 + 1155686e-5bb5-4bc1-8b4d-3160031278b9 + false + Data 1 + D1 + true + 7cc034be-6229-4366-9f2e-954fafff2420 + 1 + + + + + + 590 + 698 + 21 + 20 + + + 602 + 708 + + + + + + + + 2 + Data stream 2 + afdbe9af-b97c-4040-ac34-af3667c1ce7f + false + Data 2 + D2 + true + 74c908f7-e1a4-43e5-b768-75a611af3e6b + 1 + + + + + + 590 + 718 + 21 + 20 + + + 602 + 728 + + + + + + + + 2 + Data stream 3 + 8f29b77a-2f96-497a-b7a7-b0968bcddb0e + false + Data 3 + D3 + true + 0 + + + + + + 590 + 738 + 21 + 20 + + + 602 + 748 + + + + + + + + 2 + Result of merge + 5b4ba2cc-99bc-4cfd-9fcb-e8306e4116a8 + Result + R + false + 0 + + + + + + 641 + 698 + 17 + 60 + + + 649.5 + 728 + + + + + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + Constraints From Plane + + + + + """ +Create a position and an orientation constraint from a plane calculated for the group's end-effector link. + +COMPAS FAB v0.27.0 +""" +import math + +from compas_rhino.conversions import RhinoPlane +from ghpythonlib.componentbase import executingcomponent as component + + +class ConstraintsFromPlane(component): + def RunScript(self, robot, plane, group, tolerance_position, tolerance_xaxis, tolerance_yaxis, tolerance_zaxis): + goal_constraints = None + if robot and plane: + tolerance_position = tolerance_position or 0.001 + tolerance_xaxis = tolerance_xaxis or 1. + tolerance_yaxis = tolerance_yaxis or 1. + tolerance_zaxis = tolerance_zaxis or 1. + + frame = RhinoPlane.from_geometry(plane).to_compas_frame() + tolerances_axes = [math.radians(tolerance_xaxis), math.radians(tolerance_yaxis), math.radians(tolerance_zaxis)] + goal_constraints = robot.constraints_from_frame(frame, tolerance_position, tolerances_axes, group) + + return goal_constraints + + Create a position and an orientation constraint from a plane calculated for the group's end-effector link. +COMPAS FAB v0.27.0 + true + true + 2 + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxEAAAsRAX9kX5EAAAHfSURBVEhLtZUxS8NAGIaPdhDUoVRRxNaeCC4qZHAV6g8QOjkHx04Z/AEZOzgUHV3yD8zslMFBcCn4B0onwSVO4nS+3/Uu3LVfm1RweMjde/meL7mcVSil/hU2nEWI5waXV4ENXSCXYMitVYENXSAPwYhbqwIbukCeAgz+tk1s6AJxbhr0uPUy2NACaWDkRMLdUwYbWiCNnAZj7p4y2NACaeY0ICR33zLY0AXSGGTcWhXY0GVZg6OODMHS5mxIvAjRpeumeBqs1dM3GotH0QXFcYU8BhjO11vYEPIQKDC4aV18iyBWECdgAkbypN2HeERyQw4SMPeNvAnhyC1J8070Ic6B2rnankqlnOCa6fFUbhsFrq9MTkQQN8DXxu26llOT+n3t/fD4YEBzqsW1axp4PyuL5DlITaZfGw16nbPWZ+e0/VN7qNGWqa3r5odtQGAc0RwUf/VW3gMZiID3igQK6On0BwWvaDTcu9xN2+f7uoFZI/QbAdq6mGo90SJMsd6eVaBaVrgIFNEeF+ceY++YYkxvSvLIZkVxFVA4NILQzGcb2KOrvxvhCcpAYQOMjYTktiE9uZUXT094gipAIIE9/y60fZ6c8CarAFkAbCP6TWL/480FqwCpPr7c2hQlfgEp2YYU5C2cFwAAAABJRU5ErkJggg== + + false + 0da55ec5-d8ec-478c-a5bb-a80c603f9948 + true + true + Constraints From Plane + Constraints From Plane + + + + + + 515 + 1186 + 193 + 144 + + + 628 + 1258 + + + + + + 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 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + The robot. + 461fe79d-c358-47f5-aa3f-e33a2c78d889 + robot + robot + true + 0 + true + 538c02c6-6b3b-4712-a784-dda0bc63f847 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + 2 + + + + + + 517 + 1188 + 96 + 20 + + + 566.5 + 1198 + + + + + + + + true + The plane or frame from which we create position and orientation constraints. + a564065a-6afc-43c2-9f98-645c728a74f1 + plane + plane + true + 0 + true + 731c8e7c-0e16-42ff-aa11-7547a70a5b11 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 517 + 1208 + 96 + 20 + + + 566.5 + 1218 + + + + + + + + true + The planning group for which we specify the constraint. Defaults to the robot's main planning group. + 8e9ada33-2598-4e59-82ad-a94be98c05af + group + group + true + 0 + true + 0 + 37261734-eec7-4f50-b6a8-b8d1f3c4396b + + + + + + 517 + 1228 + 96 + 20 + + + 566.5 + 1238 + + + + + + + + true + The allowed tolerance to the frame's position (defined in the robot's units). Defaults to 0.001 + 2823982c-3e70-4b66-ac46-948e414c48e7 + tolerance_position + tolerance_position + true + 0 + true + 0 + 39fbc626-7a01-46ab-a18e-ec1c0c41685b + + + + + + 517 + 1248 + 96 + 20 + + + 566.5 + 1258 + + + + + + + + true + The allowed tolerance of the frame's X-axis in degrees. + b9c92e56-07da-47cf-ad9d-dfbbbff656a4 + tolerance_xaxis + tolerance_xaxis + true + 0 + true + 0 + 39fbc626-7a01-46ab-a18e-ec1c0c41685b + + + + + + 517 + 1268 + 96 + 20 + + + 566.5 + 1278 + + + + + + + + true + The allowed tolerance of the frame's Y-axis in degrees. + 8b415fab-d322-41df-8c59-794d058630a6 + tolerance_yaxis + tolerance_yaxis + true + 0 + true + 0 + 39fbc626-7a01-46ab-a18e-ec1c0c41685b + + + + + + 517 + 1288 + 96 + 20 + + + 566.5 + 1298 + + + + + + + + true + The allowed tolerance of the frame's Z-axis in degrees. + 734ac874-1714-4e55-84da-47e966a782b2 + tolerance_zaxis + tolerance_zaxis + true + 0 + true + 0 + 39fbc626-7a01-46ab-a18e-ec1c0c41685b + + + + + + 517 + 1308 + 96 + 20 + + + 566.5 + 1318 + + + + + + + + A list containing a position and an orientation constraint. + ad56936d-d5c4-4d23-a81c-6ec436f60ed3 + constraints + constraints + false + 0 + + + + + + 643 + 1188 + 63 + 140 + + + 674.5 + 1258 + + + + + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + Plan Motion + + + + + """ +Calculate a motion path. + +COMPAS FAB v0.27.0 +""" +from ghpythonlib.componentbase import executingcomponent as component +from scriptcontext import sticky as st + +from compas_fab.ghpython.components import create_id + + +class PlanMotion(component): + def RunScript(self, robot, goal_constraints, start_configuration, group, attached_collision_meshes, path_constraints, planner_id, compute): + + key = create_id(self, 'trajectory') + + path_constraints = list(path_constraints) if path_constraints else None + attached_collision_meshes = list(attached_collision_meshes) if attached_collision_meshes else None + planner_id = str(planner_id) if planner_id else 'RRTConnect' + + if robot and robot.client and robot.client.is_connected and start_configuration and goal_constraints and compute: + st[key] = robot.plan_motion(goal_constraints, + start_configuration=start_configuration, + group=group, + options=dict( + attached_collision_meshes=attached_collision_meshes, + path_constraints=path_constraints, + planner_id=planner_id, + )) + + trajectory = st.get(key, None) + return trajectory + + Calculate a motion path. +COMPAS FAB v0.27.0 + + 1731 + 343 + + + 558 + 571 + + true + true + 2 + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAGNSURBVEhLtZTNbQIxEIUpgQ5ICRTAgRJyibimBErgEIkaInGgAyiBDpICuOeYnHJByuZ93vFm7B0SQBtLH4znPeO/MaOmaf6VMDkkYXJIwuS1qI3FVhzEXsw7zRs9ajOxE5tI96i9CgJPmuTcgLUzvokN32e89yJ7PfukBwMmxqcgwY+fLD4G/pVpNYekBwNeBD/4JGaWYxICdjOp/FPTalZJ92YbkFdbnL3ag+Do1j5vWr0L7mSctMD8bqa0epenQgjefd7pd2IORb7otGe/FAufN408gbqlBmocI4srd1502rIk6K1SjcnRl7Vmet55utwuX3T+PoYjmoh2SHEQ/DoBx8Ak4eNSC1dpGmOLe0v5LmgviWqAR29yHnbwJeoK49UTQLG7bKCWP8yQ2Xqj+fIj5C6692B9gpP3J80M/EER1Ex7A9odEKRXrcbbeBYc7a7nN1O+3Jqips27EEzCffhxvQeY/Onjih2Yn5rPBUEirKzkTR8X3sEt/AQXVNEthMkhCZNDEiaHoxl9A6glDpIGAdZaAAAAAElFTkSuQmCC + + false + d30e9b90-4e6d-4fc4-ba6c-64c326911588 + true + true + Plan Motion + Plan Motion + + + + + + 765 + 1299 + 224 + 164 + + + 916 + 1381 + + + + + + 8 + 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 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + The robot. + a91cdb91-6ad7-498e-8cda-52dfd4fd0d7b + robot + robot + true + 0 + true + 538c02c6-6b3b-4712-a784-dda0bc63f847 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + 2 + + + + + + 767 + 1301 + 134 + 20 + + + 835.5 + 1311 + + + + + + + + 1 + true + The goal to be achieved, defined in a set of constraints. Constraints can be very specific, for example defining value domains for each joint, such that the goal configuration is included, or defining a volume in space, to which a specific robot link (e.g. the end-effector) is required to move to. + 3a4f4266-38d2-45a4-b274-0c247f229a27 + goal_constraints + goal_constraints + true + 1 + true + ad56936d-d5c4-4d23-a81c-6ec436f60ed3 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 767 + 1321 + 134 + 20 + + + 835.5 + 1331 + + + + + + + + true + 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. + aecd6fbf-17d1-485a-8cdc-c92c65fc9239 + start_configuration + start_configuration + true + 0 + true + c666c109-2ccb-4c50-90cd-00130af76eaa + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 767 + 1341 + 134 + 20 + + + 835.5 + 1351 + + + + + + + + true + The planning group used for calculation. Defaults to the robot's main planning group. + 4e21539a-b5d8-410f-b784-767b0942fa59 + group + group + true + 0 + true + 0 + 37261734-eec7-4f50-b6a8-b8d1f3c4396b + + + + + + 767 + 1361 + 134 + 20 + + + 835.5 + 1371 + + + + + + + + 1 + true + A list of attached collision meshes to be included for planning. + 2e09fc0d-cb7f-4c71-8968-7a17e716c39f + attached_collision_meshes + attached_collision_meshes + true + 1 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 767 + 1381 + 134 + 20 + + + 835.5 + 1391 + + + + + + + + 1 + true + 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. + 22c56e5a-66ae-4142-9b95-302c9556f7eb + path_constraints + path_constraints + true + 1 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 767 + 1401 + 134 + 20 + + + 835.5 + 1411 + + + + + + + + true + The name of the algorithm used for path planning. Defaults to 'RRTConnect' + 956519c6-8492-431d-9db5-e86de7dabe91 + planner_id + planner_id + true + 0 + true + 0 + 37261734-eec7-4f50-b6a8-b8d1f3c4396b + + + + + + 767 + 1421 + 134 + 20 + + + 835.5 + 1431 + + + + + + + + true + If True, calculates a trajectory. + 292a357a-239f-470b-954d-2c5b5f7a5672 + compute + compute + true + 0 + true + 874fa7bf-30c9-4e1f-acf7-712c9ca99fd3 + 1 + d60527f5-b5af-4ef6-8970-5f96fe412559 + + + + + + 767 + 1441 + 134 + 20 + + + 835.5 + 1451 + + + + + + + + The calculated trajectory. + 9870c40b-647a-4d6e-afd8-4edf023096eb + trajectory + trajectory + false + 0 + + + + + + 931 + 1301 + 56 + 160 + + + 959 + 1381 + + + + + + + + + + + + + + 59daf374-bc21-4a5e-8282-5504fb7ae9ae + List Item + + + + + 0 + Retrieve a specific item from a list. + d7895240-ed55-4de4-a92c-9ada96405a40 + List Item + Item + + + + + + 312 + 1244 + 64 + 64 + + + 346 + 1276 + + + + + + 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 + 113fe3aa-1166-4347-9898-1aa578819f9e + List + L + false + 55db7485-e593-4762-a166-64303d976c7a + 1 + + + + + + 314 + 1246 + 17 + 20 + + + 324 + 1256 + + + + + + + + Item index + 063e5b5d-1c03-47f4-afde-152abd071510 + Index + i + false + 7a465745-a31e-4edb-970a-1911a5d90ad2 + 1 + + + + + + 314 + 1266 + 17 + 20 + + + 324 + 1276 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Wrap index to list bounds + e4b75748-e37f-49e7-ba94-44a370a507ab + Wrap + W + false + 0 + + + + + + 314 + 1286 + 17 + 20 + + + 324 + 1296 + + + + + + 1 + + + + + 1 + {0} + + + + + true + + + + + + + + + + + Item at {i'} + ef3e1859-663b-4519-b98e-7adccaba58cd + false + Item + i + false + 0 + + + + + + 361 + 1246 + 13 + 60 + + + 367.5 + 1276 + + + + + + + + + + + + + + 8ec86459-bf01-4409-baee-174d0d2b13d0 + Data + + + + + Contains a collection of generic data + 731c8e7c-0e16-42ff-aa11-7547a70a5b11 + Data + goal + false + ef3e1859-663b-4519-b98e-7adccaba58cd + 1 + + + + + + 386 + 1274 + 50 + 20 + + + 411.7825 + 1284.265 + + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + Trajectory Visualize + + + + + """ +Visualizes a trajectory. + +COMPAS FAB v0.27.0 +""" +from compas_ghpython import draw_frame +from compas_ghpython import list_to_ghtree +from ghpythonlib.componentbase import executingcomponent as component + + +class TrajectoryVisualize(component): + 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 + + P = list_to_ghtree(list(zip(*positions))) + V = list_to_ghtree(list(zip(*velocities))) + A = list_to_ghtree(list(zip(*accelerations))) + + # return outputs if you have them; here I try it for you: + return (start_configuration, configurations, fraction, time, planes, P, V, A) + + Visualizes a trajectory. +COMPAS FAB v0.27.0 + true + true + 2 + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAHiSURBVEhLtZMxS0JhFIZNNJASEqesuOLUFIJT4CC0R4u4BEm/wCnXQMKmfkGDQ1NLLtHq0BgUDUFwi36BNrUU3s57OcfO/e4xKuzCg973fc/5znfvdxNBEPwrpjhLTHGWmOJfWD253iEGzCGxBN0MCxTqckHV8gXym0TgMIBnFgAKvKlwlXgnGlOyd5xzKcfCXOARpxxCY/k/JmK7Yc+iFglyGM1h+kQ4MWvYUbiYUdMn3OavxFIkyOHJ5I6Ox9QgLgjP8YrEC6EXaMKbhFQYC2BS3/CkuOV67NeYomhWCFO2iMiU7I0ILBCekCn+SGuRAOAG5pSk4dgC60VjqLBW65EQkBAKDA9NMOWt4WHneLR0+6VHQoAC8jWaUxaOrqgqIZwrr5rKrzyyPhTdbYAvEp85mLwo5eMkBZmN2ofbqNC5fGYNHIuui3soVuAcl8VXOS+7tdtTzerQ83udsdIqkpeiMjd16UlQIA3fQZDMZMNm6eXSGbT5tfUH3M+l0vc6L0U4u9YC046jv7C5HS6QyhfCbDKzKDto66wUTNtBX4cF0r38ftfnhkGufqAfT0lnddGP3oGGriduOuTfm1hG31DDb0+RC11tbixEHk+YcYXfQFdFNQe5WMYVZo0pzo4g8QkeesDrM2SJXwAAAABJRU5ErkJggg== + + false + bdb10fb0-52c1-4bcb-ada1-0bc3ce601bb1 + true + true + Trajectory Visualize + Trajectory Visualize + + + + + + 1587 + 1425 + 188 + 164 + + + 1657 + 1507 + + + + + + 3 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 8 + 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 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + The robot. + 0da7270a-5e6e-44a2-afc2-5b9d3011bd23 + robot + robot + true + 0 + true + 538c02c6-6b3b-4712-a784-dda0bc63f847 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + 2 + + + + + + 1589 + 1427 + 53 + 53 + + + 1617 + 1453.667 + + + + + + + + true + The planning group for which this trajectory was planned. + 1e5aa004-4afa-47f0-b1b2-7eda05adc4f5 + group + group + true + 0 + true + 0 + 37261734-eec7-4f50-b6a8-b8d1f3c4396b + + + + + + 1589 + 1480 + 53 + 53 + + + 1617 + 1507 + + + + + + + + true + The calculated trajectory. + e5d757ed-b80a-40ac-89db-5881ba9069eb + trajectory + trajectory + true + 0 + true + 9870c40b-647a-4d6e-afd8-4edf023096eb + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 1589 + 1533 + 53 + 54 + + + 1617 + 1560.333 + + + + + + + + The start configuration of the trajectory. + 7f76849a-2199-493c-875a-62a7b7cc4824 + start_configuration + start_configuration + false + 0 + + + + + + 1672 + 1427 + 101 + 20 + + + 1722.5 + 1437 + + + + + + + + The full configurations along the trajectory. + dde2c5b9-8ee9-4f84-a7af-19a3667e63d7 + configurations + configurations + false + 0 + + + + + + 1672 + 1447 + 101 + 20 + + + 1722.5 + 1457 + + + + + + + + Indicates the fraction of requested trajectory that was calculated, e.g. 1 means the full trajectory was found. + 5485ca3f-0303-4b48-897a-41b646272db0 + fraction + fraction + false + 0 + + + + + + 1672 + 1467 + 101 + 20 + + + 1722.5 + 1477 + + + + + + + + The time which is needed to execute that trajectory at full speed. + 8c11158e-971a-4809-b2b4-392a925a70da + time + time + false + 0 + + + + + + 1672 + 1487 + 101 + 20 + + + 1722.5 + 1497 + + + + + + + + The planes of the robot's end-effector. + c27df290-bf64-45d8-b33c-6f84af573479 + planes + planes + false + 0 + + + + + + 1672 + 1507 + 101 + 20 + + + 1722.5 + 1517 + + + + + + + + The positions along the trajectory + 6a7ec657-e210-4b08-8d6c-f0485d2bde38 + P + P + false + 0 + + + + + + 1672 + 1527 + 101 + 20 + + + 1722.5 + 1537 + + + + + + + + The velocities along the trajectory + 02b453a9-7ffe-4441-80ae-7fbac64fa366 + V + V + false + 0 + + + + + + 1672 + 1547 + 101 + 20 + + + 1722.5 + 1557 + + + + + + + + The accelerations along the trajectory + ce1eb1e8-dc2f-406c-aee2-586c0454bb00 + A + A + false + 0 + + + + + + 1672 + 1567 + 101 + 20 + + + 1722.5 + 1577 + + + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 7a465745-a31e-4edb-970a-1911a5d90ad2 + Number Slider + + false + 0 + + + + + + 62 + 1357 + 160 + 20 + + + 62.45026 + 1357.878 + + + + + + 3 + 1 + 1 + 10 + 0 + 0 + 0 + + + + + + + + + + + + + + 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 + + + + + \ No newline at end of file From 7e924bcb90476f9af2093d5a261523b69d60254f Mon Sep 17 00:00:00 2001 From: gheyselinck Date: Mon, 27 Mar 2023 12:28:25 +0200 Subject: [PATCH 2/3] delete old file --- .../assignment_03/assignment_03_template.ghx | 2813 ----------------- 1 file changed, 2813 deletions(-) delete mode 100644 lecture_04/assignment_03/assignment_03_template.ghx diff --git a/lecture_04/assignment_03/assignment_03_template.ghx b/lecture_04/assignment_03/assignment_03_template.ghx deleted file mode 100644 index 4ae4a5e..0000000 --- a/lecture_04/assignment_03/assignment_03_template.ghx +++ /dev/null @@ -1,2813 +0,0 @@ - - - - - - - - 0 - 2 - 2 - - - - - - - 1 - 0 - 7 - - - - - - c4f913db-409d-41a9-88e1-f6f90989047d - Shaded - 1 - - 100;150;0;0 - - - 100;0;150;0 - - - - - - 637527254194888879 - - assignment_03_template.ghx - - - - - 0 - - - - - - 251 - 6 - - 0.7225001 - - - - - 0 - - - - - - - 0 - - - - - 1 - - - - - GhPython, Version=7.27.23032.13001, Culture=neutral, PublicKeyToken=null - 7.27.23032.13001 - - 00000000-0000-0000-0000-000000000000 - - - - - - - - - 40 - - - - - 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 - - - - - - - - - - - c552a431-af5b-46a9-a8a4-0fcbc27ef596 - Group - - - - - 1 - - 150;170;135;255 - - A group of Grasshopper objects - d5ffda3e-a3ab-4688-9de8-1d9d9e2789e3 - 4b0a07e0-a378-4f92-8f0a-6c1f1fb427f2 - 1d31a79f-b7ba-423f-944c-23f606999dae - eaec99d4-5f03-4209-953f-02aee1235de3 - 4a5bf47a-b0af-4831-a451-6b776364bb7e - 5 - 5a4ca04f-0f26-4978-bcce-92edaa3c4b8e - Group - - - - - - - - - - - c552a431-af5b-46a9-a8a4-0fcbc27ef596 - Group - - - - - 1 - - 150;170;135;255 - - A group of Grasshopper objects - 781a5de8-c54c-4805-927f-519a45da032f - 4b0a07e0-a378-4f92-8f0a-6c1f1fb427f2 - 1d31a79f-b7ba-423f-944c-23f606999dae - eaec99d4-5f03-4209-953f-02aee1235de3 - 4a5bf47a-b0af-4831-a451-6b776364bb7e - 20c7f0ab-fd13-4bd7-a130-c6fe893d2a0b - 47c152bc-c823-4835-aad3-3bf5c281e892 - d19cf29a-0512-4632-b4e0-ecc00c5b8487 - 2ceac33a-a5ff-4a42-8067-32e6a2c7fbee - ac227038-eb23-4cb5-94d8-f63bb92375a4 - b3787c61-219b-4ed9-b49f-1e7dd56236b1 - b395bfb0-5717-46c4-924c-a3ba167b1e0d - 4e66fe1b-29b3-4955-9524-ca986decd9ac - 78471367-17af-4599-8661-808ba87f82a6 - bfa816f1-e4c0-482e-9515-4b540fd2f427 - 82091d9c-f1c0-4207-8d3d-b1dca673d5df - 16 - 8b8d6fbf-db19-4267-9188-c4fdd76620b6 - Group - - - - - - - - - - - 8ec86459-bf01-4409-baee-174d0d2b13d0 - Data - - - - - Contains a collection of generic data - 4e66fe1b-29b3-4955-9524-ca986decd9ac - Data - Robot - false - 0 - - - - - - 1254 - 170 - 50 - 20 - - - 1279.353 - 180.9772 - - - - - - - - - - 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe - Scribble - - - - - false - - 46.70692 - 119.7138 - - - 272.0458 - 119.7138 - - - 272.0458 - 139.8125 - - - 46.70692 - 139.8125 - - A quick note - Cambria - 82091d9c-f1c0-4207-8d3d-b1dca673d5df - false - Scribble - Scribble - 22 - 1) Load robot from ROS - - - - - - 41.70692 - 114.7138 - 235.3389 - 30.09863 - - - 46.70692 - 119.7138 - - - - - - - - - - 8ec86459-bf01-4409-baee-174d0d2b13d0 - Data - - - - - Contains a collection of generic data - aacb02be-ffde-4997-b910-3a5670a6e5b1 - Data - Target planes - false - 0 - - - - - - 1226 - 516 - 78 - 20 - - - 1265.041 - 526.4604 - - - - - - - - - - c552a431-af5b-46a9-a8a4-0fcbc27ef596 - Group - - - - - 1 - - 150;240;218;146 - - A group of Grasshopper objects - 0c3c0677-cbf3-46be-b539-e48399697bc7 - de6b7a53-8f17-48cc-bb14-1aedc473dd1c - 04770360-9eb5-44e4-911f-142deec44bdc - aacb02be-ffde-4997-b910-3a5670a6e5b1 - 50ee1702-2c6a-4092-b68b-7fd9ec30c129 - 9dbe68e7-ae2d-4df4-89a9-ae0ec5759854 - d17c9d6f-7bf6-411c-816c-4c1caad151b9 - 7 - cf91e427-c398-45be-b915-f55275cc67b7 - Group - - - - - - - - - - - 8ec86459-bf01-4409-baee-174d0d2b13d0 - Data - - - - - Contains a collection of generic data - d385349b-7e03-4362-b9d0-eacd34e2562b - Data - Pickup plane - false - 0 - - - - - - 1229 - 350 - 75 - 20 - - - 1266.929 - 360.6916 - - - - - - - - - - c552a431-af5b-46a9-a8a4-0fcbc27ef596 - Group - - - - - 1 - - 150;240;218;146 - - A group of Grasshopper objects - d385349b-7e03-4362-b9d0-eacd34e2562b - 66c3b06d-1415-476b-875b-53498de1860a - c9e84bc7-5f07-46ef-9e42-32f7d85d0c13 - 39a429c7-2480-4ff8-8f4c-5bd8a47369a7 - 224add91-1cc7-47af-8c77-af2d42147144 - ff0bbdd7-eb5b-4ed6-a652-505db2c0ac8c - 6 - 3c032157-3bf9-40ee-9b12-e4e807d15ccc - Group - - - - - - - - - - - 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe - Scribble - - - - - false - - 46.70692 - 281.4785 - - - 269.3387 - 281.4785 - - - 269.3387 - 301.5771 - - - 46.70692 - 301.5771 - - A quick note - Cambria - ff0bbdd7-eb5b-4ed6-a652-505db2c0ac8c - false - Scribble - Scribble - 22 - 2) Define pick-up plane - - - - - - 41.70692 - 276.4785 - 232.6318 - 30.09863 - - - 46.70692 - 281.4785 - - - - - - - - - - 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe - Scribble - - - - - false - - 46.70692 - 469.1947 - - - 263.9892 - 469.1947 - - - 263.9892 - 489.4223 - - - 46.70692 - 489.4223 - - A quick note - Cambria - 9dbe68e7-ae2d-4df4-89a9-ae0ec5759854 - false - Scribble - Scribble - 22 - 3) Define target planes - - - - - - 41.70692 - 464.1947 - 227.2822 - 30.22754 - - - 46.70692 - 469.1947 - - - - - - - - - - 410755b1-224a-4c1e-a407-bf32fb45ea7e - 00000000-0000-0000-0000-000000000000 - Robot Visualize - - - - - """ -Visualizes the robot. - -COMPAS FAB v0.27.0 -""" -from compas.artists import Artist -from compas.geometry import Frame -from compas.geometry import Transformation -from compas_fab.robots import PlanningScene -from ghpythonlib.componentbase import executingcomponent as component - - -class RobotVisualize(component): - def RunScript( - self, - robot, - group, - configuration, - show_visual, - show_collision, - show_frames, - show_base_frame, - show_end_effector_frame, - show_cm, - show_acm, - ): - - visual = None - collision = None - collision_meshes = None - attached_meshes = None - frames = None - base_frame = None - ee_frame = None - - if robot: - show_visual = True if show_visual is None else show_visual - show_cm = True if show_cm is None else show_cm - show_acm = True if show_acm is None else show_acm - configuration = configuration or robot.zero_configuration() - - robot.update(configuration, visual=show_visual, collision=show_collision) - compas_frames = robot.transformed_frames(configuration, group) - - if show_visual: - visual = robot.artist.draw_visual() - - if show_collision: - collision = robot.artist.draw_collision() - - if show_base_frame: - base_compas_frame = compas_frames[0] - artist = Artist(base_compas_frame) - base_frame = artist.draw() - - if show_end_effector_frame: - ee_compas_frame = robot.forward_kinematics( - configuration, group, options=dict(solver="model") - ) - artist = Artist(ee_compas_frame) - ee_frame = artist.draw() - - if show_frames: - frames = [] - for compas_frame in compas_frames[1:]: - artist = Artist(compas_frame) - frame = artist.draw() - frames.append(frame) - - if show_cm or show_acm: - scene = PlanningScene(robot) - scene = robot.client.get_planning_scene() - - collision_meshes = [] - attached_meshes = [] - - if show_cm: - for co in scene.world.collision_objects: - header = co.header - frame_id = header.frame_id - cms = co.to_collision_meshes() - - for cm in cms: - if cm.frame != Frame.worldXY(): - t = Transformation.from_frame(cm.frame) - mesh = cm.mesh.transformed(t) - else: - mesh = cm.mesh - - collision_meshes.append(Artist(mesh).draw()) - - if show_acm: - 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) - - attached_meshes.append(Artist(mesh).draw()) - - return ( - visual, - collision, - collision_meshes, - attached_meshes, - frames, - base_frame, - ee_frame, - ) - - Visualizes the robot. -COMPAS FAB v0.27.0 - true - true - 2 - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAHYSURBVEhLtZSxSgNBEIZVCEFQTDoRi4BgLcQHCGJpkSaVja2dnYUglqlEbcQulUUqHyGFpYUvEMgTBDs7z/87do7ZvVUixIPvbndm55/Z2btbKYriX8kal0nW+Bd2b19b4oJnzl8z/BUJv4hCfIh+6o8mVCFGYiII7Hm/R74zMROI2xOI7di6NAhnGtATiN04vJ8xhXWExb/XEoQFpVM8iuswvxPWhhxRWzQ/ENXOUwcBz4IkD2FOAtrmRT1RGzWv2gPcKoOcCBNkT+gLkrB9gwM1f9kOPWkT7cM2M01uVQVysAvrIyL0PqoorKOdiFkhtNAfeNQin8AO1A7NKqolCetZ5w+c9dH3wC3toW+PMfFrPPJRCIVli6gZwuI0AUSFLErWKLHcW1MenK6BYACXFqOrLebBPq7sNvBIjG37N8W4wZ8VihMPKrsNUhBLxIGkLQkMnVib9c429zqRaIrE/BtijCTSDWJQVqvLdjX0GpFgisR+PHAJTYPgk/AJj71GJAgK5qvNiUZsnZyXgmvrG1+Nnb37ID5N9aIJKNi+5F/ZvhqXCWC10fwM46g9EE1AwQslgOb+YZUk0E31ogkokF+F/dR+ZfPo1M4B3lItqBmWTda4PIqVb4c7lSMXBSLEAAAAAElFTkSuQmCC - - false - 7a58f25a-3dc8-4dfa-bf0f-35404273569e - true - true - Robot Visualize - Robot Visualize - - - - - - 2356 - 139 - 257 - 204 - - - 2503 - 241 - - - - - - 10 - 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 - 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 - 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 - 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 - 7 - 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 - 8ec86459-bf01-4409-baee-174d0d2b13d0 - 8ec86459-bf01-4409-baee-174d0d2b13d0 - - - - - true - The robot. - 439bbb30-bb2a-4f39-bfd6-8205cd93fd09 - robot - robot - true - 0 - true - 619d4216-bdfd-4395-b679-83b02e397c53 - 1 - 87f87f55-5b71-41f4-8aea-21d494016f81 - 2 - - - - - - 2358 - 141 - 130 - 20 - - - 2424.5 - 151 - - - - - - - - true - The planning group used for end-effector and base visualization. - ad36f822-0439-4ba3-b51a-c348f6f591ec - group - group - true - 0 - true - 0 - 37261734-eec7-4f50-b6a8-b8d1f3c4396b - - - - - - 2358 - 161 - 130 - 20 - - - 2424.5 - 171 - - - - - - - - true - The robot's full configuration. - 9fb95b19-f673-4906-9998-b63a5811ea88 - configuration - configuration - true - 0 - true - 4ca3f55b-10fb-41c3-9f24-2b4809b96eeb - 1 - 87f87f55-5b71-41f4-8aea-21d494016f81 - - - - - - 2358 - 181 - 130 - 20 - - - 2424.5 - 191 - - - - - - - - true - Whether or not to show the robot's visual meshes. - 22d8ace2-7a15-4a22-9430-2f721280765e - show_visual - show_visual - true - 0 - true - 0 - d60527f5-b5af-4ef6-8970-5f96fe412559 - - - - - - 2358 - 201 - 130 - 20 - - - 2424.5 - 211 - - - - - - - - true - Whether or not to show the robot's collision meshes. - ad827435-eaa9-47db-8456-0f04c22dde3a - show_collision - show_collision - true - 0 - true - 0 - d60527f5-b5af-4ef6-8970-5f96fe412559 - - - - - - 2358 - 221 - 130 - 20 - - - 2424.5 - 231 - - - - - - - - true - Whether or not to show the robot's joint frames. - 35824dc3-741e-4a85-9d9f-f350f6328850 - show_frames - show_frames - true - 0 - true - 0 - d60527f5-b5af-4ef6-8970-5f96fe412559 - - - - - - 2358 - 241 - 130 - 20 - - - 2424.5 - 251 - - - - - - - - true - Whether or not to show the robot's base frame. - 5c36de85-2908-4ed4-8bfb-be05a5fc15a0 - show_base_frame - show_base_frame - true - 0 - true - 0 - d60527f5-b5af-4ef6-8970-5f96fe412559 - - - - - - 2358 - 261 - 130 - 20 - - - 2424.5 - 271 - - - - - - - - true - Whether or not to show the robot's end-effector frame. - 43679585-4dff-44fc-8144-04d51b6597a3 - show_end_effector_frame - show_end_effector_frame - true - 0 - true - 0 - d60527f5-b5af-4ef6-8970-5f96fe412559 - - - - - - 2358 - 281 - 130 - 20 - - - 2424.5 - 291 - - - - - - - - true - Whether or not to show the collision meshes (if any). - b0245b8b-4b25-480e-8434-34500dd361dd - show_cm - show_cm - true - 0 - true - 0 - d60527f5-b5af-4ef6-8970-5f96fe412559 - - - - - - 2358 - 301 - 130 - 20 - - - 2424.5 - 311 - - - - - - - - true - Whether or not to show the attached collision meshes (if any). - c258dd5f-afd6-4742-9840-e8ae6df45c59 - show_acm - show_acm - true - 0 - true - 0 - d60527f5-b5af-4ef6-8970-5f96fe412559 - - - - - - 2358 - 321 - 130 - 20 - - - 2424.5 - 331 - - - - - - - - Rhino meshes of the robot's visual geometry (if any). - b51fd205-41de-4772-b77b-54118aa40c2c - visual - visual - false - 0 - - - - - - 2518 - 141 - 93 - 28 - - - 2564.5 - 155.2857 - - - - - - - - Rhino meshes of the robot's collision geometry (if any). - 3fd4309e-805a-4b2a-8b39-fb39cda51d21 - collision - collision - false - 0 - - - - - - 2518 - 169 - 93 - 29 - - - 2564.5 - 183.8571 - - - - - - - - Rhino meshes of the scene's collision meshes (if any). - ba8f5aaf-7d4f-4021-b0f3-328651e5f766 - collision_meshes - collision_meshes - false - 0 - - - - - - 2518 - 198 - 93 - 28 - - - 2564.5 - 212.4286 - - - - - - - - Rhino meshes of the scene's attached collision meshes (if any). - 00b4652c-1968-4bef-b124-5b86f4dc25bc - attached_meshes - attached_meshes - false - 0 - - - - - - 2518 - 226 - 93 - 29 - - - 2564.5 - 241 - - - - - - - - The robot's joint frames as Rhino planes (if any). - 243eeb3c-e1ad-4233-9a1a-b0ec9fd1c962 - frames - frames - false - 0 - - - - - - 2518 - 255 - 93 - 28 - - - 2564.5 - 269.5714 - - - - - - - - The robot's base frame as a Rhino plane (if any). - 91fd1995-e0da-4f23-a4c6-afeefc044dee - base_frame - base_frame - false - 0 - - - - - - 2518 - 283 - 93 - 29 - - - 2564.5 - 298.1429 - - - - - - - - The robot's end-effector frame as a Rhino plane (if any). - 5a2c4711-ae2f-4f0f-b633-afc7c8fccfd2 - ee_frame - ee_frame - false - 0 - - - - - - 2518 - 312 - 93 - 29 - - - 2564.5 - 326.7143 - - - - - - - - - - - - - - 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe - Scribble - - - - - false - - 46.70692 - 651.1613 - - - 317.5712 - 651.1613 - - - 317.5712 - 671.2599 - - - 46.70692 - 671.2599 - - A quick note - Cambria - fccb98c9-c6e5-4caa-8384-ca0ddf85fd1f - false - Scribble - Scribble - 22 - 4) Solve IK for pick-up plane - - - - - - 41.70692 - 646.1613 - 280.8643 - 30.09863 - - - 46.70692 - 651.1613 - - - - - - - - - - 8ec86459-bf01-4409-baee-174d0d2b13d0 - Data - - - - - Contains a collection of generic data - 02bc89eb-6961-419b-a5c7-ecf1d7beb296 - Data - Pickup config - false - 0 - - - - - - 1226 - 749 - 78 - 20 - - - 1265.877 - 759.2832 - - - - - - - - - - 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe - Scribble - - - - - false - - 73.59002 - 675.2849 - - - 238.8633 - 675.2849 - - - 238.8633 - 689.9958 - - - 73.59002 - 689.9958 - - A quick note - Cambria - 6e5b9db8-970d-4e5b-bf3d-6ec1c492b072 - false - Scribble - Scribble - 16 - Results in pickup config - - - - - - 68.59002 - 670.2849 - 175.2733 - 24.71094 - - - 73.59002 - 675.2849 - - - - - - - - - - c552a431-af5b-46a9-a8a4-0fcbc27ef596 - Group - - - - - 1 - - 150;240;218;146 - - A group of Grasshopper objects - fccb98c9-c6e5-4caa-8384-ca0ddf85fd1f - 02bc89eb-6961-419b-a5c7-ecf1d7beb296 - 6e5b9db8-970d-4e5b-bf3d-6ec1c492b072 - fb4c5d39-e0a5-4c45-b606-72de43c589ac - b96209a7-93e4-4212-b096-c83e82b4da7b - 98209ace-c305-4683-b351-d9b9daf31e36 - 6 - 3962a36b-d451-45d1-acb9-c99a5708db90 - Group - - - - - - - - - - - 00027467-0d24-4fa7-b178-8dc0ac5f42ec - Value List - - - - - Provides a list of preset values to choose from - 137a3255-a54e-4e4c-a9c3-e6d902b2a8bb - 2 - 3 - Value List - List - false - 0 - - - - - 0 - Pickup config - true - - - - - 1 - Trajectory - false - - - - - - 1591 - 171 - 123 - 22 - - - - - - - - - - eeafc956-268e-461d-8e73-ee05c6f72c01 - Stream Filter - - - - - Filters a collection of input streams - 471af287-d88e-43f4-9bb2-98daa088f633 - Stream Filter - Filter - - - - - - 2046 - 170 - 77 - 64 - - - 2078 - 202 - - - - - - 3 - 2e3ab970-8545-46bb-836c-1c11e5610bce - 8ec86459-bf01-4409-baee-174d0d2b13d0 - 8ec86459-bf01-4409-baee-174d0d2b13d0 - 1 - 8ec86459-bf01-4409-baee-174d0d2b13d0 - - - - - Index of Gate stream - fde7ac2c-1b3d-473c-8b2b-4addc4d52e1a - Gate - G - false - 137a3255-a54e-4e4c-a9c3-e6d902b2a8bb - 1 - - - - - - 2048 - 172 - 15 - 20 - - - 2057 - 182 - - - - - - 1 - - - - - 1 - {0} - - - - - 0 - - - - - - - - - - - 2 - Input stream at index 0 - e6a67ce5-d55f-4ec2-a44c-573291be81a5 - false - Stream 0 - 0 - true - a38644b3-ef3b-4bc2-bf1d-8843907a4a1f - 1 - - - - - - 2048 - 192 - 15 - 20 - - - 2057 - 202 - - - - - - - - 2 - Input stream at index 1 - 14985ec3-7977-426f-bc6b-ad27afc61e04 - false - Stream 1 - 1 - true - a4b043bc-8e30-4b4c-bb40-e7f42497696d - 1 - - - - - - 2048 - 212 - 15 - 20 - - - 2057 - 222 - - - - - - - - 2 - Filtered stream - ddfd1927-535b-4f08-acf1-f1762fa62a54 - false - Stream - S(0) - false - 0 - - - - - - 2093 - 172 - 28 - 60 - - - 2107 - 202 - - - - - - - - - - - - - - c552a431-af5b-46a9-a8a4-0fcbc27ef596 - Group - - - - - 1 - - 150;0;155;194 - - A group of Grasshopper objects - 7a58f25a-3dc8-4dfa-bf0f-35404273569e - 137a3255-a54e-4e4c-a9c3-e6d902b2a8bb - 471af287-d88e-43f4-9bb2-98daa088f633 - 766f518e-d29b-4814-a406-a45e5ded4a64 - e4b338fe-125d-4929-92e1-4e17c08f9b3b - f53212f5-507f-4bda-b372-34bf2b7020a3 - a38644b3-ef3b-4bc2-bf1d-8843907a4a1f - e9d20ac9-0dbc-44cb-9f48-878ae446678f - 619d4216-bdfd-4395-b679-83b02e397c53 - df7fb28b-31b3-40c8-ab8a-ec66c12ea055 - 10 - ca0ff086-508f-4122-8664-195d1a456efe - Group - - - - - - - - - - - 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe - Scribble - - - - - false - - 1582.769 - 120.3864 - - - 1707.132 - 120.3864 - - - 1707.132 - 135.9304 - - - 1582.769 - 135.9304 - - A quick note - Cambria - 766f518e-d29b-4814-a406-a45e5ded4a64 - false - Scribble - Scribble - 22 - Visualization - - - - - - 1577.769 - 115.3864 - 134.3623 - 25.54398 - - - 1582.769 - 120.3864 - - - - - - - - - - 8ec86459-bf01-4409-baee-174d0d2b13d0 - Data - - - - - Contains a collection of generic data - b96209a7-93e4-4212-b096-c83e82b4da7b - Data - Pickup plane - false - d385349b-7e03-4362-b9d0-eacd34e2562b - 1 - 2 - - - - - - 70 - 735 - 75 - 20 - - - 108.0366 - 745.3143 - - - - - - - - - - 8ec86459-bf01-4409-baee-174d0d2b13d0 - Data - - - - - Contains a collection of generic data - 98209ace-c305-4683-b351-d9b9daf31e36 - Data - Robot - false - 4e66fe1b-29b3-4955-9524-ca986decd9ac - 1 - 2 - - - - - - 70 - 711 - 50 - 20 - - - 95.8785 - 721.4962 - - - - - - - - - - 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe - Scribble - - - - - false - - 46.70692 - 861.2363 - - - 379.9403 - 861.2363 - - - 379.9403 - 881.4101 - - - 46.70692 - 881.4101 - - A quick note - Cambria - ba94b074-3f68-4274-8b84-f87aa5c4cb3e - false - Scribble - Scribble - 22 - 5) Plan trajectory to selected plane - - - - - - 41.70692 - 856.2363 - 343.2334 - 30.17383 - - - 46.70692 - 861.2363 - - - - - - - - - - 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe - Scribble - - - - - false - - 75.11641 - 888.1221 - - - 314.835 - 888.1221 - - - 314.835 - 902.8331 - - - 75.11641 - 902.8331 - - A quick note - Cambria - 01b0a494-be40-47b6-bdc4-7c92967b9f38 - false - Scribble - Scribble - 16 - From pickup config to target plane - - - - - - 70.11641 - 883.1221 - 249.7186 - 24.71094 - - - 75.11641 - 888.1221 - - - - - - - - - - 8ec86459-bf01-4409-baee-174d0d2b13d0 - Data - - - - - Contains a collection of generic data - 55db7485-e593-4762-a166-64303d976c7a - Data - Target planes - false - aacb02be-ffde-4997-b910-3a5670a6e5b1 - 1 - 2 - - - - - - 70 - 998 - 78 - 20 - - - 109.1617 - 1008.612 - - - - - - - - - - 8ec86459-bf01-4409-baee-174d0d2b13d0 - Data - - - - - Contains a collection of generic data - 538c02c6-6b3b-4712-a784-dda0bc63f847 - Data - Robot - false - 4e66fe1b-29b3-4955-9524-ca986decd9ac - 1 - 2 - - - - - - 70 - 941 - 50 - 20 - - - 95.34219 - 951.0811 - - - - - - - - - - 8ec86459-bf01-4409-baee-174d0d2b13d0 - Data - - - - - Contains a collection of generic data - c666c109-2ccb-4c50-90cd-00130af76eaa - Data - Pickup config - false - 02bc89eb-6961-419b-a5c7-ecf1d7beb296 - 1 - 2 - - - - - - 70 - 969 - 78 - 20 - - - 109.694 - 979.456 - - - - - - - - - - 57da07bd-ecab-415d-9d86-af36d7073abc - Number Slider - - - - - Numeric slider for single values - e4b338fe-125d-4929-92e1-4e17c08f9b3b - Number Slider - - false - 0 - - - - - - 1591 - 205 - 160 - 20 - - - 1591.409 - 205.586 - - - - - - 3 - 1 - 1 - 100 - 0 - 0 - 0 - - - - - - - - - 59daf374-bc21-4a5e-8282-5504fb7ae9ae - List Item - - - - - 0 - Retrieve a specific item from a list. - df7fb28b-31b3-40c8-ab8a-ec66c12ea055 - List Item - Item - - - - - - 2163 - 190 - 64 - 64 - - - 2197 - 222 - - - - - - 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 - 39c89e61-bc93-43d0-a501-c5bba7a3da6e - List - L - false - ddfd1927-535b-4f08-acf1-f1762fa62a54 - 1 - - - - - - 2165 - 192 - 17 - 20 - - - 2175 - 202 - - - - - - - - Item index - 83d287eb-3d9d-4785-b735-156766b364e7 - Index - i - false - e4b338fe-125d-4929-92e1-4e17c08f9b3b - 1 - - - - - - 2165 - 212 - 17 - 20 - - - 2175 - 222 - - - - - - 1 - - - - - 1 - {0} - - - - - 0 - - - - - - - - - - - Wrap index to list bounds - 60da4aea-66d4-49fc-8aa9-a5189edc913b - Wrap - W - false - 0 - - - - - - 2165 - 232 - 17 - 20 - - - 2175 - 242 - - - - - - 1 - - - - - 1 - {0} - - - - - true - - - - - - - - - - - Item at {i'} - 4ca3f55b-10fb-41c3-9f24-2b4809b96eeb - false - Item - i - false - 0 - - - - - - 2212 - 192 - 13 - 60 - - - 2218.5 - 222 - - - - - - - - - - - - - - 8ec86459-bf01-4409-baee-174d0d2b13d0 - Data - - - - - Contains a collection of generic data - bcf27a28-24e5-4d31-8438-444d7fe511cb - Data - Trajectory - false - 0 - - - - - - 1243 - 1025 - 61 - 20 - - - 1274.394 - 1035.907 - - - - - - - - - - 410755b1-224a-4c1e-a407-bf32fb45ea7e - 00000000-0000-0000-0000-000000000000 - GhPython Script - - - - - configs = trajectory.points - GhPython provides a Python script component - - 182 - 182 - - - 558 - 571 - - true - true - 2 - false - f53212f5-507f-4bda-b372-34bf2b7020a3 - false - true - GhPython Script - get configs - - - - - - 1704 - 315 - 132 - 28 - - - 1774 - 329 - - - - - - 1 - 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 - 1 - 8ec86459-bf01-4409-baee-174d0d2b13d0 - - - - - true - Script variable Python - 50f68354-3c25-4a84-a5f7-ddaf267be516 - trajectory - trajectory - true - 0 - true - e9d20ac9-0dbc-44cb-9f48-878ae446678f - 1 - 87f87f55-5b71-41f4-8aea-21d494016f81 - - - - - - 1706 - 317 - 53 - 24 - - - 1734 - 329 - - - - - - - - Script output configs. - a4b043bc-8e30-4b4c-bb40-e7f42497696d - a - configs - false - 0 - - - - - - 1789 - 317 - 45 - 24 - - - 1811.5 - 329 - - - - - - - - - - - - - - 8ec86459-bf01-4409-baee-174d0d2b13d0 - Data - - - - - Contains a collection of generic data - a38644b3-ef3b-4bc2-bf1d-8843907a4a1f - Data - Pickup config - false - 02bc89eb-6961-419b-a5c7-ecf1d7beb296 - 1 - 2 - - - - - - 1591 - 300 - 78 - 20 - - - 1630.11 - 310.7518 - - - - - - - - - - 8ec86459-bf01-4409-baee-174d0d2b13d0 - Data - - - - - Contains a collection of generic data - e9d20ac9-0dbc-44cb-9f48-878ae446678f - Data - Trajectory - false - bcf27a28-24e5-4d31-8438-444d7fe511cb - 1 - 2 - - - - - - 1591 - 324 - 61 - 20 - - - 1621.626 - 334.0815 - - - - - - - - - - 8ec86459-bf01-4409-baee-174d0d2b13d0 - Data - - - - - Contains a collection of generic data - 619d4216-bdfd-4395-b679-83b02e397c53 - Data - Robot - false - 4e66fe1b-29b3-4955-9524-ca986decd9ac - 1 - 2 - - - - - - 1591 - 275 - 50 - 20 - - - 1616.464 - 285.9058 - - - - - - - - - - c552a431-af5b-46a9-a8a4-0fcbc27ef596 - Group - - - - - 1 - - 150;240;218;146 - - A group of Grasshopper objects - ba94b074-3f68-4274-8b84-f87aa5c4cb3e - 01b0a494-be40-47b6-bdc4-7c92967b9f38 - 55db7485-e593-4762-a166-64303d976c7a - 97392278-c93e-4240-86e9-5e59dc2eb992 - 4a09e38e-e49b-43a1-809e-f310b5a4c3e2 - 1f8b3c58-8382-468d-8885-a179a0ad05e0 - 538c02c6-6b3b-4712-a784-dda0bc63f847 - c666c109-2ccb-4c50-90cd-00130af76eaa - 13b3eb29-3c6d-41ba-80fe-d6214ebc9674 - 9d4e5cda-5bb7-42fe-acfa-968fa6c6c067 - cd76efff-9d02-4eb1-b6dd-080d6a0e6d4d - bcf27a28-24e5-4d31-8438-444d7fe511cb - 12 - 4c3c7466-b1c2-4942-9ac0-63cb70a5b6b7 - Group - - - - - - - - - - - 59e0b89a-e487-49f8-bab8-b5bab16be14c - Panel - - - - - A panel for custom notes and text values - ecc8c71a-07d9-4980-90b1-a3cd2f8081a6 - Panel - - false - 0 - 0 - Define multiple target planes in any way you like, for example, -reference a curve from Rhino, divide it and assign a plane to each point - -Make sure all planes are oriented in a way that makes sense -for the robot to reach it as well. - - - - - - -530 - 485 - 523 - 96 - - 0 - 0 - 0 - - - - - 3 - - 255;255;250;90 - - true - true - true - false - false - true - - - - - Courier New - 8 - - - - - - - - - - - 59e0b89a-e487-49f8-bab8-b5bab16be14c - Panel - - - - - A panel for custom notes and text values - fb166dfc-4abf-4aa5-9ecf-d86922966dfe - Panel - - false - 0 - 0 - Define one pick-up plane in any way you like, -for example, reference a point from Rhino and assign a plane to it. - -Make sure the plane is oriented in a way that makes sense -for the robot to reach it. You can check this by observing the -results of the IK solution for this pickup-plane. - - - - - - -536 - 293 - 529 - 96 - - 0 - 0 - 0 - - -535.2353 - 293.4706 - - - - - - 3 - - 255;255;250;90 - - true - true - true - false - false - true - - - - - Courier New - 8 - - - - - - - - - - - 59e0b89a-e487-49f8-bab8-b5bab16be14c - Panel - - - - - A panel for custom notes and text values - c7cc41e4-23fe-4958-87c2-e75feb10ebac - Panel - - false - 0 - 0 - Load the robot from ROS. - -Make sure ROS/MoveIt is running before you start (ie. "Compose up"). - - - - - - -536 - 124 - 529 - 96 - - 0 - 0 - 0 - - -535.2353 - 124.4706 - - - - - - 3 - - 255;255;250;90 - - true - true - true - false - false - true - - - - - Courier New - 8 - - - - - - - - - - - 59e0b89a-e487-49f8-bab8-b5bab16be14c - Panel - - - - - A panel for custom notes and text values - 3f032319-94be-407d-8e0f-7615f6976834 - Panel - - false - 0 - 0 - Use inverse kinematics of the robot to find -a feasible configuration to reach the pickup plane. - -You can use the COMPAS FAB component or -code it in a GHPython component. - - - - - - -530 - 680 - 523 - 96 - - 0 - 0 - 0 - - -529.5882 - 680.8822 - - - - - - 3 - - 255;255;250;90 - - true - true - true - false - false - true - - - - - Courier New - 8 - - - - - - - - - - - 59e0b89a-e487-49f8-bab8-b5bab16be14c - Panel - - - - - A panel for custom notes and text values - 1f02a236-cf56-4437-8d21-1243b22a7b8e - Panel - - false - 0 - 0 - With the pickup config and a list of target planes, you are ready to compute the solution trajectory for each plane. - -First create a constraint from the selected plane, then use the plan free-space motion to calculate a trajectory. - - - - - - -530 - 942 - 523 - 96 - - 0 - 0 - 0 - - -529.353 - 942.6469 - - - - - - 3 - - 255;255;250;90 - - true - true - true - false - false - true - - - - - Courier New - 8 - - - - - - - - - - - - - - - - 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 - - - - - \ No newline at end of file From 827efe5b6d24289d86f3c16819fc782a19d0a45c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A8le=20L=2E=20Gheyselinck?= <112643930+gheyselinck@users.noreply.github.com> Date: Mon, 27 Mar 2023 12:32:09 +0200 Subject: [PATCH 3/3] added screenshot --- lecture_04/assignment_03/image.png | Bin 0 -> 150869 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 lecture_04/assignment_03/image.png diff --git a/lecture_04/assignment_03/image.png b/lecture_04/assignment_03/image.png new file mode 100644 index 0000000000000000000000000000000000000000..e0da0a7c25a62a08f8593d97b40ecb8fcfcb413a GIT binary patch literal 150869 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%0AN-&_>CEdNmRl>iu^HX8TME|4Iz9ggzNznUm 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