Quick example: moving from CPU OpenCV resize to CUDA/NPP and flipping on intra-process comms between rclcpp components dropped our end-to-end latency from about 42 ms to 18 ms on a Jetson Orin, but Cyclone DDS QoS then started starving the planner under load. Has anyone found a clean integration pattern that keeps zero-copy + GPU in the perception path while capping DDS thread usage without forking the executor?
On an Orin I kept zero-copy + NPP but stopped planner starvation by pinning Cyclone DDS recv/xmit threads and lowering their scheduling in the XML, while running the planner in its own executor pinned to different cores. Camera topics best_effort + keep_last(1) kept DDS from flooding, but I left planner topics reliable. Docs for thread affinity/priority are here: https://eclipse-cyclonedds.io/docs/cyclonedds/latest/configuration.html — think of Cyclone as an over-caffeinated waiter, just give it its own aisle.