Skip to content

Commit

Permalink
Add initial support for flagging unsupported accessories (e.g. Kinova…
Browse files Browse the repository at this point in the history
… arms, whose binary drivers don't exist in Jazzy yet)
  • Loading branch information
civerachb-cpr committed Nov 4, 2024
1 parent 8e1f908 commit ca27b78
Show file tree
Hide file tree
Showing 3 changed files with 116 additions and 1 deletion.
41 changes: 40 additions & 1 deletion clearpath_config/common/types/accessory.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@

class Accessory():
# Defaults
PARENT = "default_mount"
PARENT = 'default_mount'
XYZ = [0.0, 0.0, 0.0]
RPY = [0.0, 0.0, 0.0]

Expand All @@ -41,6 +41,11 @@ def __init__(
xyz: List[float] = XYZ,
rpy: List[float] = RPY
) -> None:

self.assert_is_supported()
if self.is_deprecated:
print(f'{type(self)} is deprecated')

self.name = str()
self.parent = str()
self.xyz = list()
Expand Down Expand Up @@ -126,6 +131,40 @@ def assert_valid_triplet(tri: List[float], msg: str = None) -> None:
# Triplet must be all floats
assert all([isinstance(i, float) for i in tri])

@staticmethod
def assert_is_supported():
"""
Override this method to temporarily disable accessories that are not currently supported.
When disabling an accessory, raise a
clearpath_config.common.types.exception.UnsupportedAccessoryException
with a suitable mesage (e.g. "SpamEggs driver is not yet released for ROS 2 Jazzy")
@return None
@exception Raises a clearpath_config.common.types.exception.UnsupportedAccessoryException
if the accessory is not supported
"""
pass

@property
def is_suppported(self):
try:
self.assert_is_supported()
return True
except:
return False

@property
def is_deprecated(self):
"""
Override this method to indicate that this accessory has been deprecated and may be
removed at a future date.
When flagging an accessory for deprecation, simply override it to return True
"""
return False


class IndexedAccessory(Accessory):

Expand Down
63 changes: 63 additions & 0 deletions clearpath_config/common/types/exception.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#!/usr/bin/env python3
"""
Various exceptions specific to the clearpath_config system
See specific classes below for details
"""
# Software License Agreement (BSD)
#
# @author Chris Iverach-Brereton <[email protected]>
# @copyright (c) 2024, Clearpath Robotics, Inc., All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Clearpath Robotics nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.


class UnsupportedAccessoryException(AssertionError):
"""
Indicates that an accessory is not supported in the current release
The accessory may become available in the future.
"""
def __init__(self, message):
"""
Create a new exception
@param message A message indicating why this accessory is not yet supported
"""
super().__init__(message)


class UnsupportedPlatformException(AssertionError):
"""
Indicates that a platform is not supported in the current release
The platform may become available in the future.
"""
def __init__(self, message):
"""
Create a new exception
@param message A message indicating why this platform is not yet supported
"""
super().__init__(message)
13 changes: 13 additions & 0 deletions clearpath_config/manipulators/types/arms.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
# POSSIBILITY OF SUCH DAMAGE.
from typing import List
from clearpath_config.common.types.accessory import Accessory
from clearpath_config.common.types.exception import UnsupportedAccessoryException
from clearpath_config.common.types.ip import IP
from clearpath_config.common.types.port import Port
from clearpath_config.manipulators.types.grippers import Gripper
Expand Down Expand Up @@ -120,14 +121,26 @@ def from_dict(self, d: dict) -> None:
class KinovaGen3Dof6(BaseArm):
MANIPULATOR_MODEL = "kinova_gen3_6dof"

@classmethod
def assert_is_supported(self):
raise UnsupportedAccessoryException("Kinova Gen3 is not yet supported for Jazzy")


class KinovaGen3Dof7(BaseArm):
MANIPULATOR_MODEL = "kinova_gen3_7dof"

@classmethod
def assert_is_supported(self):
raise UnsupportedAccessoryException("Kinova Gen3 is not yet supported for Jazzy")


class KinovaGen3Lite(BaseArm):
MANIPULATOR_MODEL = "kinova_gen3_lite"

@classmethod
def assert_is_supported(self):
raise UnsupportedAccessoryException("Kinova Gen3 Lite is not yet supported for Jazzy")


class Arm():
KINOVA_GEN3_6DOF = KinovaGen3Dof6.MANIPULATOR_MODEL
Expand Down

0 comments on commit ca27b78

Please sign in to comment.