Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Sending an image to ROS

Discussion in 'Formats & External Tools' started by Hermonirr, Oct 17, 2017.

  1. Hermonirr

    Hermonirr

    Joined:
    Dec 23, 2013
    Posts:
    56
    I'm trying to send an image (Texture2D) to RosBridge running on Ubuntu.
    Simple data types work well - floats, points.

    Here is my code:

    void SendUncompressedImage(Texture2D _image)
    {
    var timeMessage = new TimeMsg(timeSinceStart.Seconds, timeSinceStart.Milliseconds);
    var headerMessage = new HeaderMsg(count, timeMessage, "camera");
    byte[] data = _image.GetRawTextureData();
    string picString = Convert.ToBase64String(data);

    // set format
    string encodingString = "rgb8";

    JSONClass imageJson = CreateImageJsonNode(
    headerMessage, // Header
    (uint)camTexture.width, // width
    (uint)camTexture.height, // height
    encodingString, // encoding
    false, // is_bigendian
    (uint)camTexture.width * (uint)4, // step
    picString); // data


    // public ImageMsg(HeaderMsg header, uint height, uint width, string encoding, bool is_bigendian, uint row_step, byte[] data)
    var imageMsg = new ImageMsg(headerMessage, (uint)camTexture.width, (uint)camTexture.height, encodingString, false, (uint)36, data);
    ros.Publish(ImagePublisher.GetMessageTopic(), imageMsg);
    }


    In ros rqt, I get this error:
    ImageView.callback_image() while trying to convert image from 'rgb8' to 'rgb8' an exception was thrown (Image is wrongly formed: height * step != size or 1 * 36 != 0)

    Thanks for any help.