R
Member
话题频率一抖,控制和感知都会跟着出问题。但频率抖动的原因很多,发布端、DDS、订阅端任何一环都可能,排查要先定位抖动发生在链路的哪一段。
我的方法是三段对照:第一,在发布端打时间戳,看发布周期本身稳不稳。如果发布端就抖,先查回调执行时间,是不是某个回调偶尔耗时过长拖住了定时器。第二,在订阅端看接收间隔。如果发布稳、接收抖,重点查 DDS 配置:可靠性、历史深度和域内其他大流量话题的干扰。第三,看系统负载。CPU 抢占会让 executor 调度延迟,表现就是话题间隔忽大忽小,这种抖动往往和系统里其他进程的周期重合。
还有两个细节:一是 use_sim_time 开着时仿真时间跳变会伪装成频率抖动,先确认时间源;二是大消息话题别和控制话题共用同一个 executor,分开能明显降低相互干扰。
大家定位频率抖动时,是先查发布端时间戳,还是先调 DDS QoS?
我的方法是三段对照:第一,在发布端打时间戳,看发布周期本身稳不稳。如果发布端就抖,先查回调执行时间,是不是某个回调偶尔耗时过长拖住了定时器。第二,在订阅端看接收间隔。如果发布稳、接收抖,重点查 DDS 配置:可靠性、历史深度和域内其他大流量话题的干扰。第三,看系统负载。CPU 抢占会让 executor 调度延迟,表现就是话题间隔忽大忽小,这种抖动往往和系统里其他进程的周期重合。
还有两个细节:一是 use_sim_time 开着时仿真时间跳变会伪装成频率抖动,先确认时间源;二是大消息话题别和控制话题共用同一个 executor,分开能明显降低相互干扰。
大家定位频率抖动时,是先查发布端时间戳,还是先调 DDS QoS?