60 lines
1.4 KiB
Python
60 lines
1.4 KiB
Python
|
from mini_bdx_runtime.hwi import HWI
|
||
|
from mini_bdx_runtime.rl_utils import make_action_dict, mujoco_joints_order
|
||
|
import time
|
||
|
import numpy as np
|
||
|
import mujoco
|
||
|
import mujoco_viewer
|
||
|
import pickle
|
||
|
|
||
|
hwi = HWI("/dev/ttyUSB0")
|
||
|
|
||
|
hwi.turn_on()
|
||
|
hwi.set_pid_all([1100, 0, 0])
|
||
|
# hwi.set_pid([500, 0, 0], "neck_pitch")
|
||
|
# hwi.set_pid([500, 0, 0], "head_pitch")
|
||
|
# hwi.set_pid([500, 0, 0], "head_yaw")
|
||
|
|
||
|
dt = 0.0001
|
||
|
|
||
|
model = mujoco.MjModel.from_xml_path("../../mini_bdx/robots/bdx/scene.xml")
|
||
|
model.opt.timestep = dt
|
||
|
data = mujoco.MjData(model)
|
||
|
mujoco.mj_step(model, data)
|
||
|
viewer = mujoco_viewer.MujocoViewer(model, data)
|
||
|
|
||
|
|
||
|
init_pos = list(hwi.init_pos.values())
|
||
|
# init_pos += [0, 0]
|
||
|
data.qpos[:13] = init_pos
|
||
|
data.ctrl[:13] = init_pos
|
||
|
|
||
|
dof = 7
|
||
|
a = 0.3
|
||
|
f = 3
|
||
|
|
||
|
recording = {}
|
||
|
recording["mujoco_vel"] = []
|
||
|
recording["robot_vel"] = []
|
||
|
try:
|
||
|
while True:
|
||
|
target = a * np.sin(2 * np.pi * f * time.time())
|
||
|
full_target = init_pos.copy()
|
||
|
full_target[dof] += target
|
||
|
|
||
|
#
|
||
|
data.ctrl[:13] = full_target
|
||
|
action_dict = make_action_dict(full_target, mujoco_joints_order)
|
||
|
hwi.set_position_all(action_dict)
|
||
|
|
||
|
mujoco.mj_step(model, data, 50)
|
||
|
|
||
|
mujoco_vel = data.qvel[dof]
|
||
|
robot_vel = hwi.get_present_velocities()[dof]
|
||
|
|
||
|
recording["mujoco_vel"].append(mujoco_vel)
|
||
|
recording["robot_vel"].append(robot_vel)
|
||
|
|
||
|
viewer.render()
|
||
|
except KeyboardInterrupt:
|
||
|
pickle.dump(recording, open("speeds.pkl", "wb"))
|