mirror of
https://github.com/huggingface/lerobot.git
synced 2026-05-17 09:39:47 +00:00
fix direction and encoding
This commit is contained in:
@@ -275,10 +275,7 @@ def rac_rollout_loop(
|
|||||||
if events["correction_active"]:
|
if events["correction_active"]:
|
||||||
# Human controlling - record correction data with soft gains
|
# Human controlling - record correction data with soft gains
|
||||||
robot_action = teleop.get_action()
|
robot_action = teleop.get_action()
|
||||||
# Use lower gains for smoother human control
|
robot.send_action(robot_action)
|
||||||
soft_kp = {k.removesuffix(".pos"): 60.0 for k in robot_action if k.endswith(".pos")}
|
|
||||||
soft_kd = {k.removesuffix(".pos"): 1.5 for k in robot_action if k.endswith(".pos")}
|
|
||||||
robot.send_action(robot_action, custom_kp=soft_kp, custom_kd=soft_kd)
|
|
||||||
stats["correction_frames"] += 1
|
stats["correction_frames"] += 1
|
||||||
|
|
||||||
# Record this frame
|
# Record this frame
|
||||||
|
|||||||
@@ -1202,42 +1202,8 @@ class LeRobotDataset(torch.utils.data.Dataset):
|
|||||||
|
|
||||||
if has_video_keys and not use_batched_encoding:
|
if has_video_keys and not use_batched_encoding:
|
||||||
video_paths = self._encode_multiple_temporary_episode_videos(self.meta.video_keys, episode_index)
|
video_paths = self._encode_multiple_temporary_episode_videos(self.meta.video_keys, episode_index)
|
||||||
for (video_key, video_path) in zip(self.meta.video_keys, video_paths):
|
for video_key, video_path in zip(self.meta.video_keys, video_paths):
|
||||||
ep_metadata.update(self._save_episode_video(video_key, episode_index, video_path))
|
ep_metadata.update(self._save_episode_video(video_key, episode_index, video_path))
|
||||||
num_cameras = len(self.meta.video_keys)
|
|
||||||
if parallel_encoding and num_cameras > 1:
|
|
||||||
# TODO(Steven): Ideally we would like to control the number of threads per encoding such that:
|
|
||||||
# num_cameras * num_threads = (total_cpu -1)
|
|
||||||
with concurrent.futures.ProcessPoolExecutor(max_workers=num_cameras) as executor:
|
|
||||||
future_to_key = {
|
|
||||||
executor.submit(
|
|
||||||
_encode_video_worker,
|
|
||||||
video_key,
|
|
||||||
episode_index,
|
|
||||||
self.root,
|
|
||||||
self.fps,
|
|
||||||
): video_key
|
|
||||||
for video_key in self.meta.video_keys
|
|
||||||
}
|
|
||||||
|
|
||||||
results = {}
|
|
||||||
for future in concurrent.futures.as_completed(future_to_key):
|
|
||||||
video_key = future_to_key[future]
|
|
||||||
try:
|
|
||||||
temp_path = future.result()
|
|
||||||
results[video_key] = temp_path
|
|
||||||
except Exception as exc:
|
|
||||||
logging.error(f"Video encoding failed for {video_key}: {exc}")
|
|
||||||
raise exc
|
|
||||||
|
|
||||||
for video_key in self.meta.video_keys:
|
|
||||||
temp_path = results[video_key]
|
|
||||||
ep_metadata.update(
|
|
||||||
self._save_episode_video(video_key, episode_index, temp_path=temp_path)
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
for video_key in self.meta.video_keys:
|
|
||||||
ep_metadata.update(self._save_episode_video(video_key, episode_index))
|
|
||||||
|
|
||||||
# `meta.save_episode` need to be executed after encoding the videos
|
# `meta.save_episode` need to be executed after encoding the videos
|
||||||
self.meta.save_episode(episode_index, episode_length, episode_tasks, ep_stats, ep_metadata)
|
self.meta.save_episode(episode_index, episode_length, episode_tasks, ep_stats, ep_metadata)
|
||||||
|
|||||||
@@ -293,7 +293,7 @@ class OpenArmsMini(Teleoperator):
|
|||||||
start = time.perf_counter()
|
start = time.perf_counter()
|
||||||
|
|
||||||
# Motors to flip (invert direction) - different for each arm
|
# Motors to flip (invert direction) - different for each arm
|
||||||
right_motors_to_flip = ["joint_1", "joint_2", "joint_3", "joint_4", "joint_5"]
|
right_motors_to_flip = ["joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "joint_7"]
|
||||||
left_motors_to_flip = ["joint_1", "joint_3", "joint_4", "joint_5", "joint_6", "joint_7"]
|
left_motors_to_flip = ["joint_1", "joint_3", "joint_4", "joint_5", "joint_6", "joint_7"]
|
||||||
|
|
||||||
# Joint mapping: leader joint 6 -> follower joint 7, leader joint 7 -> follower joint 6
|
# Joint mapping: leader joint 6 -> follower joint 7, leader joint 7 -> follower joint 6
|
||||||
@@ -330,7 +330,7 @@ class OpenArmsMini(Teleoperator):
|
|||||||
feedback: Dictionary with motor positions (e.g., "right_joint_1.pos", "left_joint_2.pos")
|
feedback: Dictionary with motor positions (e.g., "right_joint_1.pos", "left_joint_2.pos")
|
||||||
"""
|
"""
|
||||||
# Motors to flip (invert direction) -> matches get_action()
|
# Motors to flip (invert direction) -> matches get_action()
|
||||||
right_motors_to_flip = ["joint_1", "joint_2", "joint_3", "joint_4", "joint_5"]
|
right_motors_to_flip = ["joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "joint_7"]
|
||||||
left_motors_to_flip = ["joint_1", "joint_3", "joint_4", "joint_5", "joint_6", "joint_7"]
|
left_motors_to_flip = ["joint_1", "joint_3", "joint_4", "joint_5", "joint_6", "joint_7"]
|
||||||
|
|
||||||
# Reverse joint mapping: follower joint 7 -> leader joint 6, follower joint 6 -> leader joint 7
|
# Reverse joint mapping: follower joint 7 -> leader joint 6, follower joint 6 -> leader joint 7
|
||||||
@@ -397,7 +397,7 @@ class OpenArmsMini(Teleoperator):
|
|||||||
|
|
||||||
# Reverse joint mapping for target (follower joint 7 -> leader joint 6)
|
# Reverse joint mapping for target (follower joint 7 -> leader joint 6)
|
||||||
joint_remap = {"joint_7": "joint_6", "joint_6": "joint_7"}
|
joint_remap = {"joint_7": "joint_6", "joint_6": "joint_7"}
|
||||||
right_motors_to_flip = ["joint_1", "joint_2", "joint_3", "joint_4", "joint_5"]
|
right_motors_to_flip = ["joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "joint_7"]
|
||||||
left_motors_to_flip = ["joint_1", "joint_3", "joint_4", "joint_5", "joint_6", "joint_7"]
|
left_motors_to_flip = ["joint_1", "joint_3", "joint_4", "joint_5", "joint_6", "joint_7"]
|
||||||
|
|
||||||
# Parse target and apply remapping/flipping
|
# Parse target and apply remapping/flipping
|
||||||
|
|||||||
Reference in New Issue
Block a user