psdk正常连接到遥控器,msdk中为什么只获取到飞机型号,不能获取到负载
Completedmsdk4.16.3,
负载psdk3.2
,在pilot2上明明看到psdk负载连接上了,
为什么跑msdk的demo,PayloadSendGetDataActivity页面,
也调用了DJISDKManager.getInstance().registerApp();和DJISDKManager.getInstance().startConnectionToProduct();
onProductConnect(BaseProduct baseProduct)也回调了,
为什么只获取到飞机型号,不能获取到负载,
ModuleVerificationUtil.isPayloadAvailable() == false,payload = DJISampleApplication.getAircraftInstance().getPayload();payload == null;
payload对象始终为null。
-
我想问问这些代码怎么理解?为什么getPayload()直接返回null?负载属于Component?还是属于Product?判断负载是否可用,为什么要判断isAircraft()?负载属于飞机类型?
if (ModuleVerificationUtil.isPayloadAvailable()) {
payload = DJISampleApplication.getAircraftInstance().getPayload();/**
* Gets the product name defined by the manufacturer of the payload device.
*/
payloadName = payload.getPayloadProductName();
payloadNameView.setText("Payload Name:" + (TextUtils.isEmpty(payloadName) ? "N/A" : payloadName));
payloadNameView.invalidate();
public static boolean isPayloadAvailable() {
return isProductModuleAvailable() && isAircraft() && (null != DJISampleApplication.getAircraftInstance()
.getPayload());
}
public Payload getPayload() {
return null;
}public synchronized List<Payload> getPayloads() {
return null;
} -
1.为什么getPayload()直接返回null? -->因为M300有两个通信端口,一个OSDK端口,也就是在机身上方的端口;另一个是PSDK端口,也就是云台端口。虽然在PSDK V3将功能整合在一起了,但是在M300上要实现控制功能还是需要在OSDK端口,实现负载功能需要在PSDK端口。正是因为这个原因,如果你PSDK开发的设备使用的是OSDK端口,那么MSDK就不会将其识别为payload,此时payload就会为null。payload识别的是使用了PSDK端口的负载。 在了解了两个端口的不同之后,你使用的是哪一个呢? 如果是OSDK端口,MSDK与连接OSDK端口的设备通信可以查看这篇文章:MSDK如何发送和接收OSDK的数据? MOP功能可以参考这篇文章:MOP功能介绍 如果是PSDK端口,我们会测试一下。 2.负载属于Component?还是属于Product? -->payload是Component的子类. 3.判断负载是否可用,为什么要判断isAircraft()?负载属于飞机类型? -->因为需要从product对象上读取到payload,aircraft是product的子类。另一方,如果飞机对象为null,那么表明没有识别到飞机,负载是依赖于飞机的组件,飞机无法使用,负载也是无法使用的。 -
云台口不用SkyPort V2,直接用type-c接口接到负载上可以给负载供电和通讯吗?SkyPort V2是里面有转换电路? -->需要使用DJI的转接环,skyport,X-PORT等是接入DJI云台接口的标准接口,是PSDK负载必须的配件。 基于stm32f4的负载可以用云台口吗 -->可以。PSDK负载需要有自己的CPU/MCU,且可以支持PSDK lib。 M300下方有3个云台口,上方有1个云台口,这些云台口是可以同时接4个psdk负载还是同时只能用一个? -->下方应该是只有两个云台口。挂载几个负载可以参考这篇文章:同一台无人机,最多可以挂几个PSDK负载? 是不是要想使用高速的自定义数据传输功能,必须使用psdk云台口,负载得使用网络?用OSDK扩展口,即使这个接口有USB,但不管负载是rtos还是linux,都只能用低速数据通道 -->是通过虚拟网口来实现高速数据通道。高速数据通道是云台负载与移动端APP之间才有的数据传输通道。你可以查看官网的数据传输介绍:https://developer.dji.com/doc/payload-sdk-tutorial/cn/function-set/basic-function/data-transmission.html#%E9%80%9A%E9%81%93%E7%9A%84%E5%88%86%E7%B1%BB 知识库文章:在PSDK的应用中,如果不用网口功能,对应用会有什么影响 M300机型,osdk口接Linux的负载,能用互联互通功能?还是M300互联互通功能条件,1Linux系统,2有网口,3接psdk云台口? -->OSDK端口(使用OSDK功能)也可以使用互联互通功能。SDK互联互通功能也就是MOP,就是M/O/PSDK之间通信的功能。与MSDK通信的方法就是我之前回复里提到的知识库文章。使用OSDK口的设备不会被识别成payload,但是在flightcontroller类可以获取到pipeline和OSDK传输的数据。 ----> MSDK与连接OSDK端口的设备通信可以查看这篇文章:MSDK如何发送和接收OSDK的数据? MOP功能可以参考这篇文章:MOP功能介绍 -
SkyPort V2接口里面没有USB吧?-- 对。 是真实的网络,不是虚拟网络吧?lan_txp,lan_txn,lan_rxp,lan_rxn,这些脚位是连接网络接口的吧? -- 对的,高速数据通道使用的是网口:在PSDK的应用中,如果不用网口功能,对应用会有什么影响 M30的接口是psdk,它的接口是USB虚拟网络来传输高速数据?-- M30上是通过USB RNDIS虚拟网口进行推流数据传输:M30/T机型PSDK负载设备硬件连接 ![](https://djisdksupport.zendesk.com/attachments/token/mWqGA8d3WsYLy79hkaN6BmJDi/?name=image.png)
Please sign in to leave a comment.
Comments
14 comments