Saving test scripts

This commit is contained in:
glannuzel
2025-07-29 10:26:03 +02:00
parent 8de5610273
commit 08c47eac4b
2 changed files with 146 additions and 0 deletions
@@ -0,0 +1,56 @@
from lerobot.robots.reachy2 import Reachy2Robot, Reachy2RobotConfig
import time
REACHY2_MOTORS = {
"neck_yaw.pos": "head.neck.yaw",
"neck_pitch.pos": "head.neck.pitch",
"neck_roll.pos": "head.neck.roll",
"r_shoulder_pitch.pos": "r_arm.shoulder.pitch",
"r_shoulder_roll.pos": "r_arm.shoulder.roll",
"r_elbow_yaw.pos": "r_arm.elbow.yaw",
"r_elbow_pitch.pos": "r_arm.elbow.pitch",
"r_wrist_roll.pos": "r_arm.wrist.roll",
"r_wrist_pitch.pos": "r_arm.wrist.pitch",
"r_wrist_yaw.pos": "r_arm.wrist.yaw",
"r_gripper.pos": "r_arm.gripper",
"l_shoulder_pitch.pos": "l_arm.shoulder.pitch",
"l_shoulder_roll.pos": "l_arm.shoulder.roll",
"l_elbow_yaw.pos": "l_arm.elbow.yaw",
"l_elbow_pitch.pos": "l_arm.elbow.pitch",
"l_wrist_roll.pos": "l_arm.wrist.roll",
"l_wrist_pitch.pos": "l_arm.wrist.pitch",
"l_wrist_yaw.pos": "l_arm.wrist.yaw",
"l_gripper.pos": "l_arm.gripper",
"l_antenna.pos": "head.l_antenna",
"r_antenna.pos": "head.r_antenna",
# "mobile_base.vx": "mobile_base.vx",
# "mobile_base.vy": "mobile_base.vy",
# "mobile_base.vtheta": "mobile_base.vtheta",
}
robot_config = Reachy2RobotConfig(ip_address="localhost")
robot = Reachy2Robot(robot_config)
robot.connect()
print(f"is_connected(): {robot.is_connected}\n")
print(f"_get_state(): {robot._get_state()}\n")
obs = robot.get_observation()
print(f"get_observation(): {obs}\n")
print(f"observation_features: {robot.observation_features}\n")
print(f"action_features: {robot.action_features}\n")
def get_action(robot):
my_keys = REACHY2_MOTORS.keys()
my_values = [robot.reachy.joints[motor].present_position for motor in REACHY2_MOTORS.values()]
action = dict(zip(my_keys, my_values))
return action
action = get_action(robot)
time.sleep(5)
robot.send_action(action)
@@ -0,0 +1,90 @@
from lerobot.datasets.lerobot_dataset import LeRobotDataset
from lerobot.datasets.utils import hw_to_dataset_features
from lerobot.robots.reachy2 import Reachy2Robot, Reachy2RobotConfig
from lerobot.teleoperators.reachy2_fake_teleoperator import Reachy2FakeTeleoperator, Reachy2FakeTeleoperatorConfig
from lerobot.utils.control_utils import init_keyboard_listener
from lerobot.utils.utils import log_say
from lerobot.utils.visualization_utils import _init_rerun
from lerobot.record import record_loop
NUM_EPISODES = 2
FPS = 30
EPISODE_TIME_SEC = 5
RESET_TIME_SEC = 5
TASK_DESCRIPTION = "My task description"
# Create the robot and teleoperator configurations
robot_config = Reachy2RobotConfig(
id="test_reachy"
)
teleop_config = Reachy2FakeTeleoperatorConfig()
# Initialize the robot and teleoperator
robot = Reachy2Robot(robot_config)
teleop = Reachy2FakeTeleoperator(teleop_config)
# Configure the dataset features
action_features = hw_to_dataset_features(robot.action_features, "action")
obs_features = hw_to_dataset_features(robot.observation_features, "observation")
dataset_features = {**action_features, **obs_features}
# Create the dataset
dataset = LeRobotDataset.create(
repo_id="test/repo_test",
fps=FPS,
features=dataset_features,
robot_type=robot.name,
# use_videos=True,
# image_writer_threads=4,
)
# Initialize the keyboard listener and rerun visualization
_, events = init_keyboard_listener()
_init_rerun(session_name="recording")
# Connect the robot and teleoperator
robot.connect()
teleop.connect()
episode_idx = 0
while episode_idx < NUM_EPISODES and not events["stop_recording"]:
log_say(f"Recording episode {episode_idx + 1} of {NUM_EPISODES}")
record_loop(
robot=robot,
events=events,
fps=FPS,
teleop=teleop,
dataset=dataset,
control_time_s=EPISODE_TIME_SEC,
single_task=TASK_DESCRIPTION,
display_data=True,
)
# Reset the environment if not stopping or re-recording
if not events["stop_recording"] and (episode_idx < NUM_EPISODES - 1 or events["rerecord_episode"]):
log_say("Reset the environment")
record_loop(
robot=robot,
events=events,
fps=FPS,
teleop=teleop,
control_time_s=RESET_TIME_SEC,
single_task=TASK_DESCRIPTION,
display_data=True,
)
if events["rerecord_episode"]:
log_say("Re-recording episode")
events["rerecord_episode"] = False
events["exit_early"] = False
dataset.clear_episode_buffer()
continue
dataset.save_episode()
episode_idx += 1
# Clean up
log_say("Stop recording")
robot.disconnect()
# dataset.push_to_hub()