:py:mod:`rofunc.utils.robolab.kinematics.pytorch_kinematics_utils`
==================================================================

.. py:module:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils

.. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils
   :allowtitles:

Module Contents
---------------

Classes
~~~~~~~

.. list-table::
   :class: autosummary longtable
   :align: left

   * - :py:obj:`IKSolution <rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.IKSolution>`
     - .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.IKSolution
          :summary:
   * - :py:obj:`LineSearch <rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.LineSearch>`
     - .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.LineSearch
          :summary:
   * - :py:obj:`BacktrackingLineSearch <rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.BacktrackingLineSearch>`
     - .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.BacktrackingLineSearch
          :summary:
   * - :py:obj:`InverseKinematics <rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.InverseKinematics>`
     - .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.InverseKinematics
          :summary:
   * - :py:obj:`PseudoInverseIK <rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.PseudoInverseIK>`
     -
   * - :py:obj:`PseudoInverseIKWithSVD <rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.PseudoInverseIKWithSVD>`
     -

Functions
~~~~~~~~~

.. list-table::
   :class: autosummary longtable
   :align: left

   * - :py:obj:`build_chain_from_model <rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.build_chain_from_model>`
     - .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.build_chain_from_model
          :summary:
   * - :py:obj:`gaussian_around_config <rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.gaussian_around_config>`
     - .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.gaussian_around_config
          :summary:
   * - :py:obj:`delta_pose <rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.delta_pose>`
     - .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.delta_pose
          :summary:
   * - :py:obj:`apply_mask <rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.apply_mask>`
     - .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.apply_mask
          :summary:

Data
~~~~

.. list-table::
   :class: autosummary longtable
   :align: left

   * - :py:obj:`JOINT_TYPE_MAP <rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.JOINT_TYPE_MAP>`
     - .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.JOINT_TYPE_MAP
          :summary:

API
~~~

.. py:data:: JOINT_TYPE_MAP
   :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.JOINT_TYPE_MAP
   :value: None

   .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.JOINT_TYPE_MAP

.. py:function:: build_chain_from_model(model_path: str, verbose=False)
   :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.build_chain_from_model

   .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.build_chain_from_model

.. py:class:: IKSolution(dof, num_problems, num_retries, pos_tolerance, rot_tolerance, device='cpu')
   :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.IKSolution

   .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.IKSolution

   .. rubric:: Initialization

   .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.IKSolution.__init__

   .. py:method:: update_remaining_with_keep_mask(keep: torch.tensor)
      :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.IKSolution.update_remaining_with_keep_mask

      .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.IKSolution.update_remaining_with_keep_mask

   .. py:method:: update(q: torch.tensor, err: torch.tensor, use_keep_mask=True, keep_mask=None)
      :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.IKSolution.update

      .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.IKSolution.update

.. py:function:: gaussian_around_config(config: torch.Tensor, std: float) -> typing.Callable[[int], torch.Tensor]
   :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.gaussian_around_config

   .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.gaussian_around_config

.. py:class:: LineSearch
   :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.LineSearch

   .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.LineSearch

   .. py:method:: do_line_search(chain, q, dq, target_pos, target_wxyz, initial_dx, problem_remaining=None)
      :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.LineSearch.do_line_search
      :abstractmethod:

      .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.LineSearch.do_line_search

.. py:class:: BacktrackingLineSearch(max_lr=1.0, decrease_factor=0.5, max_iterations=5, sufficient_decrease=0.01)
   :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.BacktrackingLineSearch

   Bases: :py:obj:`rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.LineSearch`

   .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.BacktrackingLineSearch

   .. rubric:: Initialization

   .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.BacktrackingLineSearch.__init__

   .. py:method:: do_line_search(chain, q, dq, target_pos, target_wxyz, initial_dx, problem_remaining=None)
      :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.BacktrackingLineSearch.do_line_search

      .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.BacktrackingLineSearch.do_line_search

.. py:class:: InverseKinematics(serial_chain: pytorch_kinematics.chain.SerialChain, pos_tolerance: float = 0.001, rot_tolerance: float = 0.01, retry_configs: typing.Optional[torch.Tensor] = None, num_retries: typing.Optional[int] = None, joint_limits: typing.Optional[torch.Tensor] = None, config_sampling_method: typing.Union[str, typing.Callable[[int], torch.Tensor]] = 'uniform', max_iterations: int = 50, lr: float = 0.2, line_search: typing.Optional[rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.LineSearch] = None, regularlization: float = 1e-09, debug=False, early_stopping_any_converged=False, early_stopping_no_improvement='any', early_stopping_no_improvement_patience=2, optimizer_method: typing.Union[str, typing.Type[torch.optim.Optimizer]] = 'sgd')
   :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.InverseKinematics

   .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.InverseKinematics

   .. rubric:: Initialization

   .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.InverseKinematics.__init__

   .. py:method:: clear()
      :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.InverseKinematics.clear

      .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.InverseKinematics.clear

   .. py:method:: sample_configs(num_configs: int) -> torch.Tensor
      :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.InverseKinematics.sample_configs

      .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.InverseKinematics.sample_configs

   .. py:method:: solve(target_poses: pytorch_kinematics.transforms.Transform3d) -> rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.IKSolution
      :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.InverseKinematics.solve
      :abstractmethod:

      .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.InverseKinematics.solve

.. py:function:: delta_pose(m: torch.tensor, target_pos, target_wxyz)
   :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.delta_pose

   .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.delta_pose

.. py:function:: apply_mask(mask, *args)
   :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.apply_mask

   .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.apply_mask

.. py:class:: PseudoInverseIK(serial_chain: pytorch_kinematics.chain.SerialChain, pos_tolerance: float = 0.001, rot_tolerance: float = 0.01, retry_configs: typing.Optional[torch.Tensor] = None, num_retries: typing.Optional[int] = None, joint_limits: typing.Optional[torch.Tensor] = None, config_sampling_method: typing.Union[str, typing.Callable[[int], torch.Tensor]] = 'uniform', max_iterations: int = 50, lr: float = 0.2, line_search: typing.Optional[rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.LineSearch] = None, regularlization: float = 1e-09, debug=False, early_stopping_any_converged=False, early_stopping_no_improvement='any', early_stopping_no_improvement_patience=2, optimizer_method: typing.Union[str, typing.Type[torch.optim.Optimizer]] = 'sgd')
   :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.PseudoInverseIK

   Bases: :py:obj:`rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.InverseKinematics`

   .. py:method:: compute_dq(J, dx)
      :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.PseudoInverseIK.compute_dq

      .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.PseudoInverseIK.compute_dq

   .. py:method:: solve(target_poses: pytorch_kinematics.transforms.Transform3d) -> rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.IKSolution
      :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.PseudoInverseIK.solve

.. py:class:: PseudoInverseIKWithSVD(serial_chain: pytorch_kinematics.chain.SerialChain, pos_tolerance: float = 0.001, rot_tolerance: float = 0.01, retry_configs: typing.Optional[torch.Tensor] = None, num_retries: typing.Optional[int] = None, joint_limits: typing.Optional[torch.Tensor] = None, config_sampling_method: typing.Union[str, typing.Callable[[int], torch.Tensor]] = 'uniform', max_iterations: int = 50, lr: float = 0.2, line_search: typing.Optional[rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.LineSearch] = None, regularlization: float = 1e-09, debug=False, early_stopping_any_converged=False, early_stopping_no_improvement='any', early_stopping_no_improvement_patience=2, optimizer_method: typing.Union[str, typing.Type[torch.optim.Optimizer]] = 'sgd')
   :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.PseudoInverseIKWithSVD

   Bases: :py:obj:`rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.PseudoInverseIK`

   .. py:method:: compute_dq(J, dx)
      :canonical: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.PseudoInverseIKWithSVD.compute_dq

      .. autodoc2-docstring:: rofunc.utils.robolab.kinematics.pytorch_kinematics_utils.PseudoInverseIKWithSVD.compute_dq
