c++ - DJI OSDK 通过串口向 DJI Matrice 100 发送命令时的命令延迟
问题描述
我正在尝试使用 OSDK 控制 Matrice 100。我在 M100 上有一个 RPi3,它假设使用滚动/俯仰/z-vel/yawrate 命令控制位置,同时使用 GPS、相机和激光雷达进行定位。
我的问题是,当我从 RPi3 上的 OSDK 发送命令时,从命令通过串行线发送到 M100 有响应,我有 60-80 毫秒的延迟。我通过从 M100 记录 100Hz 的滚动/俯仰/偏航角来检查响应时间。从记录的数据中我可以看到,从我发送命令到角度发生显着变化(我尝试执行 10 度的步骤),存在延迟。
长达 80 毫秒的延迟对于对无人机进行适当的闭环控制来说是非常大的。
从https://developer.dji.com/onboard-sdk/documentation/introduction/onboard-sdk-introduction.html 我了解到,在带有 OSDK 的 M100 上应该可以在 200Hz 上进行低级控制,如果有的话,这没有任何意义是一个 80 毫秒的延迟。
我的代码基于 DJI OSDK 中的示例代码,将闭环控制更改为我自己的控制器。把设置和发送命令的方式是一样的。
感谢您提供任何可以帮助解决此问题或阐明问题所在的意见。
解决方案
好的,首先,如果您在 vicon 房间内飞行并使用 RPI 作为来自 wifi 的基于 vicon 的反馈控制器,那么拥有 80 毫秒并不是那么糟糕。80 毫秒是可以接受的。在 PID 回路中,只需给出更高的预测增益。
其次,对于基于视觉/视觉/激光雷达/激光雷达的导航,我不会使用 RPI,因为 RPI 无法实时处理这些数据。例如。要处理 VINSMONO,您至少需要 TX2 级 CPU 才能以 10 hz 和 100 个特征点处理它而无需闭环。我们正在谈论 100 毫秒的处理延迟。尽管如此,它仍然可以通过正确的 PID 量来控制。这个方法可以从https://www.youtube.com/watch?v=1AbfRENy3OQ&t=4s看到
第三,如果您将其用于轨迹控制。伙计,你已经脱离了你的领域。轨迹控制需要100hz的反馈,需要A星、Dstar算法等流行方法的可控处理速度。这不是 RPI 的设计目的。
推荐阅读
- javascript - 将 Typescript 枚举从字符串转换为数字(角度)
- json - 在 Ruby 中从具有嵌套 JSON 键值对的类创建新实例/对象
- computer-science - 计算机科学专业的学生应该学习可编程逻辑控制器(PLC)吗?
- c# - 无法将类型“UnityEngine.GameObject”隐式转换为“GameObject”
- angular - 如何使用 SystemJS 处理在运行时加载的模块中的外部依赖项?
- c++ - 为什么标准的“abs”功能比我的快?
- azure - Azure 如何将 CLI 中显示的事件从 IoT 获取到数据库
- sql - line_item.value 不是有效的按表达式分组
- server - Jboss7.2 无法获得 Mojarra 的 CDI 1.1 实用程序
- java - 如何在 Java 中连接用于邮件访问 gmail.com 的证书