small/wx250s_custom/xs_common.py

92 lines
3.4 KiB
Python

# Copyright 2022 Trossen Robotics
#
# 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 the copyright holder 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.
from typing import List, Tuple
# Tuple of valid Interbotix X-Series arm models
_XSARM_MODELS = (
'px100',
'px150',
'rx150',
'rx200',
'wx200',
'wx250',
'wx250s',
'wx250s_custom',
'vx250',
'vx300',
'vx300s',
'mobile_px100',
'mobile_wx200',
'mobile_wx250s',
)
# Tuple of valid Interbotix LoCoBot models
_XSLOCOBOT_MODELS = (
'locobot_base',
'locobot_px100',
'locobot_wx200',
'locobot_wx250s',
)
def get_interbotix_xsarm_models() -> Tuple[str]:
"""Get the tuple of valid Interbotix X-Series arm models."""
return _XSARM_MODELS
def get_interbotix_xslocobot_models() -> Tuple[str]:
"""Get the tuple of valid Interbotix LoCoBot models."""
return _XSLOCOBOT_MODELS
def get_interbotix_xsturret_models() -> Tuple[str]:
"""Get the tuple of valid Interbotix Turret models."""
return _XSTURRET_MODELS
def get_interbotix_xsarm_joints(robot_model: str) -> List[str]:
"""
Return a list of joints in the robot_model.
:param robot_model: The robot model to get the joints of
:return: A list of joint names of the given robot model
:raises: KeyError if the robot model is not valid
"""
if robot_model in ('mobile_px100', 'px100'):
return ['waist', 'shoulder', 'elbow', 'wrist_angle', 'left_finger']
elif robot_model in ('px150', 'rx150', 'rx200', 'wx200', 'wx250', 'vx250', 'vx300'):
return ['waist', 'shoulder', 'elbow', 'wrist_angle', 'wrist_rotate', 'left_finger']
elif robot_model in ('wx250s_custom'):
return ['waist', 'shoulder', 'elbow', 'forearm_roll', 'wrist_angle', 'wrist_rotate']
elif robot_model in ('mobile_wx250s', 'wx250s', 'vx300s'):
return [
'waist', 'shoulder', 'elbow', 'forearm_roll',
'wrist_angle', 'wrist_rotate', 'left_finger'
]
else:
raise KeyError(f'{robot_model} is not a valid robot model.')