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 @@
-
-
-
-
-
-
+
+
+
+
-