Windows中的DJI OSDK

时间:2019-01-23 17:23:59

标签: c++ windows dji-sdk

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

因此,我首先想出了使它在 Windows 上运行的最佳机会,是尝试从Windows运行Windows示例应用程序(通过Visual Studio 2017)。起初与Linux依赖关系纠缠不清,但最终通过编写 Windows Serial conn 类并包括用于Windows的 pthread.dll 来弄清了这一点(进行了一些小的附加改动,并包含了#if _WIN32等...)

经过大量的编码和调试(也通过VS工具尝试了Qt示例应用程序-蠕虫本身就是一整罐),我仍然在无人机/ RPA上使用“ Hello world”应用程序。 (即使其余的工作都可以在我将其导出到DLL并在c#环境中实现的情况下进行,但除此之外)。

连接到平台后(基本上是初始化和串行端口打开),激活功能会将您的应用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-> baudrate中进行确认。

  •   
  • TX和RX引脚反相。

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

  •   
     

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

...已经检查了建议的问题,但看不到任何明显的问题。在这一点上,不知道问题是否出在硬件,软件(具有更改的代码和线程)上。如果有人使用DJI平台(M系列)或DJI开发人员。团队可以帮忙吗?我很想让这个工作! :(

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

1 个答案:

答案 0 :(得分:0)

嗨,我和我的海生博士已经运行DJI硬件三年,用于基于非GPS / LIDAR / Vision的自主研究。

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

(1)首先连接API电缆。然后运行OSDK。然后连接模拟器电缆,然后运行DJI Assistant。 DJI认为没有必要共享适当的序列垃圾。

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

(3)Tx Rx交换。常见问题。可以实时检查

(4)确保DJI go应用正在运行且控制器已开机b4 开始串行连接

(5)确保应用程序ID和Enc密钥正确。与该ID和密钥关联的帐户也在您的平板电脑中运行。对于某些特殊的无指南针固件,我们会遇到此问题,如果您与DJI有着密切的关系,它们将为您提供很多测试条件。

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

(7)确保已在DJI Assistant中启用了API。另外,为了进行快速检查,请断开连接并连接到助手,确保仍检查API。我们对此有不好的经验。无论我检查多少次,都取消检查。花了我们一段时间才能发现错误

(8)确保正在运行当前的Assistant2。对于matrix,应为Matrix的DJI Assistant。对于不同的无人机,有不同的版本。我知道它的复杂性。不知道为什么要这么做。

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

到目前为止,这几乎是我能想到的全部。