File size: 4,889 Bytes
4ac13b0
2e9e257
 
 
 
 
 
4ac13b0
2e9e257
 
 
 
 
 
 
 
 
4f89684
2e9e257
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4ac13b0
2e9e257
 
 
 
 
 
4f89684
2e9e257
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4ac13b0
2e9e257
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4ac13b0
2e9e257
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# rSkill manifest — moveit-joints: plan to a joint configuration
#
# Wraps `moveit_msgs/action/MoveGroup`. `ros_integration.goal_builder: joint`
# selects the `JointGoalRskill` adapter, which consumes a `joint` block
# (`joint_names` + `positions`) and lowers it into a MoveGroup
# `joint_constraints` goal — the clean, LLM-facing form (positions, not
# hand-written constraint dicts). Renamed from `openral/rskill-moveit-plan-arm`
# as part of the `rskill-moveit-*` family (-joints / -eef-pose / -look-at
# over one ROSActionRskill engine).
#
# Collision posture: MoveIt's internal FCL planner does self + planning-scene
# (world) collision checking at plan time. `plan_only: true` so OpenRAL's
# per-waypoint replay through /openral/candidate_action stays the only
# actuation path (the safety kernel checks every step); move_group never drives
# its own controllers. `chunk_size: 1` so the supervisor sees every waypoint.

schema_version: "0.1"
name: "OpenRAL/rskill-moveit-multi-joints"
version: "0.1.0"
license: "apache-2.0"
role: "s1"
kind: "ros_action"

# Every arm embodiment OpenRAL ships a robot.yaml for. Whether a deployment can
# resolve this skill depends on whether a matching MoveIt config is running and
# whether the `joint` block below is correct for that robot's planning group.
# The Franka `panda_arm` group is the canonical example; for other embodiments
# copy this manifest and edit `joint.joint_names` + `request.group_name`.
embodiment_tags:
  - "franka_panda"
  - "ur5e"
  - "ur10e"
  - "so100_follower"
  - "openarm"
  - "rizon4"
  - "sawyer"
  - "widowx"

actuators_required:
  - kind: "joint_position"
    control_mode_semantics:
      mode: "absolute"

# REQUIRED for kind: ros_action — one waypoint per Action chunk so the safety
# supervisor's per-row envelope check sees every commanded position.
chunk_size: 1

# Planning is slow on the first call (MoveIt typically 0.5–2 s on a clean
# scene); subsequent step() calls just dequeue cached waypoints.
latency_budget:
  per_chunk_ms: 2000.0

# Surfaced to the Reasoner LLM tool palette.
description: >
  Plan and execute a collision-free motion to a target JOINT configuration via
  MoveIt's MoveGroup (self + planning-scene collision checked). Provide one
  target angle per planning-group joint. Defaults target the Franka Panda home
  pose; override the manifest to retarget. Use when you have a joint-space goal
  (e.g. a policy's in-distribution starting pose); for a Cartesian end-effector
  target use rskill-moveit-multi-eef_pose instead.
actions:
  - "reach"
objects: []
scenes: []

# Provenance — ROS-wrapped rSkill; paper_url carries the upstream link.
paper_url: "https://moveit.picknik.ai/"

ros_integration:
  package: "moveit_msgs"
  interface_type: "MoveGroup"
  interface_name: "/move_action"
  # `MoveGroup.Result.planned_trajectory.joint_trajectory` is reordered into the
  # host RobotDescription.joints order before per-waypoint chunk emission.
  result_trajectory_field: "planned_trajectory.joint_trajectory"
  # Selects the JointGoalRskill goal-lowering adapter: the `joint`
  # block below (joint_names + positions) is lowered into
  # `request.goal_constraints[0].joint_constraints` at configure time.
  goal_builder: "joint"
  # Franka Panda home pose (panda_arm group). For other embodiments override
  # `joint.joint_names` + `request.group_name`.
  default_goal_json: |
    {
      "joint": {
        "joint_names": ["panda_joint1", "panda_joint2", "panda_joint3", "panda_joint4", "panda_joint5", "panda_joint6", "panda_joint7"],
        "positions": [0.0, -0.785, 0.0, -2.356, 0.0, 1.571, 0.785],
        "position_tolerance_rad": 0.001
      },
      "request": {
        "group_name": "panda_arm",
        "num_planning_attempts": 5,
        "allowed_planning_time": 5.0,
        "max_velocity_scaling_factor": 0.3,
        "max_acceleration_scaling_factor": 0.3,
        "goal_constraints": []
      },
      "planning_options": {
        "plan_only": true,
        "replan": false
      }
    }
  ros_dependencies:
    - "ros-${ROS_DISTRO}-moveit"
    - "ros-${ROS_DISTRO}-moveit-resources-panda-moveit-config"

# Per-skill JSON Schema surfaced to the Reasoner LLM tool palette.
# The LLM overrides only `joint.positions` (one per planning-group joint, in
# the manifest's joint_names order); planner / tolerance defaults are inherited.
goal_params_schema:
  type: object
  description: >
    Target joint positions for MoveIt's MoveGroup against the planning group.
    Provide one entry per joint in the manifest's joint_names order.
  properties:
    joint:
      type: object
      properties:
        positions:
          type: array
          items:
            type: number
          minItems: 7
          maxItems: 7
          description: "Target joint angle (rad) per planning-group joint."
      required:
        - positions
  required:
    - joint