From c0b4386ac3fefb7d6ce2580bc75dadfb5300ac1c Mon Sep 17 00:00:00 2001 From: ZdenekM Date: Mon, 22 Jun 2020 11:05:57 +0200 Subject: [PATCH 1/9] Compatibility with ARCOR2 0.7.0 (Move RPCs). --- arcor2_kinali/VERSION | 2 +- arcor2_kinali/object_types/rest_robot.py | 6 ++++++ arcor2_kinali/services/robot.py | 10 ++++++++++ setup.py | 2 +- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/arcor2_kinali/VERSION b/arcor2_kinali/VERSION index a918a2a..faef31a 100644 --- a/arcor2_kinali/VERSION +++ b/arcor2_kinali/VERSION @@ -1 +1 @@ -0.6.0 +0.7.0 diff --git a/arcor2_kinali/object_types/rest_robot.py b/arcor2_kinali/object_types/rest_robot.py index 56cd2b6..22a1692 100644 --- a/arcor2_kinali/object_types/rest_robot.py +++ b/arcor2_kinali/object_types/rest_robot.py @@ -45,6 +45,12 @@ def stop(self) -> None: def robot_joints(self) -> List[Joint]: return self.robot_api.robot_joints(self.id) + def move_to_pose(self, end_effector_id: str, target_pose: Pose, speed: float) -> None: + self.robot_api.move_to_pose(self.id, end_effector_id, target_pose, speed) + + def move_to_joints(self, target_joints: List[Joint], speed: float) -> None: + self.robot_api.move_to_joints(self.id, target_joints, speed) + @action def move(self, end_effector_id: str, pose: Pose, move_type: MoveTypeEnum, speed: float = 0.5) -> None: """ diff --git a/arcor2_kinali/services/robot.py b/arcor2_kinali/services/robot.py index 12f7449..4023b65 100644 --- a/arcor2_kinali/services/robot.py +++ b/arcor2_kinali/services/robot.py @@ -73,6 +73,16 @@ def clear_collisions(self) -> None: for coll_id in rest.get_list_primitive(f"{URL}/collisions", str): rest.delete(f"{URL}/collisions/{coll_id}") + def move_to_pose(self, robot_id: str, end_effector_id: str, target_pose: Pose, speed: float) -> None: + + rest.put(f"{URL}/robots/{robot_id}/endeffectors/{end_effector_id}/move", target_pose, + {"moveType": MoveTypeEnum.AVOID_COLLISIONS.value, "speed": speed}) + + def move_to_joints(self, robot_id: str, target_joints: List[Joint], speed: float) -> None: + + rest.put(f"{URL}/robots/{robot_id}/joints", target_joints, + {"moveType": MoveTypeEnum.AVOID_COLLISIONS.value, "speed": speed}) + @lru_cache() def get_robot_ids(self) -> FrozenSet[str]: return frozenset(rest.get_data(f"{URL}/robots")) diff --git a/setup.py b/setup.py index d69c034..214345b 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ install_requires=[ 'dataclasses', 'dataclasses-jsonschema[fast-validation]', - 'arcor2==0.6.*', + 'arcor2==0.7.*', 'Pillow' ], zip_safe=False, From ab0b63cf2b8ed25c19af1d04ef96d34ca7e29b59 Mon Sep 17 00:00:00 2001 From: ZdenekM Date: Fri, 26 Jun 2020 16:04:35 +0200 Subject: [PATCH 2/9] Update in order to work with arcor2 0.7.0. --- arcor2_kinali/services/barcode.py | 2 +- arcor2_kinali/services/interaction.py | 2 +- arcor2_kinali/services/robot.py | 2 +- arcor2_kinali/services/search.py | 2 +- arcor2_kinali/services/statistic.py | 2 +- arcor2_kinali/services/systems.py | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/arcor2_kinali/services/barcode.py b/arcor2_kinali/services/barcode.py index 453a652..171ccf0 100644 --- a/arcor2_kinali/services/barcode.py +++ b/arcor2_kinali/services/barcode.py @@ -1,7 +1,7 @@ from typing import FrozenSet, List import os -from arcor2.services import Service +from arcor2.services.service import Service from arcor2.data.common import ActionMetadata from arcor2.action import action from arcor2 import rest diff --git a/arcor2_kinali/services/interaction.py b/arcor2_kinali/services/interaction.py index 2146cf8..c0497d2 100644 --- a/arcor2_kinali/services/interaction.py +++ b/arcor2_kinali/services/interaction.py @@ -1,7 +1,7 @@ from typing import FrozenSet, List import os -from arcor2.services import Service +from arcor2.services.service import Service from arcor2.data.common import ActionMetadata from arcor2.action import action from arcor2 import rest diff --git a/arcor2_kinali/services/robot.py b/arcor2_kinali/services/robot.py index 4023b65..6fe202e 100644 --- a/arcor2_kinali/services/robot.py +++ b/arcor2_kinali/services/robot.py @@ -1,7 +1,7 @@ from typing import FrozenSet, List, TYPE_CHECKING, TypeVar, Callable import os -from arcor2.services import RobotService +from arcor2.services.robot_service import RobotService from arcor2.data.common import Pose, ActionMetadata, ProjectRobotJoints, Joint from arcor2.action import action from arcor2 import rest diff --git a/arcor2_kinali/services/search.py b/arcor2_kinali/services/search.py index fee3c7f..60f961f 100644 --- a/arcor2_kinali/services/search.py +++ b/arcor2_kinali/services/search.py @@ -3,7 +3,7 @@ from PIL.Image import Image # type: ignore -from arcor2.services import Service +from arcor2.services.service import Service from arcor2.data.common import Pose, ActionMetadata from arcor2.action import action from arcor2 import rest diff --git a/arcor2_kinali/services/statistic.py b/arcor2_kinali/services/statistic.py index 757de23..a7b1ab3 100644 --- a/arcor2_kinali/services/statistic.py +++ b/arcor2_kinali/services/statistic.py @@ -1,7 +1,7 @@ from typing import FrozenSet, List import os -from arcor2.services import Service +from arcor2.services.service import Service from arcor2.data.common import ActionMetadata from arcor2.action import action from arcor2 import rest diff --git a/arcor2_kinali/services/systems.py b/arcor2_kinali/services/systems.py index 21ba82e..368f575 100644 --- a/arcor2_kinali/services/systems.py +++ b/arcor2_kinali/services/systems.py @@ -1,7 +1,7 @@ from typing import Optional, FrozenSet from arcor2 import rest -from arcor2.services import Service +from arcor2.services.service import Service from arcor2.exceptions import Arcor2Exception From b72959b0a3e2e2202ab0a3c2c319c687524fb69a Mon Sep 17 00:00:00 2001 From: ZdenekM Date: Wed, 1 Jul 2020 14:39:06 +0200 Subject: [PATCH 3/9] Depend on dev version of ARCOR2. --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 214345b..6efb52e 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ install_requires=[ 'dataclasses', 'dataclasses-jsonschema[fast-validation]', - 'arcor2==0.7.*', + 'arcor2==0.8.0b2', 'Pillow' ], zip_safe=False, From bd7857ed6ce5d44d6209f45c0ef05c28592625ef Mon Sep 17 00:00:00 2001 From: ZdenekM Date: Wed, 1 Jul 2020 14:52:12 +0200 Subject: [PATCH 4/9] Import order fixed. --- arcor2_kinali/data/interaction.py | 4 +++- arcor2_kinali/data/robot.py | 6 +++--- arcor2_kinali/data/search.py | 4 ++-- arcor2_kinali/object_types/rest_robot.py | 23 ++++++++++++----------- arcor2_kinali/services/__init__.py | 2 +- arcor2_kinali/services/barcode.py | 8 ++++---- arcor2_kinali/services/interaction.py | 8 ++++---- arcor2_kinali/services/robot.py | 24 ++++++++++++------------ arcor2_kinali/services/search.py | 10 +++++----- arcor2_kinali/services/statistic.py | 9 +++++---- arcor2_kinali/services/systems.py | 4 ++-- setup.cfg | 7 +++++++ 12 files changed, 60 insertions(+), 49 deletions(-) diff --git a/arcor2_kinali/data/interaction.py b/arcor2_kinali/data/interaction.py index de2dd7c..d34348c 100644 --- a/arcor2_kinali/data/interaction.py +++ b/arcor2_kinali/data/interaction.py @@ -1,6 +1,8 @@ from dataclasses import dataclass -from arcor2.data.common import StrEnum from typing import List + +from arcor2.data.common import StrEnum + from dataclasses_jsonschema import JsonSchemaMixin diff --git a/arcor2_kinali/data/robot.py b/arcor2_kinali/data/robot.py index 8745d10..d48561e 100644 --- a/arcor2_kinali/data/robot.py +++ b/arcor2_kinali/data/robot.py @@ -1,9 +1,9 @@ -from typing import List from dataclasses import dataclass +from typing import List -from dataclasses_jsonschema import JsonSchemaMixin +from arcor2.data.common import Joint, Orientation, Pose, Position, StrEnum -from arcor2.data.common import Pose, Joint, StrEnum, Position, Orientation +from dataclasses_jsonschema import JsonSchemaMixin class MoveTypeEnum(StrEnum): diff --git a/arcor2_kinali/data/search.py b/arcor2_kinali/data/search.py index 466024d..0bd8819 100644 --- a/arcor2_kinali/data/search.py +++ b/arcor2_kinali/data/search.py @@ -1,10 +1,10 @@ from dataclasses import dataclass from typing import List, Optional -from dataclasses_jsonschema import JsonSchemaMixin - from arcor2.data.common import Pose, StrEnum +from dataclasses_jsonschema import JsonSchemaMixin + @dataclass class ScoredItem(JsonSchemaMixin): diff --git a/arcor2_kinali/object_types/rest_robot.py b/arcor2_kinali/object_types/rest_robot.py index 22a1692..5f5d200 100644 --- a/arcor2_kinali/object_types/rest_robot.py +++ b/arcor2_kinali/object_types/rest_robot.py @@ -1,14 +1,15 @@ -from typing import Iterator, FrozenSet, Optional, List +from typing import FrozenSet, Iterator, List, Optional -from arcor2.object_types import Robot -from arcor2.data.common import Pose, ActionMetadata, Joint, ProjectRobotJoints -from arcor2.data.object_type import MeshFocusAction, Models -from arcor2_kinali.services.robot import RestRobotService, MoveTypeEnum +from arcor2 import DynamicParamTuple from arcor2.action import action +from arcor2.data.common import ActionMetadata, Joint, Pose, ProjectRobotJoints +from arcor2.data.object_type import MeshFocusAction, Models from arcor2.exceptions import Arcor2Exception - +from arcor2.object_types import Robot from arcor2.parameter_plugins.relative_pose import RelativePose +from arcor2_kinali.services.robot import MoveTypeEnum, RestRobotService + # TODO how to copy docstrings of methods from service? @@ -189,11 +190,11 @@ def is_item_attached(self, suction_id: str) -> bool: RestRobot.DYNAMIC_PARAMS = { - "end_effector_id": (RestRobot.get_end_effectors_ids.__name__, set()), - "gripper_id": (RestRobot.grippers.__name__, set()), - "suction_id": (RestRobot.suctions.__name__, set()), - "input_id": (RestRobot.inputs.__name__, set()), - "output_id": (RestRobot.outputs.__name__, set()) + "end_effector_id": DynamicParamTuple(RestRobot.get_end_effectors_ids.__name__, set()), + "gripper_id": DynamicParamTuple(RestRobot.grippers.__name__, set()), + "suction_id": DynamicParamTuple(RestRobot.suctions.__name__, set()), + "input_id": DynamicParamTuple(RestRobot.inputs.__name__, set()), + "output_id": DynamicParamTuple(RestRobot.outputs.__name__, set()) } RestRobotService.CANCEL_MAPPING = { diff --git a/arcor2_kinali/services/__init__.py b/arcor2_kinali/services/__init__.py index c6c6296..d505364 100644 --- a/arcor2_kinali/services/__init__.py +++ b/arcor2_kinali/services/__init__.py @@ -1,5 +1,5 @@ +from arcor2_kinali.services import systems from arcor2_kinali.services.robot import RestRobotService from arcor2_kinali.services.search import SearchService -from arcor2_kinali.services import systems __all__ = ["RestRobotService", "SearchService", "systems"] diff --git a/arcor2_kinali/services/barcode.py b/arcor2_kinali/services/barcode.py index 171ccf0..b92263a 100644 --- a/arcor2_kinali/services/barcode.py +++ b/arcor2_kinali/services/barcode.py @@ -1,10 +1,10 @@ -from typing import FrozenSet, List import os +from typing import FrozenSet, List -from arcor2.services.service import Service -from arcor2.data.common import ActionMetadata -from arcor2.action import action from arcor2 import rest +from arcor2.action import action +from arcor2.data.common import ActionMetadata +from arcor2.services.service import Service from arcor2_kinali.services import systems diff --git a/arcor2_kinali/services/interaction.py b/arcor2_kinali/services/interaction.py index c0497d2..fae6496 100644 --- a/arcor2_kinali/services/interaction.py +++ b/arcor2_kinali/services/interaction.py @@ -1,10 +1,10 @@ -from typing import FrozenSet, List import os +from typing import FrozenSet, List -from arcor2.services.service import Service -from arcor2.data.common import ActionMetadata -from arcor2.action import action from arcor2 import rest +from arcor2.action import action +from arcor2.data.common import ActionMetadata +from arcor2.services.service import Service from arcor2_kinali.data.interaction import DialogValue, NotificationLevelEnum, NotificationValue diff --git a/arcor2_kinali/services/robot.py b/arcor2_kinali/services/robot.py index 6fe202e..a245d2b 100644 --- a/arcor2_kinali/services/robot.py +++ b/arcor2_kinali/services/robot.py @@ -1,16 +1,16 @@ -from typing import FrozenSet, List, TYPE_CHECKING, TypeVar, Callable import os +from typing import Callable, FrozenSet, List, TYPE_CHECKING, TypeVar -from arcor2.services.robot_service import RobotService -from arcor2.data.common import Pose, ActionMetadata, ProjectRobotJoints, Joint +from arcor2 import DynamicParamTuple, rest from arcor2.action import action -from arcor2 import rest +from arcor2.data.common import ActionMetadata, Joint, Pose, ProjectRobotJoints +from arcor2.data.object_type import MeshFocusAction, Model3dType from arcor2.object_types import Generic -from arcor2.data.object_type import Model3dType, MeshFocusAction from arcor2.parameter_plugins.relative_pose import RelativePose +from arcor2.services.robot_service import RobotService +from arcor2_kinali.data.robot import MoveRelativeJointsParameters, MoveRelativeParameters, MoveTypeEnum from arcor2_kinali.services import systems -from arcor2_kinali.data.robot import MoveTypeEnum, MoveRelativeJointsParameters, MoveRelativeParameters URL = os.getenv("REST_ROBOT_SERVICE_URL", "http://127.0.0.1:13000") @@ -264,12 +264,12 @@ def is_item_attached(self, robot_id: str, suction_id: str) -> bool: RestRobotService.DYNAMIC_PARAMS = { - "robot_id": (RestRobotService.get_robot_ids.__name__, set()), - "end_effector_id": (RestRobotService.get_end_effectors_ids.__name__, {"robot_id"}), - "gripper_id": (RestRobotService.grippers.__name__, {"robot_id"}), - "suction_id": (RestRobotService.suctions.__name__, {"robot_id"}), - "input_id": (RestRobotService.inputs.__name__, {"robot_id"}), - "output_id": (RestRobotService.outputs.__name__, {"robot_id"}) + "robot_id": DynamicParamTuple(RestRobotService.get_robot_ids.__name__, set()), + "end_effector_id": DynamicParamTuple(RestRobotService.get_end_effectors_ids.__name__, {"robot_id"}), + "gripper_id": DynamicParamTuple(RestRobotService.grippers.__name__, {"robot_id"}), + "suction_id": DynamicParamTuple(RestRobotService.suctions.__name__, {"robot_id"}), + "input_id": DynamicParamTuple(RestRobotService.inputs.__name__, {"robot_id"}), + "output_id": DynamicParamTuple(RestRobotService.outputs.__name__, {"robot_id"}) } RestRobotService.CANCEL_MAPPING = { diff --git a/arcor2_kinali/services/search.py b/arcor2_kinali/services/search.py index 60f961f..95a3a3d 100644 --- a/arcor2_kinali/services/search.py +++ b/arcor2_kinali/services/search.py @@ -1,15 +1,15 @@ -from typing import FrozenSet, List import os +from typing import FrozenSet, List from PIL.Image import Image # type: ignore -from arcor2.services.service import Service -from arcor2.data.common import Pose, ActionMetadata -from arcor2.action import action from arcor2 import rest +from arcor2.action import action +from arcor2.data.common import ActionMetadata, Pose +from arcor2.services.service import Service +from arcor2_kinali.data.search import GripperSetup, SearchEngineParameters, SearchOutput from arcor2_kinali.services import systems -from arcor2_kinali.data.search import SearchOutput, GripperSetup, SearchEngineParameters URL = os.getenv("SEARCH_SERVICE_URL", "http://127.0.0.1:12000") diff --git a/arcor2_kinali/services/statistic.py b/arcor2_kinali/services/statistic.py index a7b1ab3..d189f2a 100644 --- a/arcor2_kinali/services/statistic.py +++ b/arcor2_kinali/services/statistic.py @@ -1,10 +1,11 @@ -from typing import FrozenSet, List import os +from typing import FrozenSet, List -from arcor2.services.service import Service -from arcor2.data.common import ActionMetadata -from arcor2.action import action from arcor2 import rest +from arcor2.action import action +from arcor2.data.common import ActionMetadata +from arcor2.services.service import Service + from arcor2_kinali.data.statistic import StatisticValue diff --git a/arcor2_kinali/services/systems.py b/arcor2_kinali/services/systems.py index 368f575..5100b81 100644 --- a/arcor2_kinali/services/systems.py +++ b/arcor2_kinali/services/systems.py @@ -1,8 +1,8 @@ -from typing import Optional, FrozenSet +from typing import FrozenSet, Optional from arcor2 import rest -from arcor2.services.service import Service from arcor2.exceptions import Arcor2Exception +from arcor2.services.service import Service class SystemsException(Arcor2Exception): diff --git a/setup.cfg b/setup.cfg index 6deafc2..059d772 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,2 +1,9 @@ [flake8] max-line-length = 120 +application-import-names = arcor2_kinali + +[metadata] +description-file = README.md + +[mypy] +python_version = 3.8 \ No newline at end of file From 7d96df3a1a58db453f2cba73560aa279064a935a Mon Sep 17 00:00:00 2001 From: ZdenekM Date: Wed, 1 Jul 2020 15:08:40 +0200 Subject: [PATCH 5/9] Fix of previous fix. --- arcor2_kinali/object_types/rest_robot.py | 11 +++++------ arcor2_kinali/services/robot.py | 14 +++++++------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/arcor2_kinali/object_types/rest_robot.py b/arcor2_kinali/object_types/rest_robot.py index 5f5d200..a6d5eab 100644 --- a/arcor2_kinali/object_types/rest_robot.py +++ b/arcor2_kinali/object_types/rest_robot.py @@ -1,6 +1,5 @@ from typing import FrozenSet, Iterator, List, Optional -from arcor2 import DynamicParamTuple from arcor2.action import action from arcor2.data.common import ActionMetadata, Joint, Pose, ProjectRobotJoints from arcor2.data.object_type import MeshFocusAction, Models @@ -190,11 +189,11 @@ def is_item_attached(self, suction_id: str) -> bool: RestRobot.DYNAMIC_PARAMS = { - "end_effector_id": DynamicParamTuple(RestRobot.get_end_effectors_ids.__name__, set()), - "gripper_id": DynamicParamTuple(RestRobot.grippers.__name__, set()), - "suction_id": DynamicParamTuple(RestRobot.suctions.__name__, set()), - "input_id": DynamicParamTuple(RestRobot.inputs.__name__, set()), - "output_id": DynamicParamTuple(RestRobot.outputs.__name__, set()) + "end_effector_id": (RestRobot.get_end_effectors_ids.__name__, set()), + "gripper_id": (RestRobot.grippers.__name__, set()), + "suction_id": (RestRobot.suctions.__name__, set()), + "input_id": (RestRobot.inputs.__name__, set()), + "output_id": (RestRobot.outputs.__name__, set()) } RestRobotService.CANCEL_MAPPING = { diff --git a/arcor2_kinali/services/robot.py b/arcor2_kinali/services/robot.py index a245d2b..d355ff9 100644 --- a/arcor2_kinali/services/robot.py +++ b/arcor2_kinali/services/robot.py @@ -1,7 +1,7 @@ import os from typing import Callable, FrozenSet, List, TYPE_CHECKING, TypeVar -from arcor2 import DynamicParamTuple, rest +from arcor2 import rest from arcor2.action import action from arcor2.data.common import ActionMetadata, Joint, Pose, ProjectRobotJoints from arcor2.data.object_type import MeshFocusAction, Model3dType @@ -264,12 +264,12 @@ def is_item_attached(self, robot_id: str, suction_id: str) -> bool: RestRobotService.DYNAMIC_PARAMS = { - "robot_id": DynamicParamTuple(RestRobotService.get_robot_ids.__name__, set()), - "end_effector_id": DynamicParamTuple(RestRobotService.get_end_effectors_ids.__name__, {"robot_id"}), - "gripper_id": DynamicParamTuple(RestRobotService.grippers.__name__, {"robot_id"}), - "suction_id": DynamicParamTuple(RestRobotService.suctions.__name__, {"robot_id"}), - "input_id": DynamicParamTuple(RestRobotService.inputs.__name__, {"robot_id"}), - "output_id": DynamicParamTuple(RestRobotService.outputs.__name__, {"robot_id"}) + "robot_id": (RestRobotService.get_robot_ids.__name__, set()), + "end_effector_id": (RestRobotService.get_end_effectors_ids.__name__, {"robot_id"}), + "gripper_id": (RestRobotService.grippers.__name__, {"robot_id"}), + "suction_id": (RestRobotService.suctions.__name__, {"robot_id"}), + "input_id": (RestRobotService.inputs.__name__, {"robot_id"}), + "output_id": (RestRobotService.outputs.__name__, {"robot_id"}) } RestRobotService.CANCEL_MAPPING = { From ee78fb750775968dcf3b5990859fbddebbd07725 Mon Sep 17 00:00:00 2001 From: ZdenekM Date: Thu, 2 Jul 2020 11:56:02 +0200 Subject: [PATCH 6/9] arcor2 version update --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 6efb52e..c315f79 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ install_requires=[ 'dataclasses', 'dataclasses-jsonschema[fast-validation]', - 'arcor2==0.8.0b2', + 'arcor2==0.8.0b3', 'Pillow' ], zip_safe=False, From 02f6f1460d20a9d63774d754d83de4e46e74e4a5 Mon Sep 17 00:00:00 2001 From: ZdenekM Date: Tue, 14 Jul 2020 09:52:19 +0200 Subject: [PATCH 7/9] Updated version of arcor2. --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index c315f79..c5b8ea3 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ install_requires=[ 'dataclasses', 'dataclasses-jsonschema[fast-validation]', - 'arcor2==0.8.0b3', + 'arcor2==0.7.0', 'Pillow' ], zip_safe=False, From 9efd1d6ddf932fe0a2f8db49ebe19bafa25185e8 Mon Sep 17 00:00:00 2001 From: ZdenekM Date: Wed, 15 Jul 2020 10:09:25 +0200 Subject: [PATCH 8/9] Robot service: methods to add/remove arbitrary collision model. --- arcor2_kinali/services/robot.py | 54 ++++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 14 deletions(-) diff --git a/arcor2_kinali/services/robot.py b/arcor2_kinali/services/robot.py index d355ff9..56e9cd0 100644 --- a/arcor2_kinali/services/robot.py +++ b/arcor2_kinali/services/robot.py @@ -4,7 +4,7 @@ from arcor2 import rest from arcor2.action import action from arcor2.data.common import ActionMetadata, Joint, Pose, ProjectRobotJoints -from arcor2.data.object_type import MeshFocusAction, Model3dType +from arcor2.data.object_type import MeshFocusAction, Model3dType, Models from arcor2.object_types import Generic from arcor2.parameter_plugins.relative_pose import RelativePose from arcor2.services.robot_service import RobotService @@ -25,11 +25,6 @@ def lru_cache(maxsize: int = 128, typed: bool = False) -> Callable[[F], F]: from functools import lru_cache -def collision_id(obj: Generic) -> str: - assert obj.collision_model is not None - return obj.collision_model.type().value + "-" + obj.id - - class RestRobotService(RobotService): """ REST interface to the robot service. @@ -47,26 +42,57 @@ def cleanup(self) -> None: def get_configuration_ids() -> FrozenSet[str]: return systems.systems(URL) - def add_collision(self, obj: Generic) -> None: - if not obj.collision_model or obj.collision_model.type() == Model3dType.NONE: - return - params = obj.collision_model.to_dict() + def add_collision_model(self, model: Models, pose: Pose) -> None: + """ + Adds arbitrary collision model to the collision scene. + :param model: Box, Sphere, Cylinder, Mesh + :param pose: Pose of the collision object. + :return: + + Example usage: + + >>> from arcor2.data.object_type import Box + >>> from arcor2.data.common import Pose, Position. Orientation + >>> box = Box("UniqueBoxId", 0.1, 0.1, 0.1) + >>> robot_service.add_collision_model(box, Pose(Position(1, 0, 0), Orientation(0, 0, 0, 1))) + + """ + + model_id = model.id + params = model.to_dict() del params["id"] - params[obj.collision_model.__class__.__name__.lower() + "Id"] = collision_id(obj) + params[model.__class__.__name__.lower() + "Id"] = model_id # TODO temporary hack - if obj.collision_model.type() == Model3dType.MESH: + if model.type() == Model3dType.MESH: params["mesh_scale_x"] = 1.0 params["mesh_scale_y"] = 1.0 params["mesh_scale_z"] = 1.0 params["transform_id"] = "world" - rest.put(f"{URL}/collisions/{obj.collision_model.type().value}", obj.pose, params) + rest.put(f"{URL}/collisions/{model.type().value}", pose, params) + + def remove_collision_model_id(self, model_id: str) -> None: + + rest.delete(f"{URL}/collisions/{model_id}") + + def add_collision(self, obj: Generic) -> None: + """ + Adds object's collision model to the collision scene. + :param obj: Scene object. + :return: + """ + + if not obj.collision_model or obj.collision_model.type() == Model3dType.NONE: + return + + self.add_collision_model(obj.collision_model, obj.pose) def remove_collision(self, obj: Generic) -> None: if not obj.collision_model or obj.collision_model.type() == Model3dType.NONE: return - rest.delete(f"{URL}/collisions/{collision_id(obj)}") + + self.remove_collision_model_id(obj.collision_model.id) def clear_collisions(self) -> None: From 1c93f7366f39b808740ab9e51c8c924145b72a07 Mon Sep 17 00:00:00 2001 From: Michal Kapinus Date: Wed, 15 Jul 2020 11:24:14 +0200 Subject: [PATCH 9/9] bump version --- arcor2_kinali/VERSION | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arcor2_kinali/VERSION b/arcor2_kinali/VERSION index faef31a..39e898a 100644 --- a/arcor2_kinali/VERSION +++ b/arcor2_kinali/VERSION @@ -1 +1 @@ -0.7.0 +0.7.1 diff --git a/setup.py b/setup.py index c5b8ea3..d77456c 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ install_requires=[ 'dataclasses', 'dataclasses-jsonschema[fast-validation]', - 'arcor2==0.7.0', + 'arcor2==0.7.1', 'Pillow' ], zip_safe=False,