final renames + skill description
This commit is contained in:
parent
735615e360
commit
20273781a9
4 changed files with 106 additions and 47 deletions
58
rbs_bt_executor/scripts/skill_description.py
Normal file
58
rbs_bt_executor/scripts/skill_description.py
Normal file
|
@ -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)
|
|
@ -22,7 +22,7 @@ ament_python_install_package(${PROJECT_NAME})
|
||||||
|
|
||||||
# Install Python executables
|
# Install Python executables
|
||||||
install(PROGRAMS
|
install(PROGRAMS
|
||||||
scripts/mtp_cartesian.py
|
scripts/skill_movetopose.py
|
||||||
DESTINATION lib/${PROJECT_NAME}
|
DESTINATION lib/${PROJECT_NAME}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,42 +1,45 @@
|
||||||
{
|
{
|
||||||
"SkillPackage": { "name": "Robossembler", "version": "1.0", "format": "1" },
|
"skills": [
|
||||||
"Module": { "name": "MoveToPose", "description": "Move to Pose skill with cartesian controllers", "node_name": "mtp_cartesian" },
|
{
|
||||||
"Launch": { "package": "rbss_movetopose", "executable": "mtp_cartesian.py" },
|
"sid": "a",
|
||||||
"BTAction": [
|
"SkillPackage": { "name": "Robossembler", "version": "1.0", "format": "1" },
|
||||||
{
|
"Module": { "node_name": "skill_mtp", "name": "MoveToPose", "description": "Move to Pose skill" },
|
||||||
"name": "move",
|
"Launch": { "executable": "skill_movetopose.py", "package": "rbss_movetopose" },
|
||||||
"type": "action",
|
"BTAction": [
|
||||||
"param": [
|
{
|
||||||
{
|
"name": "move",
|
||||||
"type": "move_to_pose",
|
"type": "action",
|
||||||
"dependency": { "robot_name": "arm0",
|
"param": [
|
||||||
"pose": { "position": {"x":0.0, "y":0.0, "z":0.0}, "orientation": {"x":0.0, "y":0.0, "z":0.0, "w": 1.0} } }
|
{
|
||||||
}
|
"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} } }
|
||||||
],
|
}
|
||||||
"Settings": {
|
],
|
||||||
"result": "{\n \"params\": \\${ITEM:Array<ITEM>:[]}\n}",
|
"typeAction": "ACTION"
|
||||||
"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\"}"
|
|
||||||
],
|
],
|
||||||
"output": {
|
"topicsOut": [],
|
||||||
"params": [
|
"Settings": {
|
||||||
{
|
"output": {
|
||||||
"name": "server_name",
|
"params": [
|
||||||
"value": "cartesian_move_to_pose"
|
{
|
||||||
},
|
"name": "server_name",
|
||||||
{
|
"value": "mtp_moveit",
|
||||||
"name": "end_effector_velocity",
|
"value2": "mtp_cart"
|
||||||
"value": "1.0"
|
},
|
||||||
},
|
{
|
||||||
{
|
"name": "end_effector_velocity",
|
||||||
"name": "end_effector_acceleration",
|
"value": "1.0"
|
||||||
"value": "1.0"
|
},
|
||||||
}
|
{
|
||||||
]
|
"name": "end_effector_acceleration",
|
||||||
},
|
"value": "1.0"
|
||||||
"type": "formBuilder"
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"type": "formBuilder"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,10 +16,12 @@ from rcl_interfaces.msg import SetParametersResult
|
||||||
from rbs_skill_interfaces.action import MoveitSendPose
|
from rbs_skill_interfaces.action import MoveitSendPose
|
||||||
from rbs_skill_interfaces.srv import RbsBt
|
from rbs_skill_interfaces.srv import RbsBt
|
||||||
|
|
||||||
NODE_NAME_DEFAULT = "mtp_cartesian" # this name must match the name in the description (["Module"]["node_name"])
|
SERVER_NAME = "mtp_cart" # default
|
||||||
PARAM_SKILL_CFG = "mtp_cartesian_cfg"
|
|
||||||
|
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"
|
COMPLETION_SRV_NAME = "/completion"
|
||||||
SERVER_NAME = "cartesian_movetopose"
|
|
||||||
|
|
||||||
class MoveToPoseCartesianSkill(Node):
|
class MoveToPoseCartesianSkill(Node):
|
||||||
""" <Move to pose> skill node """
|
""" <Move to pose> skill node """
|
||||||
|
@ -35,10 +37,6 @@ class MoveToPoseCartesianSkill(Node):
|
||||||
elif nam == "end_effector_acceleration":
|
elif nam == "end_effector_acceleration":
|
||||||
self.end_effector_acceleration = float(val)
|
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):
|
def __init__(self, **kwargs):
|
||||||
self._tmode = 0
|
self._tmode = 0
|
||||||
self._completion = False
|
self._completion = False
|
||||||
|
@ -56,7 +54,7 @@ class MoveToPoseCartesianSkill(Node):
|
||||||
self.server_name = SERVER_NAME
|
self.server_name = SERVER_NAME
|
||||||
self._Settings()
|
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._srv_completion = self.create_service(RbsBt, NODE_NAME_DEFAULT + COMPLETION_SRV_NAME, self.completion_callback)
|
||||||
|
|
||||||
self._cnt = 0
|
self._cnt = 0
|
Loading…
Add table
Add a link
Reference in a new issue