C++ 通过串行总线从DJI OSDK向DJI Matrice 100发送命令时的命令延迟

C++ 通过串行总线从DJI OSDK向DJI Matrice 100发送命令时的命令延迟,c++,delay,dji-sdk,C++,Delay,Dji Sdk,我正试图用OSDK控制矩阵100。我在M100上有一个RPi3,它可以在使用GPS、相机和激光雷达定位的同时,使用roll/pitch/z-vel/yawrate命令控制位置 我的问题是,当我在RPi3上从OSDK发送命令时,我有60-80毫秒的延迟,因为命令是通过串行线发送的,直到有来自M100的响应。我通过记录M100在100Hz时的横滚/俯仰/偏航角来检查响应时间。从记录的数据中,我可以看出,从我发送命令到角度发生重大变化(我尝试执行10度的步骤)都有延迟 高达80毫秒的延迟是对无人机进行

我正试图用OSDK控制矩阵100。我在M100上有一个RPi3,它可以在使用GPS、相机和激光雷达定位的同时,使用roll/pitch/z-vel/yawrate命令控制位置

我的问题是,当我在RPi3上从OSDK发送命令时,我有60-80毫秒的延迟,因为命令是通过串行线发送的,直到有来自M100的响应。我通过记录M100在100Hz时的横滚/俯仰/偏航角来检查响应时间。从记录的数据中,我可以看出,从我发送命令到角度发生重大变化(我尝试执行10度的步骤)都有延迟

高达80毫秒的延迟是对无人机进行适当闭环控制的一个重要途径

从 我推测,在配备OSDK的M100上,低电平控制应该可以在200Hz下进行,如果存在80ms的延迟,这是没有意义的

我的代码基于DJI OSDK的示例代码,将闭环控制更改为我自己的控制器。把设置和发送命令的方式是相同的


感谢您提供的帮助解决此问题或阐明问题所在的信息。

好的,首先,如果您在vicon房间内飞行,并使用RPI作为wifi上基于vicon的反馈控制器,80毫秒的飞行时间并不是那么糟糕。80毫秒是可以接受的。在PID回路中,只需给出更高的预测增益

其次,对于基于视觉/视觉/激光雷达/激光雷达的导航,我不会使用RPI,因为RPI无法实时处理这些数据。例如要处理VINSMONO,您至少需要TX2级CPU,以10 hz的频率处理100个特征点,而无需闭合环路。我们正在讨论100毫秒的处理延迟。尽管如此,它仍然可以通过正确的PID量进行控制。这种方法可以从下面的例子中看出


第三,如果你用它来控制轨迹。伙计,你真是出类拔萃。轨迹控制需要100Hz的反馈,并且需要可控的处理速度,如star、Dstar算法。这不是设计RPI的目的

好的,首先,如果您在vicon房间内飞行,并使用RPI作为wifi中基于vicon的反馈控制器,那么80毫秒也没那么糟糕。80毫秒是可以接受的。在PID回路中,只需给出更高的预测增益

其次,对于基于视觉/视觉/激光雷达/激光雷达的导航,我不会使用RPI,因为RPI无法实时处理这些数据。例如要处理VINSMONO,您至少需要TX2级CPU,以10 hz的频率处理100个特征点,而无需闭合环路。我们正在讨论100毫秒的处理延迟。尽管如此,它仍然可以通过正确的PID量进行控制。这种方法可以从下面的例子中看出


第三,如果你用它来控制轨迹。伙计,你真是出类拔萃。轨迹控制需要100Hz的反馈,并且需要可控的处理速度,如star、Dstar算法。这不是设计RPI的目的

谢谢你的投入。如果我有10赫兹的定位,如果仍然有80毫秒的延迟,你建议使用什么样的控制?这会像模型预测控制吗?你可以试试MPC。但据我所知。ETH集团的MPC使用更高的输入频率。我不建议你试一下。上次我带着那个MPC软件包飞行时,我遭遇了严重的坠机事故。对于10 HZ,我建议您只尝试简单的基于PID的航路点导航。你能做的最多。为了实现基于PID的轨迹控制,您需要将10hz反馈与IMU融合,以获得更高的反馈率。对于PID控制,您可以仅使用PD启动。将D设置为与80毫秒延迟一致。你应该让它正常工作。谢谢你的投入。如果我有10赫兹的定位,如果仍然有80毫秒的延迟,你建议使用什么样的控制?这会像模型预测控制吗?你可以试试MPC。但据我所知。ETH集团的MPC使用更高的输入频率。我不建议你试一下。上次我带着那个MPC软件包飞行时,我遭遇了严重的坠机事故。对于10 HZ,我建议您只尝试简单的基于PID的航路点导航。你能做的最多。为了实现基于PID的轨迹控制,您需要将10hz反馈与IMU融合,以获得更高的反馈率。对于PID控制,您可以仅使用PD启动。将D设置为与80毫秒延迟一致。你应该让它正常工作。