在Qt Widget中嵌入rViz时rviz/Orbit类加载失败求助
解决Qt5嵌入rViz时"rviz/Orbit"插件加载失败问题
问题现象
Qt5 Widget嵌入rViz界面后程序可运行,但rViz抛出错误:
所需的视图控制器类‘rviz/Orbit’无法加载。
错误:
找不到与插件rviz/Orbit对应的库,请确保插件描述XML文件中的库名称正确且库实际存在。
终端执行rosrun rviz rviz运行正常,说明问题出在Qt项目的链接或环境配置环节。
排查与解决方案
1. 补充链接rviz默认插件库
rViz的Orbit视图控制器属于rviz_default_plugins包,你的Qt项目.pro文件中缺少对该库的链接。在LIBS配置段添加:
LIBS += -L/opt/ros/$$(ROS_DISTRO)/lib -lrviz_default_plugins
2. 修正rViz配置文件路径
代码中initialize方法的路径缺少开头斜杠,会导致加载相对路径的配置文件,间接引发插件加载异常:
// 原代码 rviz_frame_->initialize("opt/ros/melodic/share/rviz/default.rviz"); // 修改为绝对路径 rviz_frame_->initialize("/opt/ros/melodic/share/rviz/default.rviz");
3. 确保ROS环境初始化与插件路径正确
rViz依赖ROS插件系统,需满足两个前提:
- 在创建
VisualizationFrame前调用ros::init初始化ROS节点:ros::init(argc, argv, "your_qt_rviz_node"); // 替换为自定义节点名 rviz::VisualizationFrame *rviz_frame_ = new rviz::VisualizationFrame(); - 运行程序前source ROS环境(如
source /opt/ros/melodic/setup.bash),确保LD_LIBRARY_PATH和ROS_PACKAGE_PATH包含rViz相关库与包路径。若无法提前source,可在代码中设置环境变量:setenv("LD_LIBRARY_PATH", "/opt/ros/melodic/lib:$LD_LIBRARY_PATH", 1); setenv("ROS_PACKAGE_PATH", "/opt/ros/melodic/share:$ROS_PACKAGE_PATH", 1);
4. 验证库文件存在性
通过以下命令确认rviz_default_plugins库文件正常:
ls /opt/ros/melodic/lib/librviz_default_plugins.so
若文件存在,只需确保链接与环境配置正确即可。
内容的提问来源于stack exchange,提问作者Mirco Vangi
相关产品推荐
相关产品推荐

