RVIZ plugin 开发 出现core dump 问题解决

在ROS1的16ubuntu18.04环境中,开发rviz_teleop_commander插件时遇到运行崩溃的问题,原因是CMakeLists.txt中使用了qt4而不是qt5。将qt4相关代码替换为qt5的配置后,问题得到解决,rviz能够正常加载并运行插件。此外,注意plugin_description.xml中类路径和命名空间的正确性,这直接影响插件的加载。
摘要由CSDN通过智能技术生成

问题描述:

系统:虚拟机16 ubuntu18.04 ros1

根据例程(精通ROS机器人编程或古月的书)编写rviz_teleop_commander插件,静态编译通过,运行rosrun rviz rviz 正常打开,加载rviz_teleop_commander rviz 时 rviz直接崩了,终端显示core dump 。

最后发现是Cmakelist中qt版本的问题

将原本的(以下代码复制来自 ROS探索总结(三十四)——rviz plugin - 古月居

当然, CMakeLists.txt文件也必须要加入相应的编译规则:

<span style="color:#000000">## This plugin includes Qt widgets, so we must include Qt like so:
find_package(Qt4 COMPONENTS QtCore QtGui REQUIRED)
include(${QT_USE_FILE})

## I prefer the Qt signals and slots to avoid defining "emit", "slots",
## etc because they can conflict with boost signals, so define QT_NO_KEYWORDS here.
add_definitions(-DQT_NO_KEYWORDS)

## Here we specify which header files need to be run through "moc",
## Qt's meta-object compiler.
qt4_wrap_cpp(MOC_FILES
  src/teleop_pad.h
)</span>

将以上复制关于qt4代码改为以下qt5后 ,运行rviz 并加载插件 正常运行。

find_package(Qt5 REQUIRED Core Widgets)
set(QT_LIBRARIES Qt5::Widgets)
include_directories(${catkin_INCLUDE_DIRS})
add_definitions(-DQT_NO_KEYWORDS)

qt5_wrap_cpp(MOC_FILES
src/teleop_pad.h)

RVIZ plugin插件开发过程中注意问题二:

plugin_description.xml中

<library path="lib/librviz_teleop_commander">  #注意lib后边直接加包名无空格
  <class name="rviz_teleop_commander/TeleopPanel" #注意要和.h文件中的namespace保持一致
         type="rviz_teleop_commander::TeleopPanel"#注意要和.h文件中的namespace保持一致
         base_class_type="rviz::Panel">
    <description>
      A panel widget allowing simple diff-drive style robot base control.
    </description>
  </class>
</library>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值