File size: 5,087 Bytes
02cb0db
d7dc28f
 
 
 
 
 
 
 
 
 
02cb0db
 
d7dc28f
 
 
 
 
 
 
99ca4b3
d7dc28f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
02cb0db
d7dc28f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
02cb0db
d7dc28f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
02cb0db
d7dc28f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
130
131
132
133
134
135
136
137
138
139
140
141
# rSkill manifest — moveit-look-at: aim a robot camera at a 3-D point
#
# Wraps `moveit_msgs/action/MoveGroup`; the goal is authored as a `look_at`
# block (target point + camera name) instead of raw constraints:
# `ros_integration.goal_builder: look_at` selects the `LookAtRskill` adapter,
# which resolves the camera from the robot manifest (default "wrist";
# ROSConfigError listing available sensors when absent), reads the camera's
# current pose over TF2, computes the gaze pose (camera +Z hits the target,
# roll about the optical axis left free for reachability), and lowers it into
# MoveGroup position + orientation constraints for the camera's mount link.
#
# Renamed from `openral/rskill-look-at` as part of the `rskill-moveit-*`
# family (-joints / -eef-pose / -look-at over one ROSActionRskill engine).
#
# `plan_only: true` deliberately: OpenRAL's actuation path is the per-waypoint
# replay through /openral/candidate_action (safety kernel checks every step,
# HAL actuates). Letting move_group ALSO execute on its own controllers would
# bypass the kernel and double-drive the arm.

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

# Any arm embodiment with a MoveIt configuration AND a body-mounted camera
# declared in its robot.yaml. The default goal targets the Franka demo
# (panda_arm group, LIBERO eye-in-hand on panda_hand); other embodiments
# override `request.group_name` + `look_at.camera` / `look_at.frame_id`.
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

latency_budget:
  per_chunk_ms: 2000.0

# Surfaced to the Reasoner LLM tool palette.
description: >
  Aim a robot-mounted camera (default the wrist camera) at a 3-D point so a
  later perception query or manipulation skill sees the object framed.
  Plans a collision-aware arm motion via MoveIt that points the camera's
  optical axis at look_at.target_xyz. Use after navigating to an approach
  pose and before locate_in_view / a grasp skill.
actions:
  - "look"
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"
  result_trajectory_field: "planned_trajectory.joint_trajectory"
  # Selects the LookAtRskill goal-lowering adapter: the
  # `look_at` block below is consumed by the adapter (popped before the
  # MoveGroup goal message is built); `request.goal_constraints` is filled in
  # at dispatch.
  goal_builder: "look_at"
  # Defaults target the upstream `moveit_resources_panda_moveit_config` demo:
  # planning frame `panda_link0`, LIBERO eye-in-hand camera on `panda_hand`.
  # `look_at.target_xyz` is a reachable point on the demo's tabletop; real
  # dispatches override it via goal_params_json.
  default_goal_json: |
    {
      "look_at": {
        "target_xyz": [0.5, 0.0, 0.2],
        "frame_id": "panda_link0",
        "camera": "wrist",
        "standoff_m": null,
        "position_tolerance_m": 0.02,
        "orientation_tolerance_rad": 0.15
      },
      "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 the look_at block; planner settings are inherited.
goal_params_schema:
  type: object
  description: >
    Aim the named camera at a 3-D point. target_xyz is expressed in
    look_at.frame_id (the planning frame). camera names a sensor from the
    robot manifest (default "wrist"). Omit standoff_m to re-aim the camera
    in place; set it to also move the camera to that distance from the
    target along its current line of approach.
  properties:
    look_at:
      type: object
      properties:
        target_xyz:
          type: array
          items:
            type: number
          minItems: 3
          maxItems: 3
          description: "Point to aim at, [x, y, z] metres in look_at.frame_id."
        camera:
          type: string
          description: "Sensor name from the robot manifest. Default: wrist."
        standoff_m:
          type: number
          description: >
            Optional camera-to-target distance; omit to re-aim in place.
      required:
        - target_xyz
  required:
    - look_at