From db4ea251e7196d78d9e83a1a2a22aff0c334188f Mon Sep 17 00:00:00 2001 From: luis-camero <88782189+luis-camero@users.noreply.github.com> Date: Tue, 11 Feb 2025 10:29:24 -0500 Subject: [PATCH] Feature: Manipulator Samples and Poses (#163) * Add group_state macros to arm SRDF * Add group_state macros to grippers SRDF * Generate pose macros in URDF --- .../semantic_description/generator.py | 17 +++++++ .../semantic_description/manipulators.py | 26 +++++++++- .../srdf/arm/kinova_gen3_6dof.srdf.xacro | 41 ++++++++++------ .../srdf/arm/kinova_gen3_7dof.srdf.xacro | 44 ++++++++++------- .../srdf/arm/kinova_gen3_lite.srdf.xacro | 26 ++++++++++ .../srdf/arm/universal_robots.srdf.xacro | 49 ++++++++++--------- .../srdf/gripper/kinova_2f_lite.srdf.xacro | 25 +++++++--- .../srdf/gripper/robotiq_2f_140.srdf.xacro | 25 +++++++--- .../srdf/gripper/robotiq_2f_85.srdf.xacro | 26 +++++++--- 9 files changed, 201 insertions(+), 78 deletions(-) diff --git a/clearpath_generator_common/clearpath_generator_common/semantic_description/generator.py b/clearpath_generator_common/clearpath_generator_common/semantic_description/generator.py index 653a809b..8de0832b 100644 --- a/clearpath_generator_common/clearpath_generator_common/semantic_description/generator.py +++ b/clearpath_generator_common/clearpath_generator_common/semantic_description/generator.py @@ -32,6 +32,7 @@ from clearpath_generator_common.common import BaseGenerator from clearpath_generator_common.description.writer import XacroWriter from clearpath_generator_common.semantic_description.manipulators import ( + ManipulatorPoseMacro, ManipulatorSemanticDescription ) @@ -75,6 +76,14 @@ def generate_arms(self) -> None: path=arm_semantic_description.path, ) + for pose in arm.poses: + pose_macro = ManipulatorPoseMacro(arm, pose) + self.xacro_writer.write_macro( + macro=pose_macro.macro(), + parameters=pose_macro.parameters(), + blocks=pose_macro.blocks(), + ) + self.xacro_writer.write_macro( macro='{0}'.format(arm_semantic_description.model), parameters=arm_semantic_description.parameters, @@ -101,6 +110,14 @@ def generate_grippers(self) -> None: path=gripper_semantic_description.path, ) + for pose in arm.gripper.poses: + pose_macro = ManipulatorPoseMacro(arm.gripper, pose) + self.xacro_writer.write_macro( + macro=pose_macro.macro(), + parameters=pose_macro.parameters(), + blocks=pose_macro.blocks(), + ) + self.xacro_writer.write_macro( macro='{0}'.format(gripper_semantic_description.model), parameters=gripper_semantic_description.parameters, diff --git a/clearpath_generator_common/clearpath_generator_common/semantic_description/manipulators.py b/clearpath_generator_common/clearpath_generator_common/semantic_description/manipulators.py index 8bac0ba3..1571b9d7 100644 --- a/clearpath_generator_common/clearpath_generator_common/semantic_description/manipulators.py +++ b/clearpath_generator_common/clearpath_generator_common/semantic_description/manipulators.py @@ -29,7 +29,31 @@ # Redistribution and use in source and binary forms, with or without # modification, is not permitted without the express permission # of Clearpath Robotics. -from clearpath_config.manipulators.types.manipulator import BaseManipulator +from clearpath_config.manipulators.types.manipulator import ( + BaseManipulator, + ManipulatorPose +) + + +class ManipulatorPoseMacro(): + + def __init__(self, manipulator: BaseManipulator, pose: ManipulatorPose) -> None: + self.manipulator = manipulator + self.pose = pose + + def macro(self) -> str: + return f'{self.manipulator.MANIPULATOR_MODEL}_group_state' + + def parameters(self) -> dict: + str_joints = [f'{joint:.4f}' for joint in self.pose.joints] + return { + 'name': self.manipulator.name, + 'group_state': self.pose.name, + 'joint_positions': f'${{[{", ".join(str_joints)}]}}' + } + + def blocks(self) -> str: + return None class ManipulatorSemanticDescription(): diff --git a/clearpath_manipulators_description/srdf/arm/kinova_gen3_6dof.srdf.xacro b/clearpath_manipulators_description/srdf/arm/kinova_gen3_6dof.srdf.xacro index efc0be6c..535198be 100644 --- a/clearpath_manipulators_description/srdf/arm/kinova_gen3_6dof.srdf.xacro +++ b/clearpath_manipulators_description/srdf/arm/kinova_gen3_6dof.srdf.xacro @@ -1,5 +1,17 @@ + + + + + + + + + + + + @@ -9,21 +21,18 @@ - - - - - - - - - - - - - - - - + + + + + diff --git a/clearpath_manipulators_description/srdf/arm/kinova_gen3_7dof.srdf.xacro b/clearpath_manipulators_description/srdf/arm/kinova_gen3_7dof.srdf.xacro index c52ee0a3..6285c2b3 100644 --- a/clearpath_manipulators_description/srdf/arm/kinova_gen3_7dof.srdf.xacro +++ b/clearpath_manipulators_description/srdf/arm/kinova_gen3_7dof.srdf.xacro @@ -1,5 +1,18 @@ + + + + + + + + + + + + + @@ -10,23 +23,18 @@ - - - - - - - - - - - - - - - - - - + + + + + diff --git a/clearpath_manipulators_description/srdf/arm/kinova_gen3_lite.srdf.xacro b/clearpath_manipulators_description/srdf/arm/kinova_gen3_lite.srdf.xacro index 80498a03..38f512de 100644 --- a/clearpath_manipulators_description/srdf/arm/kinova_gen3_lite.srdf.xacro +++ b/clearpath_manipulators_description/srdf/arm/kinova_gen3_lite.srdf.xacro @@ -1,5 +1,17 @@ + + + + + + + + + + + + @@ -33,5 +45,19 @@ + + + + + + diff --git a/clearpath_manipulators_description/srdf/arm/universal_robots.srdf.xacro b/clearpath_manipulators_description/srdf/arm/universal_robots.srdf.xacro index 65202af1..5c942a8a 100644 --- a/clearpath_manipulators_description/srdf/arm/universal_robots.srdf.xacro +++ b/clearpath_manipulators_description/srdf/arm/universal_robots.srdf.xacro @@ -1,5 +1,17 @@ + + + + + + + + + + + + @@ -9,29 +21,18 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + diff --git a/clearpath_manipulators_description/srdf/gripper/kinova_2f_lite.srdf.xacro b/clearpath_manipulators_description/srdf/gripper/kinova_2f_lite.srdf.xacro index 6493a9cd..ae49f66f 100644 --- a/clearpath_manipulators_description/srdf/gripper/kinova_2f_lite.srdf.xacro +++ b/clearpath_manipulators_description/srdf/gripper/kinova_2f_lite.srdf.xacro @@ -1,5 +1,12 @@ + + + + + + + @@ -7,12 +14,18 @@ - - - - - - + + + + diff --git a/clearpath_manipulators_description/srdf/gripper/robotiq_2f_140.srdf.xacro b/clearpath_manipulators_description/srdf/gripper/robotiq_2f_140.srdf.xacro index 1eb0ab9e..167d747b 100644 --- a/clearpath_manipulators_description/srdf/gripper/robotiq_2f_140.srdf.xacro +++ b/clearpath_manipulators_description/srdf/gripper/robotiq_2f_140.srdf.xacro @@ -1,5 +1,12 @@ + + + + + + + @@ -9,12 +16,18 @@ - - - - - - + + + + diff --git a/clearpath_manipulators_description/srdf/gripper/robotiq_2f_85.srdf.xacro b/clearpath_manipulators_description/srdf/gripper/robotiq_2f_85.srdf.xacro index 353d15c4..9b6d0983 100644 --- a/clearpath_manipulators_description/srdf/gripper/robotiq_2f_85.srdf.xacro +++ b/clearpath_manipulators_description/srdf/gripper/robotiq_2f_85.srdf.xacro @@ -1,5 +1,12 @@ + + + + + + + @@ -12,16 +19,21 @@ - - - - - - + + + + -