Moleworks ROS 2 (Jazzy) robot operations + runbook assistant for the Mole/Menzi M4 stack. Use for startup/shutdown, enabling autonomous mode, hydraulic unlock, running Nav2/MoveIt/dig controllers, checking topic health/rates, debugging lifecycle/action servers, and maintaining the robot-agent docs under src/moleworks_ros/docs/robot_agent/.
Install
npx skillscat add idate96/codex-skills/robot-ros Install via the SkillsCat registry.
SKILL.md
Robot ROS
Overview
Use the repo runbooks and scripts as the single source of truth for operating and debugging the robot stack, and keep operator-facing docs consistent with the current code/topic names.
Workflow (Always Do This First)
- Treat
src/moleworks_ros/docs/robot_agent/ROBOT_OPERATIONS_GUIDE.mdas the single source of truth for operator commands. - For Menzi M4 machine-specific interlocks (autonomy/hydraulics/ignition), cross-check
~/git/menzi_docs/M4/. - Prefer running the health/monitor scripts in
src/moleworks_ros/mole_utils/scripts/over ad-hoc commands. - If giving ROS CLI commands, verify they exist for Jazzy (
ros2 <verb> -h) and match message definitions insrc/*_msgs/msg/.
Common Tasks
Bringup / Startup
- Open
src/moleworks_ros/docs/robot_agent/ROBOT_OPERATIONS_GUIDE.mdand use the launch commands from the “Quick Reference”. - If the user’s question implies different stacks, pick the closest launch entry point:
mole_bringup nav2_and_moveit.launch.pyfor full stackmole_bringup nav2.launch.pyfor Nav2-onlymole_bringup moveit.launch.pyfor MoveIt-onlymole_bringup dig.launch.pyfor dig stack
Enable Autonomous Mode / Hydraulic Unlock (Menzi M4)
- Do not invent an “unlock” command. Interlock services are machine/LLC specific.
- Confirm operator-side prerequisites (armrest up; press the radio/antenna button in the Menzi display and confirm with the push button).
- Verify readiness via
/machine_status(fields likeis_autonomous_operation_unlocked,is_hydraulilock_unlocked, etc.). - Discover services with
ros2 service list | grep -Ei "hydraul|lock|unlock|autonom|ignition|engine". - For the canonical Menzi docs and exact service names, consult:
~/git/menzi_docs/M4/Running code on rslpc.md~/git/menzi_docs/M4/M4 Startup and Shutdown.md
Health Checks / Debugging
- Prefer:
src/moleworks_ros/mole_utils/scripts/monitor_pipeline_flow.shsrc/moleworks_ros/mole_utils/scripts/monitor_perception_stack.shsrc/moleworks_ros/mole_utils/scripts/monitor_highlevel_controllers.sh
- If a command/topic name seems stale, confirm the authoritative names by searching:
rg -n "<topic_or_service_or_action>" src/moleworks_ros- Message types in
src/mole_msgs/msg/andsrc/machine_msgs/msg/ - Launch files under
src/moleworks_ros/*/launch/
Gravis Command Latch Recovery
Use this when /machine_status shows is_using_gravis_commands: false during testing.
- Stop/interrupt the active command publisher (for example a matrix runner).
- Publish zero velocity commands on
/mole/actuator_commandsfor 2 seconds. - Re-check
/machine_statusand only continue whenis_using_gravis_commands: true. - Restart the interrupted test and skip already-completed cases when possible.
Reference command:
ros2 topic pub -r 20 -t 2 /mole/actuator_commands mole_msgs/msg/MoleActuatorCommands \
"{actuators: [{joint_name: 'J_TURN', mode: 2, velocity: 0.0}, {joint_name: 'J_BOOM', mode: 2, velocity: 0.0}, {joint_name: 'J_STICK', mode: 2, velocity: 0.0}, {joint_name: 'J_TELE', mode: 2, velocity: 0.0}, {joint_name: 'J_EE_PITCH', mode: 2, velocity: 0.0}]}"Maintaining Robot-Agent Docs (Avoid Duplication)
When updating operator docs:
- Update
src/moleworks_ros/docs/robot_agent/ROBOT_OPERATIONS_GUIDE.md(add/modify content there). - Keep
src/moleworks_ros/docs/robot_agent/ROBOT_AGENT_QUICK_REFERENCE.mdas a pointer/alias (do not duplicate content). - Validate commands against the current repo (launch args, topic names, message fields, ROS 2 Jazzy CLI).