robopal.controllers.base_controller 源代码
from typing import Union, Dict
import mujoco
import numpy as np
import robopal.commons.transform as T
from robopal.robots.base import BaseRobot
[文档]
class BaseController:
def __init__(self, robot: BaseRobot) -> None:
self.name = None
self.robot = robot
self.dofs = robot.jnt_num
[文档]
def step_controller(
self, action: Union[np.ndarray, Dict[str, np.ndarray]]
) -> Union[np.ndarray, Dict[str, np.ndarray]]:
""" Step once computing for all agents.
"""
raise NotImplementedError
[文档]
def reset(self):
""" reset controller. """
pass
[文档]
def forward_kinematics(self, q, agent='arm0'):
def set_joint_qpos(qpos: np.ndarray, agent: str = 'arm0'):
""" Set joint position. """
assert qpos.shape[0] == self.robot.jnt_num
for j, per_arm_joint_names in enumerate(self.robot.arm_joint_names[agent]):
self.robot.kine_data.joint(per_arm_joint_names).qpos = qpos[j]
set_joint_qpos(q, agent)
mujoco.mj_fwdPosition(self.robot.robot_model, self.robot.kine_data)
base_pos = self.robot.kine_data.body(self.robot.base_link_name[agent]).xpos
base_mat = self.robot.kine_data.body(self.robot.base_link_name[agent]).xmat.reshape(3, 3)
p = self.robot.kine_data.body(self.robot.end_name[agent]).xpos
r = self.robot.kine_data.body(self.robot.end_name[agent]).xmat.reshape(3, 3)
end = T.make_transform(p, r)
base = T.make_transform(base_pos, base_mat)
ret = np.linalg.pinv(base) @ end
return ret[:3, -1], T.mat_2_quat(ret[:3, :3])