Core software layers

A practical stack usually contains messaging and lifecycle management at the middleware layer, motion planning and collision reasoning above it, then simulation and logging infrastructure for pre-deployment testing. ROS 2 provides the communication primitives; MoveIt provides planning and manipulation abstractions.

Evaluation is not optional

For any embodied system that operates under uncertainty, evaluation should cover distribution shift, partial observability, and long-horizon task execution. A simple metric decomposition is often useful:

$$\text{score} = \alpha \cdot \text{task success} + \beta \cdot \text{safety compliance} + \gamma \cdot \text{latency penalty}. $$

This is not a universal formula, but it forces explicit trade-offs. A useful pipeline records failures by category: perception, planning, control, execution, and recovery.

Minimal workflow sketch

A small but practical workflow couples reproducible launch files with planning interfaces and synchronized logging:

# Example workflow sketch
ros2 launch robot_bringup sim.launch.py
ros2 launch moveit_config demo.launch.py
ros2 bag record /tf /joint_states /camera/image_raw /planner/metrics

The point is not the exact command list. It is the engineering principle: reproducible system traces, scenario-based evaluation, and evidence that a controller works outside the nominal path.