首页 > 解决方案 > Windows 中的 DJI OSDK

问题描述

我正在尝试让 DJI OSDK 从 Windows 环境中启动并运行,但在此过程中遇到了一些障碍。知道 SDK 已针对 Windows 10 发布,但尚未包括用于 M200 / 600 的 .Net API(我正在尝试接口)。

所以我首先想到让它在Windows上运行的最佳机会是尝试从 Windows 运行一个 linux 示例应用程序(通过 Visual Studio 2017)。一开始与 linux 依赖作斗争,但最终通过编写一个Windows Serial conn类并包括用于 Windows 的 pthread.dll 来解决这个问题(有一些小的额外改动并包括 #if _WIN32 等......)

经过相当多的编码和调试(也通过 VS 工具尝试了 Qt 示例应用程序 - 它自己的整个蠕虫罐头),我仍然在无人机 / RPA 的“Hello world”应用程序中苦苦挣扎。(即使其余的工作在我将其导出到 DLL 并在 c# 环境中实现,但除此之外)。

连接到平台后(基本上是初始化和串口打开),Activate 函数将您的应用 ID + 密钥发送到 RPA 并收到确认:这是我的代码:

    bool threadSupport = true;  //disable first so that able to debug
    vehicle = new Vehicle(Port, baud, threadSupport, AdvancedSensing);

    //test if connection works fine
    if (!vehicle->protocolLayer->getDriver()->getDeviceStatus())
    {
        //not working, delete current instances
        delete (vehicle);
        vehicle = nullptr;  //set back to null pointer
    }

    DJI::OSDK::Vehicle::ActivateData actData;
    actData.ID = appID;
    actData.encKey = new char[65];
    strcpy(actData.encKey, key);
    actData.version = getFWVersion();

    ACK::ErrorCode ack = vehicle->activate(&actData, 1);

激活函数返回“无效反馈”:

STATUS/1 @ DJI::OSDK::Win_serial_device::init, L47: 尝试以波特率 230400 打开设备 COM21...

STATUS/1 @ DJI::OSDK::Win_serial_device::init, L75: ...串口启动成功。

ERRORLOG/1 @getDroneVersion,L1378:未获得无人机版本!请不要继续。可能原因: 串口连接:

  • SDK 未启用,请查看 DJI Assistant2 SDK -> [v] 启用 API 控制。

  • 波特率不正确,请从 DJI Assistant2 -> SDK -> 波特率仔细检查。

  • TX 和 RX 引脚是反相的。

  • 串口被另一个程序占用。* 需要许可。请执行“sudo usermod -a -G dialout $USER”(您不需要将 $USER 替换为您的用户名)。然后注销并再次登录

ERRORLOG/1 @activate,L1267:无法初始化某些车辆组件!STATUS/1 @ getErrorCodeMessage,L656:激活 STATUS/1 @ getCommonErrorCodeMessage,L722:ACK_NO_RESPONSE_ERROR

...已经检查了建议的问题,但无法找到任何明显的问题。此时不知道问题是硬件还是软件(代码和线程更改)。如果有人拥有 DJI 平台(M-range),或者在 DJI dev 上。团队可以帮忙吗?我迫不及待地想让这个工作!:(

我还在 Github DJI OSDK Win Console上分享了代码解决方案

标签: c++windowsdji-sdk

解决方案


嗨,我和盛海一直在为基于非 GPS/LIDAR/视觉的自主研究运行 DJI 硬件 3 年。

这是 DJI 不会告诉您完整列表的典型问题。这是我想出的清单

(1) 先连接API线。然后运行 ​​OSDK。然后连接模拟器电缆然后运行 ​​DJI 助手。大疆觉得没有义务分享适当的序列狗屎。

(2) 确保您的电缆是 3.3,而不是 5

(3) Tx Rx 交换。常见问题。可以通过realterm检查

(4) 确保您的 DJI go 应用程序正在运行并且控制器已上电 b4 开始串行连接

(5) 确保app id 和enc key 正确。并且这个 id 和 key 关联的帐户也在你的平板电脑中运行。对于一些特殊的无罗盘固件,我们会遇到这个问题,如果你和 DJI 有密切的关系,他们会给你提供很多东西来测试。

(6) 确保您的序列号具有权限。在 ubuntu 中是 sudo chmod a+rw /dev/serial/by-id/usb-XXmanufactoridXX-port0。窗户忘记了。好多年没用了

(7) 确保您的 API 在 DJI 助手中启用。此外,为了快速检查、断开连接并连接到助手,请确保仍然检查 API。我们对此有不好的体验。无论我检查多少次,它都取消选中。我们花了一段时间才找到错误

(8) 确保您正在运行当前的助手 2。矩阵应为 DJI 矩阵助手。对于不同的无人机,有不同的版本。我知道它的复杂性。不知道他们为什么这样做。

(9) 确保您的 OSDK 构建完整且功能正常。没有缺少依赖或有趣的错误。新的 3.7 和 3.8 立体视觉系统经常发生这种情况

到目前为止,我能想到的几乎就是这些了。


推荐阅读