ROS 2 + LiDAR
Closing the loop from
browser to robot cell
Reference material, and quarantined. The ROS 2 bridge in this repository refuses to move anything — execute_plan and estop raise — because it predates the safety gate. A ROS 2 integration would be a RobotAdapter that passes the contract suite, like the Universal Robots one. None has been written.

scripts/verify_engine_parity.py proves it byte for byte in CI. The ROS 2 node and the LiDAR loop below are reference material; neither has run against hardware, and the bridge refuses to move.ARCHITECTURE
The ROS 2 node wraps the pre-gate PalletiserOrchestrator and the experimental ConstructionPalletOptimizer. Both are outside the supported path: the orchestrator is a quarantined demo and the construction planner is experimental. LiDAR perception is a design intention, not working code.
LiDAR perception layer (reference)
- Point-cloud processing (Open3D)
- Pallet pose estimation on uneven surfaces
- Load-shift detection between picks → safety pause + re-plan
- Floor-flatness mapping for tall stacks
- Fallback to 2D LiDAR / depth camera
ROS 2 integration (reference)
- rclpy node with action servers for long-running missions
- Bridge stubs for common arms and mobile bases (nav2)
- Trajectory / MoveIt goal generation from plans
- Telemetry back to the gateway / on-prem orchestrator
- Safety interlocks tied to perception confidence + stability score
ILLUSTRATIVE USAGE
Target shape of the interface once wired into a ROS 2 workspace. See ros2_integration/README.md for what actually runs today versus what is still stubbed.
# In a ROS 2 workspace, after adding ros2_integration to your build
ros2 run ros2_integration palletizer_construction_node \
--ros-args -p robot_type:=kuka -p use_lidar:=true
# Trigger a plan from any ROS node or WMS bridge
ros2 topic pub /palletizer/command std_msgs/String \
"data: '{\"action\":\"optimize_and_execute\",\"skus\":[{\"sku_id\":\"DRY-4x8-HALF\"}],\"quantities\":[32]}'"ros2_integration/. Digital-twin and managed connectors are on the roadmap, not available today.