自己组合了arm和base的urdf后,准备导入model,启动gazebo做仿真,没想到一打开就闪退,但是rviz可以启动,弄了几个小时,网上也没有对应的解决办法,一个个可能的出错点排查。总结一下
报错如下:
log file: /home/will/.ros/log/56999eac-ad93-11eb-8ada-b8ca3a8092a4/urdf_spawner-4*.log
gzclient: /build/ogre-1.9-B6QkmW/ogre-1.9-1.9.0+dfsg1/OgreMain/src/OgreNode.cpp:630: virtual void Ogre::Node::setScale(const Ogre::Vector3&): Assertion `!inScale.isNaN() && "Invalid vector supplied as parameter"' failed.
Aborted (core dumped)
[gazebo_gui-3] process has died [pid 29946, exit code 134, cmd /opt/ros/melodic/lib/gazebo_ros/gzclient __name:=gazebo_gui __log:=/home/will/.ros/log/56999eac-ad93-11eb-8ada-b8ca3a8092a4/gazebo_gui-3.log].
log file: /home/will/.ros/log/56999eac-ad93-11eb-8ada-b8ca3a8092a4/gazebo_gui-3*.log
一顿排查,检查了各个controller和配置,最后发现问题在urdf文件中,
<joint name="UV_joint" type="fixed">
<origin
xyz="0 0 0.189"
rpy="0 0 0" />
<parent link="third_Link"/>
<child link="UV_BASE"/>
</joint>
<link name="UV">
<visual>
<geometry>
<box size="0.0 0.0 0.0 "/> <!-- 问题出在这里 -->
</geometry>
<material
name="">
<color
rgba="0.89804 0.91765 0.92941 1" />
</material>
</visual>
</link>
<joint name="UV_joint2" type="fixed">
<origin
xyz="0 0 0.074"
rpy="0 0 0" />
<parent link="UV_BASE"/>
<child link="UV"/>
</joint>
问题出在上面我在机械臂的end-effector出建了一个长宽高都为0的物体,这在仿真环境中是不存在的,这也是为什么gazebo报错,而Rviz没报错的原因,gazebo是物理仿真环境,不能存在这种体积为0的物体,而Rviz是数据可视化工具,它不存在物理世界中的特性,因为只需要把这部分去掉,就能正常打开model了。
总的来说,这个问题没有一个固定的解决方法,我看别人报同样的错误 ,但错误的原因跟我的完全不同,有的可能是因为点云发布的类型或数量不对,造成的闪退,我这里就是URDF有问题,这里仅提供一些思路,希望对遇到同样报错的人有帮助。
感谢分享error和debug的所有人,分享使我们更加强大!
Reference
- ROS 段错误、核心转储、rviz闪退问题解决:
https://blog.csdn.net/Electrical_IT/article/details/108243193