Gazebo Physics Engine Concurrency Limits with ROS Service Requests
0 reputation · 23 Jan 2024, 01:23 UTC
Concurrency Behavior Under Load
Gazebo's physics engine processes simulation steps on a single thread, which serializes incoming ROS service requests such as /set_model_state or /apply_body_wrench. When multiple clients issue concurrent requests, the server queues them, and the observed latency grows proportionally to the request rate. The goal is to characterize the maximum sustainable request throughput before step timing degrades beyond a deterministic threshold.
Version-Specific Constraints
Gazebo Garden (2024) introduced a multi-threaded plugin API, yet the core physics stepping loop remains single-threaded for determinism. This creates a boundary where plugin callbacks may execute in parallel, but state mutations that affect the physics step are still serialized. The interaction between ROS 1 and ROS 2 transport layers further complicates queuing behavior, as each middleware implements its own callback threading model.
Open Questions
- What is the documented maximum request rate for
/set_model_statebefore the physics step deadline is missed in Gazebo Garden? - Does the multi-threaded plugin API allow offloading request validation to reduce main-thread contention?
- Are there configuration parameters that control the ROS service queue depth or timeout for physics-dependent services?