起因
好久没有使用ROS相关程序了,突然想运行莫程序发现rviz打不开。仔细定位后发现在终端直接输入rviz也无法打开。
经过
在网上尝试搜索了好几个小时,尝试了以下各种方法,
- 更新3D graphics library
sudo add-apt-repository ppa:ubuntu-x-swat/updates
sudo apt-get update
sudo apt-get dist-upgrade
- 关闭硬件加速
export LIBGL_ALWAYS_SOFTWARE=1
- 删除.rviz文件配置
~/.rviz/*
但是均不适用于我的问题。
结果
尝试使用gdb定位rviz问题所在:
gdb rviz
gdb 先输入命令run
,再输入c进行调试
(gdb) run
Starting program: /opt/ros/noetic/bin/rviz
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fffeda6f700 (LWP 26371)]
[New Thread 0x7fffe7fff700 (LWP 26372)]
[New Thread 0x7fffe77fe700 (LWP 26373)]
(rviz:26367): Gtk-WARNING **: 15:30:00.312: Theme parsing error: gtk.css:1090:0: Expected a valid selector
[New Thread 0x7fffe6f7b700 (LWP 26374)]
[1615908600.350117923]: [${node}] [ INFO] rviz version 1.14.5
[1615908600.350156173]: [${node}] [ INFO] compiled against Qt version 5.12.8
[1615908600.350165195]: [${node}] [ INFO] compiled against OGRE version 1.9.0 (Ghadamon)
[New Thread 0x7fffe5f16700 (LWP 26377)]
[New Thread 0x7fffe5715700 (LWP 26378)]
[New Thread 0x7fffe4f14700 (LWP 26379)]
[New Thread 0x7fffcffff700 (LWP 26380)]
[1615908600.363080641]: [/rviz_1615908600350246943] [ INFO] Forcing OpenGl version 0.
Thread 1 "rviz" received signal SIGSEGV, Segmentation fault.
0x00007ffff7f4f5d8 in rviz::YamlConfigReader::readYamlNode(rviz::Config&, YAML::Node const&) () from /opt/ros/noetic/lib/librviz.so
从结果可以定位到是yaml相关出了问题,检查链接的 yaml 库:
$ ldd /opt/ros/noetic/lib/librviz.so |grep yaml
libyaml-cpp.so.0.6 (libc6,x86-64) => /usr/local/lib/libyaml-cpp.so.0.6
对比正确的链接为
libyaml-cpp.so.0.6 => /lib/x86_64-linux-gnu/libyaml-cpp.so.0.6 (0x00007f4dc6d7c000)
发现是我之前的环境配置参数污染了ros的环境
所以我新建了一个新的环境文件
通过复制原先的bashrc文件,将个人修改的环境配置内容删去,再source新的环境配置文件,即可成功打开rviz。
sudo cp .bashrc .bashrc_ros
echo "export LD_LIBRARY_PATH=/opt/ros/noetic/lib" >> " >> ~/.bashrc_ros
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc_ros
source ~/.bashrc_ros
rviz
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)