Condition (scan3dMsg.data.size() == scan3dMsg.row_step*scan3dMsg.height) not met!

classic Classic list List threaded Threaded
11 messages Options
Reply | Threaded
Open this post in threaded view
|

Condition (scan3dMsg.data.size() == scan3dMsg.row_step*scan3dMsg.height) not met!

Mikor
Hello Mathieu,

I have a strange issue playing a bag file. As the bag plays i get the following error:

[FATAL] (2021-05-01 17:02:36.601) MsgConversion.cpp:2198::convertScan3dMsg() Condition (scan3dMsg.data.size() == scan3dMsg.row_step*scan3dMsg.height) not met! [data=314314 row_step=0 height=1]
terminate called after throwing an instance of 'UException'
  what():  [FATAL] (2021-05-01 17:02:36.601) MsgConversion.cpp:2198::convertScan3dMsg() Condition (scan3dMsg.data.size() == scan3dMsg.row_step*scan3dMsg.height) not met! [data=314314 row_step=0 height=1]

The thing is that I didn't have this problem before with this bag file, any ideas ? Please help, I can not find any relevant info!

Thanks in advance.
Reply | Threaded
Open this post in threaded view
|

Re: Condition (scan3dMsg.data.size() == scan3dMsg.row_step*scan3dMsg.height) not met!

matlabbe
Administrator
This post was updated on .
Hi Mikor,

It looks like your PointCloud2 msg has missing "row_step". This assert has been added recently to avoid strange seg faults down the line when converting PointCloud2 (example here). Depending on the filtering algorithm used, row_step may not be used, so it is why the bag may have worked before without that check. You may filter that bag to fix the row_step. A script similar to this could be used to modify your PointCloud2 topic.

cheers,
Mathieu
Reply | Threaded
Open this post in threaded view
|

Re: Condition (scan3dMsg.data.size() == scan3dMsg.row_step*scan3dMsg.height) not met!

Mikor
Hi Mathieu,

Thanks for the fast answer! It seems that every bag I recorded with the topics coming from the  velodyne_pointcloud package have "row_step" set to 0, I do not know if I can change that in order to publish it the suitable value but thanks again!!
Reply | Threaded
Open this post in threaded view
|

Re: Condition (scan3dMsg.data.size() == scan3dMsg.row_step*scan3dMsg.height) not met!

matlabbe
Administrator
It looks like it should set row_step here: https://github.com/ros-drivers/velodyne/blob/7c2f199f552ecb9f58a3c30734681042b1b99f82/velodyne_pointcloud/include/velodyne_pointcloud/datacontainerbase.h#L70, if init_width and offset are not null.

You may check why velodyne_pointcloud is publishing row_step=0. Another patch could be to comment the assert in rtabmap code if you built from source, though I would prefer fixing the problem upstream.

To recover your rosbag without changing rtabmap code, use the rosbag api like in my example to fix the row_step. The row_step is simply width*point_step (assuming point_step is not null too).

cheers
Reply | Threaded
Open this post in threaded view
|

Re: Condition (scan3dMsg.data.size() == scan3dMsg.row_step*scan3dMsg.height) not met!

matlabbe
Administrator
If someone has the same error, make sure you have this commit on velodyne package: https://github.com/ros-drivers/velodyne/commit/3817b357df0033ff1faa67578217e6494ff47cb9
Reply | Threaded
Open this post in threaded view
|

Re: Condition (scan3dMsg.data.size() == scan3dMsg.row_step*scan3dMsg.height) not met!

Masoumeh
In reply to this post by matlabbe
i have checked all the line mentioned about assert, in all the cpp files, they were the same as the one which you mentioned(the lines which should be added)
Reply | Threaded
Open this post in threaded view
|

Re: Condition (scan3dMsg.data.size() == scan3dMsg.row_step*scan3dMsg.height) not met!

Masoumeh
In reply to this post by matlabbe
Dear Mattieu,

the velodyne pakage that i use is thios one: velodyne.gz

this package is for ROS1 that unfortunately shows the error of row_step=0. I cannnot fine a velodyne package properly for ROS1. would you please help me?
thanks
Reply | Threaded
Open this post in threaded view
|

Re: Condition (scan3dMsg.data.size() == scan3dMsg.row_step*scan3dMsg.height) not met!

matlabbe
Administrator
Please use references to github, in a zip we cannot know what is the reveision version of the package. The master branch of https://github.com/ros-drivers/velodyne is ROS1, not sure which velodyne repo you are using.
Reply | Threaded
Open this post in threaded view
|

Re: Condition (scan3dMsg.data.size() == scan3dMsg.row_step*scan3dMsg.height) not met!

Masoumeh
Dear Mattieu,

I dowinloaded the one that you mentioned in github. and put it inside the robot and did catkin_make. then i started recording data, but again it shows row_step=0.
I am working with Velodyne LiDAR’s ULTRA Puck VLP-32C.

Ros kinetic, 16.04
Python 2.7.12
Reply | Threaded
Open this post in threaded view
|

Re: Condition (scan3dMsg.data.size() == scan3dMsg.row_step*scan3dMsg.height) not met!

matlabbe
Administrator
I would suggest to add some ROS_ERROR around where the row_step should be set like in the patch, and see what are the values you get.
https://github.com/ros-drivers/velodyne/commit/3817b357df0033ff1faa67578217e6494ff47cb9#diff-e80f6e84dc02198e8db25fbfd453facf144d51b5ab16131d04648d51f30dfee3R122

I cannot help more for that, the line is there...
Reply | Threaded
Open this post in threaded view
|

Re: Condition (scan3dMsg.data.size() == scan3dMsg.row_step*scan3dMsg.height) not met!

Masoumeh
Dear Mattieu,

finally it worked. although I have did a number of times (modifying row_step file) and put it inside the robot. yesterday, one more time i tested it again, and hopefully it worked.

thanks a lot for your patience and kind support
Masoumeh