NED2 — Reach
The arm must move its end-effector to a 3D target sampled in the workspace above the cafe-table. No cube; gripper not commanded.
Env IDs: NED2ReacherSim-v0 / NED2ReacherGoalSim-v0 /
NED2ReacherReal-v0 / NED2ReacherGoalReal-v0.
Description
A Niryo Ned2 6-DoF arm with 2 prismatic mors fingers sits on the
same cafe-table the RX200 uses. URDF link names are bare (no
ned2/ prefix on the URDF, although Gazebo’s link-state lookup
uses the model-qualified ned2/<link> form). MoveIt SRDF group
arm chains base_link → tool_link.
Action Space
Joint mode (default). Box(6,):
Num |
Action |
Min |
Max |
Joint |
Unit |
|---|---|---|---|---|---|
0 |
joint_1 delta (shoulder rot) |
-2.949 |
+2.949 |
|
rad |
1 |
joint_2 delta (arm rot) |
-1.833 |
+0.610 |
|
rad |
2 |
joint_3 delta (elbow rot) |
-1.340 |
+1.570 |
|
rad |
3 |
joint_4 delta (forearm rot) |
-2.090 |
+2.090 |
|
rad |
4 |
joint_5 delta (wrist rot) |
-1.920 |
+1.923 |
|
rad |
5 |
joint_6 delta (hand rot) |
-2.530 |
+2.530 |
|
rad |
Joint-1 bounds tightened from URDF’s ±3.000 to ±2.949 as a 0.05 rad
safety margin. delta_action=True (default) scales by
delta_coeff = 0.05.
EE mode (ee_action_type=True). Box(3,) — Δ EE position
relative to base_link.
Observation Space
Standard env. Box layout:
EE position (3, base_link frame, m)
Unit vector EE → goal (3, normalised)
Distance EE → goal (1, m)
Current joint positions (8 — alphabetical: joint_1, joint_2, joint_3, joint_4, joint_5, joint_6, mors_1, mors_2)
Previous action (6 or 3)
Current joint velocities (8)
Goal env. Dict with three keys.
desired_goal / achieved_goal = Box(3,). The bounds below are
the declared observation-space bounds (mirror
position_desired_goal_min/max in ned2_reach_task_config.yaml);
the per-episode sampling support is the narrower
position_goal_min/max (see Goal sampling below).
Idx |
Dim |
Component |
Min |
Max |
|---|---|---|---|---|
0 |
1 |
goal x |
0.15 |
0.40 |
1 |
1 |
goal y |
-0.40 |
0.40 |
2 |
1 |
goal z |
0.10 |
0.40 |
Rewards
Sparse: 0.0 if ‖ee − goal‖ < 0.02 else -1.0.
Dense: same shape as the other robots’ reach envs. Defaults
from config/ned2_reach_task_config.yaml: reach_tolerance=0.02,
multiplier_dist_reward=2.0, reached_goal_reward=20,
step_reward=-0.5.
env = gym.make("NED2ReacherSim-v0", reward_type="Dense")
env = gym.make("NED2ReacherGoalSim-v0", reward_type="Sparse")
Starting State
Initial joint pose: URDF zero
(init_pos = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] — Niryo’s “fully
extended forward and up” pose; consider switching to a Niryo-style
sleep pose like [0.0, 0.55, -1.5, 0.0, 0.0, 0.0] if your bench
lacks vertical clearance).
Goal sampling. desired_goal ∈ Box(3,) from
position_goal_min/max. Per-link FK safety enforces the
table_z + safety_z_margin floor.
Episode End
Truncation. max_episode_steps (default 100). Real env aborts
on stale /ned2/joint_states.
Termination. ‖ee − goal‖ < reach_tolerance (sparse only).
Arguments
Same kwargs as UR5e — Reach, plus NED2-specific:
use_wrist_camera(bool, default False) — subscribes to/gazebo_camera/image_raw(sim) or/niryo_robot_vision/compressed_video_stream(real) for Niryo’s built-in tool camera. Decoded frame exposed asself.cv_image_wrist.
Version History
v0— first release (rl_environmentsv0.1.0). Bare URDF link names. MoveIt SRDF grouparmends attool_link.