【问题标题】:Sending Kinect Body[] data over MQTT通过 MQTT 发送 Kinect Body[] 数据
【发布时间】:2018-07-16 22:09:29
【问题描述】:

我正在尝试通过 MQTT 发送 Microsoft 的 Kinect v2 身体数据以有效映射骨骼数据,而无需直接连接到 Kinect,但我似乎无法正确反序列化 Body[]。我在 Update() 中的每一帧都发布了一个 Body 列表。

我当前的设置是使用 Newtonsoft 的 JSON.Net 序列化从 Body[] 获取的列表并将其发布到 MQTT(使用 https://github.com/vovacooper/Unity3d_MQTT)。我使用它是因为 Body 类不可序列化(所以我不能使用 JSONUtility?)。

基本上我有:

 void Update() {
     ...
     //trackedBodies is a List<Body> that contains the tracked Bodys
     //client is MQTTClient that is connected
     string bodyData = JsonConvert.SerializeObject(trackedBodies);
     client.Publish("test", System.Text.Encoding.UTF8.GetBytes(bodyData));
     ...
 }

还有:

 void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) {
     //Check MQTT for data, then deserialize
    List<Body> bodyData = JsonConvert.DeserializeObject<List<Body>>(System.Text.Encoding.UTF8.GetString(e.Message));
     Debug.Log(bodyData);
 }

当列表为空时,我可以收到一个空的正文列表。当它非空时,该方法的代码会停止,我根本无法再接收消息。 Update() 方法仍然可以正常工作。

如果有人知道如何帮助我解决我目前拥有的问题,或者提出更好的替代方案来解决我的问题,我将不胜感激。

【问题讨论】:

    标签: c# unity3d json.net mqtt kinect-v2


    【解决方案1】:

    转换为 JSON 的数据可能过多。也许您应该 1) 寻找替代的 JSON 库或 2) 自己对对象进行解码和编码,并且只传输您需要的数据。

    类似:

    void Update() {
    ...
        //trackedBodies is a List<Body> that contains the tracked Bodys
        //client is MQTTClient that is connected
        string bodyData;
        foreach(Body body: trackedBodies)
            bodyData += "|" + body.X + ";" + body.Y + ";" + body.Z;
    
        client.Publish("test", System.Text.Encoding.UTF8.GetBytes(bodyData));
        ...
    }
    

    也可以看看这里:https://www.newtonsoft.com/json/help/html/Performance.htm#ManuallySerialize

    能否请您显示trackedBodies 中的数据类型?

    【讨论】:

    • trackedBodies 是一个包含“身体”的列表。 msdn.microsoft.com/en-us/library/…肯定有很多资料,扫了一眼JSON。我想此时主要感兴趣的属性只是关节(身体的属性)。我想使用 JSONUtility,因为我听说它对 Unity 来说很快,但它需要类是可序列化的。我可以制作一个包含身体信息的伪类,比如关节吗?
    【解决方案2】:

    我看到有些人也可能有同样的问题。我终于为自己找到了一个可行的解决方案。我个人只是通过创建一个自定义的“伪”类来表示 Body 并保存 Joint 和 JointOrientation 数组来公开 Body 对象。通过使用 Json.NET 对它们进行序列化,我能够通过 MQTT 发送这些自定义对象的列表。

    干杯。

    【讨论】:

      猜你喜欢
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 2014-03-20
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多