diff --git a/rbs_bt_executor/scripts/skill_description.py b/rbs_bt_executor/scripts/skill_description.py new file mode 100644 index 0000000..7d4135a --- /dev/null +++ b/rbs_bt_executor/scripts/skill_description.py @@ -0,0 +1,58 @@ +""" + json_description_example + Skill description for Robossembler framework + + 09.12.2024 @shalenikol release 0.1 +""" +import json + +# Описание JSON-файла +json_description = { + "skills": [ + { + "sid": "4147d1c3-54d8-40c2-968a-ddcd41f5d882", # Уникальный идентификатор навыка + "SkillPackage": { + "name": "Robossembler", # Название пакета навыков + "version": "1", # Версия пакета + "format": "1.0" # Версия формата пакета + }, + "Module": { + "node_name": "lc_yolo", # Имя узла модуля + "name": "ObjectDetection", # Название модуля + "description": "Object detection skill with YOLOv8" # Описание модуля + }, + "Launch": { # Параметры запуска + "executable": "od_yolo_lc.py", # Исполняемый файл + "package": "rbss_objectdetection" # Пакет, к которому принадлежит исполняемый файл + }, + "BTAction": [ # Список действий дерева поведения + { + "name": "odConfigure", # Название действия + "type": "run", # Тип действия + "param": [ # Параметры действия + { + "type": "topic", # Тип параметра + "dependency": { # Зависимость параметра + "type": "topic", + "sid": "36229f1f-24a6-4b21-8afd-1a9bf9f8abc9", # Уникальный идентификатор зависимости + "topicType": "sensor_msgs/msg/Image", # Тип топика + "topicOut": "/rgbd_camera/image" # Выходной топик + } + } + ], + "typeAction": "ACTION" # Тип узла в дереве поведения + } + ], + "topicsOut": [ # Список выходных топиков + { + "name": "lc_yolo/object_detection", # Название выходного топика + "type": "rbs_skill_interfaces/msg/BoundBox" # Тип сообщения выходного топика + } + ] + } + ] +} + +# Пример использования +json_string = json.dumps(json_description, indent=4) +print(json_string) diff --git a/rbss_movetopose/CMakeLists.txt b/rbss_movetopose/CMakeLists.txt index c93275f..76db5eb 100644 --- a/rbss_movetopose/CMakeLists.txt +++ b/rbss_movetopose/CMakeLists.txt @@ -22,7 +22,7 @@ ament_python_install_package(${PROJECT_NAME}) # Install Python executables install(PROGRAMS - scripts/mtp_cartesian.py + scripts/skill_movetopose.py DESTINATION lib/${PROJECT_NAME} ) diff --git a/rbss_movetopose/rbs_package.json b/rbss_movetopose/rbs_package.json index a9235c0..5db26ad 100644 --- a/rbss_movetopose/rbs_package.json +++ b/rbss_movetopose/rbs_package.json @@ -1,42 +1,45 @@ { - "SkillPackage": { "name": "Robossembler", "version": "1.0", "format": "1" }, - "Module": { "name": "MoveToPose", "description": "Move to Pose skill with cartesian controllers", "node_name": "mtp_cartesian" }, - "Launch": { "package": "rbss_movetopose", "executable": "mtp_cartesian.py" }, - "BTAction": [ - { - "name": "move", - "type": "action", - "param": [ - { - "type": "move_to_pose", - "dependency": { "robot_name": "arm0", - "pose": { "position": {"x":0.0, "y":0.0, "z":0.0}, "orientation": {"x":0.0, "y":0.0, "z":0.0, "w": 1.0} } } - } - ] - } - ], - "Settings": { - "result": "{\n  \"params\": \\${ITEM:Array:[]}\n}", - "context": "type ITEM = {\n\"name\": \\${NAME:string:default},\n\"value\": \\${VALUE:string:default}\n};", - "form": [ - "{\"name\":\"ITEM\",\"type\":\"Array\",\"defaultValue\":\"[]\",\"values\":[{\"name\":\"NAME\",\"type\":\"string\",\"defaultValue\":\"default\",\"isOpen\":false,\"id\":\"7d70fba4-63b5-424b-8d6c-16d59a77e037\",\"totalValue\":\"mesh_scale\\n\"},{\"name\":\"VALUE\",\"type\":\"string\",\"defaultValue\":\"default\",\"isOpen\":false,\"id\":\"0d8d8ee4-ba61-4904-beeb-cda218506907\",\"totalValue\":\"0.001\\n\"}],\"totalValue\":[[{\"name\":\"NAME\",\"type\":\"string\",\"defaultValue\":\"default\",\"isOpen\":false,\"id\":\"7d70fba4-63b5-424b-8d6c-16d59a77e037\",\"totalValue\":\"publishDelay\\n\"},{\"name\":\"VALUE\",\"type\":\"string\",\"defaultValue\":\"default\",\"isOpen\":false,\"id\":\"0d8d8ee4-ba61-4904-beeb-cda218506907\",\"totalValue\":\"0.5\\n\"}],[{\"name\":\"NAME\",\"type\":\"string\",\"defaultValue\":\"default\",\"isOpen\":false,\"id\":\"7d70fba4-63b5-424b-8d6c-16d59a77e037\",\"totalValue\":\"publishDelay\\n\"},{\"name\":\"VALUE\",\"type\":\"string\",\"defaultValue\":\"default\",\"isOpen\":false,\"id\":\"0d8d8ee4-ba61-4904-beeb-cda218506907\",\"totalValue\":\"0.5\\n\"}]],\"isOpen\":true,\"subType\":\"ITEM\",\"id\":\"767a59ff-3d25-4c34-84a2-fa5baf074394\"}" + "skills": [ + { + "sid": "a", + "SkillPackage": { "name": "Robossembler", "version": "1.0", "format": "1" }, + "Module": { "node_name": "skill_mtp", "name": "MoveToPose", "description": "Move to Pose skill" }, + "Launch": { "executable": "skill_movetopose.py", "package": "rbss_movetopose" }, + "BTAction": [ + { + "name": "move", + "type": "action", + "param": [ + { + "type": "move_to_pose", + "dependency": { "robot_name": "rbs_arm", + "pose": { "position": {"x":0.1, "y":0.1, "z":0.7}, "orientation": {"x":0.55, "y":0.0, "z":0.45, "w": 1.0} } } + } + ], + "typeAction": "ACTION" + } ], - "output": { - "params": [ - { - "name": "server_name", - "value": "cartesian_move_to_pose" - }, - { - "name": "end_effector_velocity", - "value": "1.0" - }, - { - "name": "end_effector_acceleration", - "value": "1.0" - } - ] - }, - "type": "formBuilder" + "topicsOut": [], + "Settings": { + "output": { + "params": [ + { + "name": "server_name", + "value": "mtp_moveit", + "value2": "mtp_cart" + }, + { + "name": "end_effector_velocity", + "value": "1.0" + }, + { + "name": "end_effector_acceleration", + "value": "1.0" + } + ] + }, + "type": "formBuilder" + } } + ] } diff --git a/rbss_movetopose/scripts/mtp_cartesian.py b/rbss_movetopose/scripts/skill_movetopose.py similarity index 93% rename from rbss_movetopose/scripts/mtp_cartesian.py rename to rbss_movetopose/scripts/skill_movetopose.py index b7c74bb..8f3a125 100755 --- a/rbss_movetopose/scripts/mtp_cartesian.py +++ b/rbss_movetopose/scripts/skill_movetopose.py @@ -16,10 +16,12 @@ from rcl_interfaces.msg import SetParametersResult from rbs_skill_interfaces.action import MoveitSendPose from rbs_skill_interfaces.srv import RbsBt -NODE_NAME_DEFAULT = "mtp_cartesian" # this name must match the name in the description (["Module"]["node_name"]) -PARAM_SKILL_CFG = "mtp_cartesian_cfg" +SERVER_NAME = "mtp_cart" # default + +NODE_NAME_DEFAULT = "skill_mtp" # this name must match the name in the description (["Module"]["node_name"]) +PARAM_SKILL_CFG = NODE_NAME_DEFAULT + "_cfg" + COMPLETION_SRV_NAME = "/completion" -SERVER_NAME = "cartesian_movetopose" class MoveToPoseCartesianSkill(Node): """ skill node """ @@ -35,10 +37,6 @@ class MoveToPoseCartesianSkill(Node): elif nam == "end_effector_acceleration": self.end_effector_acceleration = float(val) - # for prop in self.skill_cfg["topicsOut"]: - # if prop["type"] == OUT_TOPIC_TYPE: - # self.topicSrv = prop["name"] - def __init__(self, **kwargs): self._tmode = 0 self._completion = False @@ -56,7 +54,7 @@ class MoveToPoseCartesianSkill(Node): self.server_name = SERVER_NAME self._Settings() - self._action_client = ActionClient(self, MoveitSendPose, self.server_name) # "/"+ robot_name + + self._action_client = ActionClient(self, MoveitSendPose, self.server_name) self._srv_completion = self.create_service(RbsBt, NODE_NAME_DEFAULT + COMPLETION_SRV_NAME, self.completion_callback) self._cnt = 0