ModalAI Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    TOF Depth Image Encoding changed from 32FC1 to mono8

    Ask your questions right here!
    2
    3
    234
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      jaredjohansen
      last edited by

      I have a TOF sensor.

      A little while ago, to see the depth image, I would rostopic echo /tof/depth. When I did that, the ROS message would be of the type sensor_imgs/Image and its encoding would be 32FC1.

      Today, with the latest code, I need to use rostopic echo /mpa/tof_depth to get the depth image. When I do that, the ROS message is still of the type sensor_imgs/Image but its encoding is mono8.

      Historically, if I wanted to process the depth image in ROS, I would setup a subscriber and use code like that shown below to ingest the data as a depth image. I could then access individual pixels to get the depth (in meters).

      I'm now sure how to process a depth image of encoding mono8. It seems like it would have too few bits to represent the resolution of depths possible.

      Is the mono8 encoding intentional (with the conversion to the latest mpa_to_ros)? Or is it a bug?

      If it's intentional, can you help me understand how to process this new data encoding and extract the distances of individual pixels (similar to the code posted below)?

              # get the depth image
              dep_frame = np.fromstring(tof_depth.data, dtype=np.single)
              dep_frame = dep_frame.reshape(172, 224) 
      
              # Get closest value in bounding box
              object_depth_map = dep_frame[top:bottom,left:right]
              object_depth_map[object_depth_map == 0] = 9999.00
              object_depth = np.min(object_depth_map)
      
      1 Reply Last reply Reply Quote 0
      • ?
        A Former User
        last edited by

        MPA_to_ROS was recently updated to a new architecture, the depth image that we publish was meant to be more of a debug tool where the z value of the pointcloud is scaled from 0-255 for 0-1 meter distance, but it looks like the old mpa to ros instead published the z value of the sensor, which is floating point. To get the same old value that you were looking at, you should access the pointcloud tof message and look at the z value.

        1 Reply Last reply Reply Quote 0
        • J
          jaredjohansen
          last edited by

          For anyone who runs into this same issue, I changed my subscriber to listen to /map/tof_pc (which has the PointCloud2 type). My code (to extract the z value) is this:

          # get the depth image
                  dep_frame = np.fromstring(data.data, dtype=np.single) # get numpy array
                  dep_frame = dep_frame.reshape(172, 224, 3)[:,:,2]
          
          1 Reply Last reply Reply Quote 0
          • First post
            Last post
          Powered by NodeBB | Contributors