ROS - rviz
完整报错:
rviz: OgreAxisAlignedBox.h:252:void Ogre::AxisAlignedBox::setExtents(const Ogre::Vector3&, const Ogre
::Vector3&): 假设(min.x <= max.x && min.y <= max.y && min.z <= max.z) && “The minimum corner of the box must be less than or equal to maximum corner”’ 失败
先看看报错的内容。
3D引擎包括Qt3D、osg、ogre,rviz的3d引擎是ogre。OgreAxisAlignedBox.h中的部分内容:
// 省略
/** Sets both minimum and maximum extents at once.
*/
inline void setExtents( const Vector3& min, const Vector3& max )
{
assert( (min.x <= max.x && min.y <= max.y && min.z <= max.z) &&
"The minimum corner of the box must be less than or equal to maximum corner" );
mExtent = EXTENT_FINITE;
mMinimum = min;
mMaximum = max;
}
但是不知道在哪里有调用。
针对"The minimum corner of the box must be less than or equal to maximum corner",参考链接:
The most common causes are:
– dividing by zero
– calling acos or asin with a number bigger than 1.0 or less than -1.0 (even a fraction outside that range is fatal. 1.0000001 will cause NANs)
The acos/asin stuff can be fixed by calling Ogre’s Math::ACos or Math::ASin instead, they protect against bad values.
导致问题的可能原因:除以0、acos或asin了1/-1附近的值。
但是程序中没找到除法运算和asin/acos。
考虑可能是未满足假设(min.x <= max.x && min.y <= max.y && min.z <= max.z)。因为不清楚这里的x/y/z是什么含义,所以只能凭感觉试试了。
在rviz界面上勾选了PointCloud2的Autocompute Intensity选项后,第一次运行时好像没有出现因为这个报错中止运行的情况。但是第二次再试又报错中止了,事实证明没有用。
观察到每次运行时数据是一样的,但是中止的时刻都不同,可能与程序本身无关?
在官方网站上找到与某种错误的解决方法如下(问题不完全一样,病急乱投医了)。
当您尝试启动RViz时,有时可能会看到错误。 这可能是严重的“Segmentation Fault”,也可能是有关“Bad Drawable”的错误。这是在某些显卡上使用RViz时错误的症状,您可以尝试两种解决方法。
- 首先,您可以尝试将环境变量OGRE_RTT_MODE设置为以下三个字符串之一:Copy,PBuffer或FBO。 此设置更改了如何渲染窗口的一些内部细节。 根据您的配置,使用其中一种选择可能会比其他选择获得更好的成功。
- 其次,由于问题是间歇性的,您可以简单地尝试一次又一次启动RViz,直到成功为止。 最好的方法是使用启动文件,并在RViz的节点标记中包含respawn =“ true”。
事实证明两种方法都无效。
有使用gazebo功能包出现类似问题的情况:
1 . To answer my own question, from an answer from my question on ros-answers: the origin elements of the inertial element in the links were not set properly in the urdf
When setting them the same as the collision and visual elements everything works properly.
(urdf对于没有用到link标签的情况需要设置吗。。)
2 . 评论最下方有人遇到基本上同样的报错,但是没有解决。
终于解决了!
报错的原因在于超出范围访问,要检查程序中是否有不合法的数据,或实际传输数据少于预期的数据。