在使用DJI OSDK ROS 的基础上进行应用开发时,遇到一个问题,当无人机飞离地面90米左右时,在采用waitForMessage获取最新的RTK_POSITION_AND_DRONE_YAW topic 时,偶发性的出现超时的问题。
问题出现的环境:
1. 系统 DJI M300 + Livox (IP: 192.168.1.3) + Xavier (IP: 192.168.1.10)
2. WIFI router 提供局域网 连接Xavier 和 地面 Laptop进行通讯。
3. Xavier上运行Docker来启动所有的ROS 服务,并通过Laptop来出发服务来launch 任务, 或者landing结束任务。
问题出现的现象:
1. 问题是偶发的,一担发生就很容易重现,需要换一个环境,在wifi干扰小的地方,或许可以正常工作。
2. RTK_POSITION_AND_DRONE_YAW topic 的publish是正常的,从rosbag play 来看,数据是正常发布的。
3. 就是在飞机飞离router大约90m距离时,waitForMessage段 3秒钟读取超时,获取数据失败。
4. 问题发生时,Livox node 的cpu占用率达到200%占用两个核。
5. waitForMessage为了确保获得的数据是在调用时刻,刚发布的数据数据,因此,每次调用,都会重新建立一次数据的订阅subscribe,在获得数据后,调用unsubscribe取消订阅。 详细描述如下(