137 lines
4.5 KiB
Python
137 lines
4.5 KiB
Python
|
|
import numpy as np
|
||
|
|
import pinocchio as pin
|
||
|
|
from core.sew_mapper2 import SEWMapper, BallJointConfig
|
||
|
|
|
||
|
|
|
||
|
|
# -------------------------- quick test --------------------- ----- #
|
||
|
|
|
||
|
|
def test_once(mapper: SEWMapper) -> None:
|
||
|
|
q_m7 = np.array([0.534, 0.314, -0.1, 2.14, 0.38, 0.38, -0.72], dtype=float)
|
||
|
|
q_s, dbg = mapper.retarget(q_m7)
|
||
|
|
|
||
|
|
# evaluate
|
||
|
|
mapper._fk_master(_build_q7(mapper.m_model, mapper.m_qidx7, q_m7))
|
||
|
|
mapper._fk_slave(q_s)
|
||
|
|
Rm = mapper._rot(mapper.m_data, mapper.fid_mEE)
|
||
|
|
Rs = mapper._rot(mapper.s_data, mapper.fid_sEE)
|
||
|
|
ang_err = float(np.linalg.norm(pin.log3(Rs.T @ Rm)))
|
||
|
|
pW = mapper._pos(mapper.s_data, mapper.fid_sW)
|
||
|
|
pos_err = float(np.linalg.norm(pW - dbg["pW_s_ref"]))
|
||
|
|
|
||
|
|
print("q_s(7):", np.array([q_s[i] for i in mapper.s_qidx7]))
|
||
|
|
print("angle_err(rad):", ang_err)
|
||
|
|
print("wrist_pos_err(m):", pos_err)
|
||
|
|
|
||
|
|
def _build_q7(model: pin.Model, qidx7, q7):
|
||
|
|
q = pin.neutral(model)
|
||
|
|
for i, idx in enumerate(qidx7):
|
||
|
|
q[idx] = float(q7[i])
|
||
|
|
return q
|
||
|
|
|
||
|
|
|
||
|
|
def test_fake():
|
||
|
|
master_urdf = "../config/master_7dof.urdf"
|
||
|
|
slave_urdf = "../config/slave_7dof.urdf"
|
||
|
|
|
||
|
|
m_model = pin.buildModelFromUrdf(master_urdf)
|
||
|
|
s_model = pin.buildModelFromUrdf(slave_urdf)
|
||
|
|
|
||
|
|
# frames
|
||
|
|
mS, mE, mW, mEE = "master_shoulder", "master_forearm", "master_wrist", "master_ee"
|
||
|
|
sS, sE, sW, sEE = "slave_shoulder", "slave_forearm", "slave_wrist", "slave_ee"
|
||
|
|
|
||
|
|
# joint order: [S1,S2,S3, EL, W1,W2,W3]
|
||
|
|
master_joint_names = (
|
||
|
|
"master_shoulder_pitch_joint", "master_shoulder_yaw_joint", "master_shoulder_roll_joint",
|
||
|
|
"master_elbow_flex_joint",
|
||
|
|
"master_wrist_roll_joint", "master_wrist_yaw_joint", "master_wrist_pitch_joint",
|
||
|
|
)
|
||
|
|
slave_joint_names = (
|
||
|
|
"slave_shoulder_pitch_joint", "slave_shoulder_yaw_joint", "slave_shoulder_roll_joint",
|
||
|
|
"slave_elbow_flex_joint",
|
||
|
|
"slave_wrist_roll_joint", "slave_wrist_yaw_joint", "slave_wrist_pitch_joint",
|
||
|
|
)
|
||
|
|
|
||
|
|
# configs (your confirmed settings)
|
||
|
|
s_sh_cfg = BallJointConfig(
|
||
|
|
axis_order="yxy",
|
||
|
|
joint_names=("slave_shoulder_pitch_joint", "slave_shoulder_yaw_joint", "slave_shoulder_roll_joint"),
|
||
|
|
signs=(-1.0, 1.0, -1.0),
|
||
|
|
)
|
||
|
|
s_wr_cfg = BallJointConfig(
|
||
|
|
axis_order="yzx",
|
||
|
|
joint_names=("slave_wrist_roll_joint", "slave_wrist_yaw_joint", "slave_wrist_pitch_joint"),
|
||
|
|
signs=(-1.0, 1.0, 1.0),
|
||
|
|
)
|
||
|
|
|
||
|
|
mapper = SEWMapper(
|
||
|
|
master_model=m_model,
|
||
|
|
slave_model=s_model,
|
||
|
|
m_shoulder=mS, m_elbow=mE, m_wrist=mW, m_ee=mEE,
|
||
|
|
s_shoulder=sS, s_elbow=sE, s_wrist=sW, s_ee=sEE,
|
||
|
|
master_joint_names=master_joint_names,
|
||
|
|
slave_joint_names=slave_joint_names,
|
||
|
|
slave_shoulder_cfg=s_sh_cfg,
|
||
|
|
slave_wrist_cfg=s_wr_cfg,
|
||
|
|
slave_elbow_axis_local=np.array([1.0, 0.0, 0.0]),
|
||
|
|
debug=False,
|
||
|
|
)
|
||
|
|
|
||
|
|
test_once(mapper)
|
||
|
|
|
||
|
|
|
||
|
|
def test_real():
|
||
|
|
master_urdf = "../config/master_7dof.urdf"
|
||
|
|
slave_urdf = "../config/real_slave_7dof.urdf"
|
||
|
|
|
||
|
|
m_model = pin.buildModelFromUrdf(master_urdf)
|
||
|
|
s_model = pin.buildModelFromUrdf(slave_urdf)
|
||
|
|
|
||
|
|
# frames
|
||
|
|
mS, mE, mW, mEE = "master_shoulder", "master_forearm", "master_wrist", "master_ee"
|
||
|
|
sS, sE, sW, sEE = "R_SHOULDER_R_S", "R_ELBOW_R_S", "R_WRIST_R_S", "R_WRIST_R_S"
|
||
|
|
|
||
|
|
# joint order: [S1,S2,S3, EL, W1,W2,W3]
|
||
|
|
master_joint_names = (
|
||
|
|
"master_shoulder_pitch_joint", "master_shoulder_yaw_joint", "master_shoulder_roll_joint",
|
||
|
|
"master_elbow_flex_joint",
|
||
|
|
"master_wrist_roll_joint", "master_wrist_yaw_joint", "master_wrist_pitch_joint",
|
||
|
|
)
|
||
|
|
slave_joint_names = (
|
||
|
|
"R_SHOULDER_P", "R_SHOULDER_R", "R_SHOULDER_Y",
|
||
|
|
"R_ELBOW_R",
|
||
|
|
"R_WRIST_P", "R_WRIST_Y", "R_WRIST_R",
|
||
|
|
)
|
||
|
|
|
||
|
|
# configs (your confirmed settings)
|
||
|
|
s_sh_cfg = BallJointConfig(
|
||
|
|
axis_order="yxy",
|
||
|
|
joint_names=("R_SHOULDER_P", "R_SHOULDER_R", "R_SHOULDER_Y"),
|
||
|
|
signs=(-1.0, 1.0, -1.0),
|
||
|
|
)
|
||
|
|
s_wr_cfg = BallJointConfig(
|
||
|
|
axis_order="yzx",
|
||
|
|
joint_names=("R_WRIST_P", "R_WRIST_Y", "R_WRIST_R"),
|
||
|
|
signs=(-1.0, 1.0, 1.0),
|
||
|
|
)
|
||
|
|
|
||
|
|
mapper = SEWMapper(
|
||
|
|
master_model=m_model,
|
||
|
|
slave_model=s_model,
|
||
|
|
m_shoulder=mS, m_elbow=mE, m_wrist=mW, m_ee=mEE,
|
||
|
|
s_shoulder=sS, s_elbow=sE, s_wrist=sW, s_ee=sEE,
|
||
|
|
master_joint_names=master_joint_names,
|
||
|
|
slave_joint_names=slave_joint_names,
|
||
|
|
slave_shoulder_cfg=s_sh_cfg,
|
||
|
|
slave_wrist_cfg=s_wr_cfg,
|
||
|
|
slave_elbow_axis_local=np.array([1.0, 0.0, 0.0]),
|
||
|
|
debug=False,
|
||
|
|
)
|
||
|
|
|
||
|
|
test_once(mapper)
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
test_real()
|
||
|
|
|