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")) |