コード例 #1
0
        public void Write(PointCloudData data, Action completed)
        {
            if (Buffer == null || Buffer.Length != data.Points.Length)
            {
                Buffer = new byte[32 * data.Points.Length];
            }

            int count = 0;

            unsafe
            {
                fixed(byte *ptr = Buffer)
                {
                    int offset = 0;

                    for (int i = 0; i < data.Points.Length; i++)
                    {
                        var point = data.Points[i];
                        if (point == UnityEngine.Vector4.zero)
                        {
                            continue;
                        }

                        var   pos       = new UnityEngine.Vector3(point.x, point.y, point.z);
                        float intensity = point.w;

                        *(UnityEngine.Vector3 *)(ptr + offset) = data.Transform.MultiplyPoint3x4(pos);
                        *(ptr + offset + 16) = (byte)(intensity * 255);

                        offset += 32;
                        count++;
                    }
                }
            }

            var msg = new Ros.PointCloud2()
            {
                header = new Ros.Header()
                {
                    stamp    = Ros2Conversions.Convert(data.Time),
                    frame_id = data.Frame,
                },
                height       = 1,
                width        = (uint)count,
                fields       = PointFields,
                is_bigendian = false,
                point_step   = 32,
                row_step     = (uint)count * 32,
                data         = new PartialByteArray()
                {
                    Array  = Buffer,
                    Length = count * 32,
                },
                is_dense = true,
            };

            Writer.Write(msg, completed);
        }
コード例 #2
0
 public void RegPublisher <DataType, BridgeType>(IBridgePlugin plugin, Func <DataType, BridgeType> converter)
 {
     plugin.AddType <DataType>(Ros2Utils.GetMessageType <BridgeType>());
     plugin.AddPublisherCreator(
         (instance, topic) =>
     {
         var ros2Instance = instance as Ros2BridgeInstance;
         ros2Instance.AddPublisher <BridgeType>(topic);
         var writer = new Ros2Writer <BridgeType>(ros2Instance, topic);
         return(new Publisher <DataType>((data, completed) => writer.Write(converter(data), completed)));
     }
         );
 }