UR5e (Universal Robots UR5e + Robotiq 2F-85) ============================================= The `Universal Robots UR5e `_ is a 6-DoF collaborative arm with a `Robotiq 2F-85 `_ parallel-jaw gripper. Unlike the other three robots, the UR5e is mounted on a 4-legged ``ur5_base`` (top plate at z = 0.59) with a SEPARATE ``cafe_table`` workspace at world (0.7, 0, 0) — the arm sits next to the table, not on top of it. Tasks ----- .. list-table:: :widths: 14 30 56 :header-rows: 1 * - Task - Env ids - Page * - **Reach** - ``UR5eReacherSim-v0`` / ``...GoalSim-v0`` / ``...Real-v0`` / ``...GoalReal-v0`` - :doc:`reach` * - **Push** - ``UR5ePushSim-v0`` / ``...GoalSim-v0`` / ``...Real-v0`` / ``...GoalReal-v0`` - :doc:`push` * - **PnP** - ``UR5ePnPSim-v0`` / ``...GoalSim-v0`` / ``...Real-v0`` / ``...GoalReal-v0`` - :doc:`pnp` Robot-specific facts -------------------- .. list-table:: :widths: 28 72 :header-rows: 1 * - Topic - Value * - Arm joints (6) - ``shoulder_pan_joint``, ``shoulder_lift_joint``, ``elbow_joint``, ``wrist_1_joint``, ``wrist_2_joint``, ``wrist_3_joint`` * - Gripper joints (1) - ``robotiq_85_left_knuckle_joint`` — single actuated knuckle; the other 5 finger joints follow via URDF mimic linkage * - Gripper open / closed value - **Open = gripper_min** ≈ 0.0 rad; **closed = gripper_max** ≈ 0.8 rad. *Opposite* of the prismatic-finger convention used by RX200 / VX300S where open = ``gripper_max``. The env reads ``gripper_open_value`` / ``gripper_closed_value`` rosparams so reward + obs code doesn't have to know which way the bounds map. * - ``grasp_finger_thresh`` semantics - INVERTED — ``is_grasped`` triggers when ``knuckle_pos > grasp_finger_thresh`` (≈ 0.4 rad) * - PnP joint-mode action dim - 6 (arm) + 1 (gripper scalar) = 7 * - Arm controller topic - ``/ur5e/arm_controller/command`` * - URDF link prefix - Bare names on both sim + real (``base_link``, ``shoulder_link``, …, ``ee_link``). MoveIt SRDF group ``arm`` chains ``base_link → ee_link``. * - End-effector link (FK) - ``ee_link`` * - Reference frame - ``base_link`` * - MoveIt planning groups - ``arm``, ``gripper`` (from ``ur5e_robotiq_85_moveit_config`` SRDF) * - Init pose - Folded upright (``[0, -π/2, π/2, -π/2, -π/2, 0]``). The URDF-zero pose puts the arm horizontal at base height, colliding with the cafe-table column — sim uses ``SetModelConfiguration`` (pause → snap → unpause) to apply the safe pose before physics runs. * - Safety geometry - Two-floor check: every link clears ``base_z = 0.59`` AND only when projected over the cafe-table footprint, also clears ``table_top_z = 0.775``. Other robots have a single table floor since they're flush-mounted. Sim setup --------- * Description-extras package: ``ur5e_description_extras`` (URDF wrap, controller config, ``ur5_base`` model, ``cafe_table`` model, ``red_cube`` model, Kinect mount, ``ur5e_scene.world``). * The env launches Gazebo with ``ur5e_scene.world`` (sun, ground, ur5_base, cafe_table baked in). Arm spawns at z = 0.59 on top of the base. MoveIt comes up via the ``ur5e_description_extras/launch/ur5e_move_group.launch`` wrapper (drops the un-namespaced upstream ``ur5e_robotiq_85_moveit_config`` into ````). Real setup ---------- * TBD: ``ur5e_description_extras/launch/ur5e_real.launch`` (to write at the lab). Expected to bring up ``ur_robot_driver`` with the calibrated UR5e network IP + a Robotiq 2F-85 driver + MoveIt under ``/ur5e``. * The env subscribes to ``/ur5e/joint_states`` and publishes to ``/ur5e/arm_controller/command`` + ``/ur5e/gripper_controller/command``. * Push / PnP subscribe to ``/cube_pose`` for cube tracking. .. toctree:: :hidden: :maxdepth: 1 reach push pnp