robopal.controllers.jnt_torque_controller 源代码
import numpy as np
from robopal.controllers.base_controller import BaseController
[文档]
class JointTorqueController(BaseController):
def __init__(
self,
robot,
is_interpolate=False,
interpolator_config: dict = None
):
super().__init__(robot)
self.name = 'JNTTAU'
# choose interpolator
self.interpolator = None
if is_interpolate:
interpolator_config.setdefault('init_qpos', robot.get_arm_qpos())
interpolator_config.setdefault('init_qvel', robot.get_arm_qvel())
self._init_interpolator(interpolator_config)
[文档]
def step_controller(self, action):
"""
:param action: joint torque
:return: joint torque
"""
if isinstance(action, np.ndarray):
action = {self.robot.agents[0]: action}
return action
def _init_interpolator(self, cfg: dict):
try:
from robopal.controllers.planners.interpolators import OTG
except ImportError:
raise ImportError("Please install ruckig first: pip install ruckig")
self.interpolator = OTG(
OTG_dim=cfg['dof'],
control_cycle=cfg['control_timestep'],
max_velocity=0.2,
max_acceleration=0.4,
max_jerk=0.6
)
self.interpolator.set_params(cfg['init_qpos'], cfg['init_qvel'])
[文档]
def step_interpolator(self, action):
self.interpolator.update_target_position(action)
[文档]
def reset(self):
if self.interpolator is not None:
self.interpolator.set_params(self.robot.get_arm_qpos(), self.robot.get_arm_qvel())