OpenRAL/rskill-nav2-mobile_base-navigate_to_pose
rskill-nav2-mobilebase-navigateto_pose
OpenRAL rSkill — wraps the upstreamnav2_msgs/action/NavigateToPoseaction server as an OpenRAL rSkill so the Reasoner can dispatch mobile-base navigation through the sameExecuteSkillpath used by VLA skills. Result-only mode — Nav2's behaviour tree publishes/cmd_veldirectly to the base controller; noActionchunk flows through OpenRAL's safety supervisor.
This package uses kind: ros_action with ros_integration.result_trajectory_field: null to put the `ROSActionRskill` adapter into result-only mode: it sends the goal, awaits the action result, and raises ROSRskillGoalSatisfied on success. Compare with the sibling `rskill-moveit-multi-joints` skill, which sets result_trajectory_field and replays a joint trajectory one waypoint at a time.
What this skill does
Navigates the mobile base to a fixed geometry_msgs/PoseStamped target in the map frame via Nav2's NavigateToPose action. The default goal points at the map origin; override ros_integration.default_goal_json in a per-deployment copy for real targets.
How it works
ROSActionRskill is a thin rSkillBase shim around an ActionClient:
_configure_impllazy-importsnav2_msgs.action.NavigateToPose, opens anActionClienton/navigate_to_posefrom theRskillRunnerNode-supplied node handle, and parsesros_integration.default_goal_jsononce.- On the first
_step_impl(world_state)call the adapter sends the goal, polls the goal-accept + result futures while the host node's main rclpy spin services callbacks, and — becauseresult_trajectory_field is None— raisesROSRskillGoalSatisfiedimmediately on success. The runner catches it specifically and closes theExecuteSkillgoal withsuccess=True.
Observation → action contract (result-only mode)
Safety implication. No ActionChunk is published on /openral/candidate_action, so the OpenRAL safety supervisor does NOT see Nav2's velocity commands. Collision avoidance relies entirely on Nav2's costmap + behaviour tree. The follow-up that brings velocity streams under the supervisor's envelope is tracked as an explicit out-of-scope item for the ROS-wrapped rSkills design and depends on (a) a mobile-base HAL declaring body_twist in supported_control_modes (none exist in-tree today), and (b) a velocity / jerk envelope landing in the supervisor (it currently checks per-joint position only).
How it was trained / Upstream provenance
Nothing is trained — this rSkill wraps the upstream Nav2 stack.
Supported robots / embodiments
A real mobile-base HAL (Turtlebot 4, Clearpath Jackal, etc.) is the prerequisite for full end-to-end execution — tracked as a separate issue.
Sensors required / Observation contract
This skill consumes nothing through OpenRAL's sensor pipeline. Nav2's own subscriptions handle:
If your deployment uses a non-default topic remap, surface it on the Nav2 launch — the wrapped action's contract is intact.
Manifest summary
Full schema: `openral_core.schemas.RSkillManifest`.
Quick start
from openral_rskill.loader import rSkill
pkg = rSkill.from_yaml("rskills/rskill-nav2-navigate-to-pose/rskill.yaml")
print(pkg.manifest.name, pkg.manifest.kind, pkg.manifest.ros_integration.interface_name)End-to-end, with a real Nav2 launch up (e.g. against a Gazebo / Turtlebot4 sim):
# 1. Bring up Nav2 for your mobile-base sim or robot
ros2 launch nav2_bringup tb4_simulation_launch.py
# 2. Bring up the OpenRAL runner against that embodiment
ros2 launch openral_rskill_ros skill_runner.launch.py robot:=panda_mobile
# 3. From the Reasoner (or by hand), dispatch the goal:
ros2 action send_goal /openral/execute_skill openral_msgs/action/ExecuteSkill \
"{rskill_id: 'OpenRAL/rskill-nav2-mobile_base-navigate_to_pose', deadline_s: 120.0, prompt: 'go to map origin'}"Limitations / Roadmap
- Velocity stream bypasses the OpenRAL safety supervisor. Nav2 publishes
/cmd_veldirectly. This is a tracked out-of-scope item for the ROS-wrapped rSkills design. - Goal hard-coded in the manifest. v1 ships one goal per manifest; structured-prompt support is the next ADR.
- No mobile-base HAL in-tree. Until one lands, the skill resolves only inside deployments that ship their own mobile-base wiring.
License
The rSkill package itself (this manifest + README) is Apache-2.0. The wrapped Nav2 code (nav2_msgs IDL, navigation2 planners) is Apache-2.0 and lives outside this repository — installed via ros-${ROS_DISTRO}-nav2-bringup. Both postures are commercial-use-permissive.
See also
- ROS-wrapped rSkills
- `openral_rskill.ros_action_rskill` — adapter source
- `rskills/rskill-moveit-joints/` — sibling MoveIt wrapper (trajectory mode)
- CLAUDE.md §3 — Architecture Discipline
