Views
No views yet
1from lerobot.envs import make_env
2
3envs = make_env(
4 "namenu/mycobot280-pick-place-env@<commit-sha>:env.py",
5 n_envs=1,
6 trust_remote_code=True,
7)
8env = envs["mycobot280_pick_place"][0]
9obs, info = env.reset(seed=0)@main works but tells you nothing about which scene produced a result.requirements.txt. Before loading:pip install "gymnasium>=0.29" "mujoco>=3.2" "numpy>=1.26"| observation | pixels.front — (480, 640, 3) uint8; agent_pos — (7,) float32 |
| action | (7,) float32 — 6 arm joint position targets + gripper target, radians |
| control rate | 20 Hz (sim_dt 0.002 s, 25 substeps) |
| episode length | 300 steps |
| success | cube released over the bin's inner footprint and resting near its floor |
| reward | shaped: −‖cube_xy − bin_xy‖, +1 per step while lifted, +10 terminal on success |
preprocess_observation maps them onto
observation.images.front / observation.state with no remap layer. Joint units are radians,
because the myCobot driver is radians-native on /joint_states and /arm_command and so are the
recordings below. This is not the SO-101 convention — do not add a degree conversion.joint2_to_joint1, joint3_to_joint2, joint4_to_joint3, joint5_to_joint4, joint6_to_joint5,
joint6output_to_joint6, then gripper_controller. The gripper's open and closed targets are
0.15 and -0.5 rad, which are the two values the real driver commands.| dataset | what it is | fps | episodes |
|---|---|---|---|
namenu/phi-mycobot-pickplace | real myCobot 280, teleoperated | 6 | 24 |
namenu/phi-mycobot-mujoco-world | scripted expert in an earlier build of this scene | 20 | 80 |
front names a fixed third-person camera in this
scene, not a reproduction of the real webcam pose — the observation key matches, the viewpoint
does not.discardvisual on, which deletes every geom that
collides with nothing. The bin was built non-collidable at spec level and so was silently removed
— the task had no visible target. It is now built collidable and switched off after the compile,
by geom name, because fusestatic has already merged its joint-less body into the world body.front camera was a targetbody camera aimed at the cube. That keeps the manipuland at image
centre in every single frame, which erases exactly the signal a visuomotor policy has to read. It
is now bolted to the world and aimed at a fixed point between the spawn box and the bin.env.py downloads the repositorymycobot280_envs package and ~9 MB of
robot meshes are not fetched with it, and their directory is never put on sys.path — so env.py
calls snapshot_download for its own repo on first load, recovering the repo id and commit from
the cache path. A cloned checkout skips that entirely.Path(__file__).absolute(), never
.resolve(). The cache exposes snapshots/<commit>/ as symlinks into a flat blobs/ store, and
resolving them discards both the repo name and the commit.make_env unless it bootstraps this way.assets/mycobot_280/mycobot_280_m5_gripper.urdf and 15 STL meshes — is
derived from elephantrobotics/mycobot_ros2
(branch humble), whose mycobot_description/package.xml declares <license>BSD</license>. That
repository ships no top-level LICENSE file. The meshes are re-converted from the upstream Collada
with <up_axis> honoured; link and joint transforms are untouched. See NOTICE and
assets/mycobot_280/UPSTREAM_NOTICE.