This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/IWR1642BOOST:包含类错误的 TI_rospackage

Guru**** 2564410 points
Other Parts Discussed in Thread: IWR1642

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/639375/compiler-iwr1642boost-ti_rospackage-including-class-errors

器件型号:IWR1642BOOST
主题中讨论的其他器件:IWR1642

工具/软件:TI C/C++编译器

您好!

我正在使用 ti_mmwave_rospkg、检索检测到的物体的 x、y、z 位置可以正常工作。 我想在 ROS 软件包中添加一个类、并在 mmWaveQuickConfig.cpp 文件中运行类方法。 运行 catkin_make 时、我不断收到下面粘贴的错误。 当我尝试包括 DataHandlerClass.h 并创建如下所示的新 DataHandler 时,也会出现相同的错误:

/*
mmWaveQuickConfig.cpp
*
//

#include "ROS/ROS.h"
#include "ti_mmwave_rospkg/mmWaveCLI.h"
#include 
#include 
#include 
#include 
#include "DataHandlerClass.h"

int main (int argc、char ** argv)
{
ROS:::init (argc、argv、"mmWaveQuickConfig");
if (argc!= 2)
{
ROS_INFO ("mmWaveQuickConfig:用法:mmWaveQuickConfig /file_directory/params.cfg");
返回1;
}
否则
{
ROS_INFO ("mmWaveQuickConfig:使用配置文件配置毫米波器件:%s"、argv[1]);
}

ROS::NodeHandle n;
ROS:::ServiceClient 客户端= n.serviceClient ("/mmWaveCommSrv/mmWaveCLI);
ti_mmwave_rospkg::mmWaveCLI srv;
std:::ifstream myParams;

DataUARTHandler newHandler (&n);

(笑声)

我遇到的错误包括:
/home/joe/catkin_wsMA/build/ti_mmwave_rospkg/devel/lib/libmmwave.so:-1:错误:未定义对`类加载<char, std::char_traits 程序的引用:类加载程序私有::抽象元对象库::抽象元对象库(std:_cxx11:基本工具 ,std::分配器 > const&、std:_cxx11::基础版<char, std::char_traits ,std::分配器 > const&)'
/home/joe/catkin_wsMA/build/ti_mmwave_rospkg/devel/lib/libmmwave.so:-1:`:未定义对"nodelet::Nodelet::Nodelet::Nodelet()"的引用
/home/joe/catkin_wsMA/build/ti_mmwave_rospkg/devel/lib/libmmwave.so:-1:`:未定义对"nodelet::Nodelet:::getPrivateNodeHandle() const"的引用
(笑声)
以及一些其他类加载器错误


我不确定是什么问题。 包括 DataHandlerClass.h 头文件并在 mmWaveLoader.cpp 中初始化新的 DataUARTHandler 不会产生任何编译错误。 是否有关于如何在包含主方法的两个文件中使用该类的建议?

我们非常感谢您的任何帮助。

RYEN

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉、我不打算将问题的其余部分添加到代码段的底部行。 此外、标签不是专门设计的、我必须用粗体形式对代码片段进行编码。 下面是我的问题的剩余部分。

    我遇到的错误包括:
    /home/joe/catkin_wsMA/build/ti_mmwave_rospkg/devel/lib/libmmwave.so:-1:错误:未定义对`类加载<char, std::char_traits 程序的引用:类加载程序私有::抽象元对象库::抽象元对象库(std:_cxx11:基本工具 ,std::分配器 > const&、std:_cxx11::基础版<char, std::char_traits ,std::分配器 > const&)'
    /home/joe/catkin_wsMA/build/ti_mmwave_rospkg/devel/lib/libmmwave.so:-1:`:未定义对"nodelet::Nodelet::Nodelet::Nodelet()"的引用
    /home/joe/catkin_wsMA/build/ti_mmwave_rospkg/devel/lib/libmmwave.so:-1:`:未定义对"nodelet::Nodelet:::getPrivateNodeHandle() const"的引用
    以及更多的类加载程序错误

    我不确定是什么问题。 包括 DataHandlerClass.h 头文件并在 mmWaveLoader.cpp 中初始化新的 DataUARTHandler 不会产生任何编译错误。 是否有关于如何在包含主方法的两个文件中使用该类的建议?

    我们非常感谢您的任何帮助。

    RYEN
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RYEN、

    感谢您关注 TI IWR1642毫米波雷达传感器。 我很乐意提供帮助。

    使用 TI 毫米波 ROS 驱动程序包的最简单方法是使用提供的"ti_mmwave_sensor.launch"启动文件启动 ti_mmwave_rospkg 节点。 对于 IWR1642、"rviz_1642_2d.launch"启动文件是一个很好的示例、说明了如何使用所需的器件参数调用"ti_mmwave_sensor.launch"启动文件。 然后、您可以通过订阅"/mmWaveDataHdl/RScan "主题、在您自己的自定义节点中处理输出数据、这与在 Rviz 中对数据进行可视化的方式类似。

    就您在自定义代码中看到的构建错误而言、可能是由于缺少头文件 include 造成的。 例如、在"mmWaveDataHdl.CPP"驱动程序源文件中、DataUARTHandler 类通常被实例化、文件顶部包括"DataHandlerClass.h"和"mmWaveDataHdl.HPP"。 您似乎已经包含"DataHandlerClass.h"、但您可能缺少"mmWaveDataHdl.HPP"中的包含内容(包括 等)。

    如果问题得到解决、请将其标记为已回答;如果需要更多支持、请使用更多详细信息进行回复。

    此致、
    John
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    John、

    感谢你的答复。 很抱歉、我认为我对我遇到的编译错误不是很清楚。 实质上、我希望将自己的类集成到 ti_rospackage 中、并在 mmWaveQuickConfig.cpp 源文件中使用它的方法。 我不断遇到编译错误、这就是我尝试了解现有 DataUARTHandler 类是如何集成的原因。

    当我发现在将 DataUARTHandler 类包括到 mmWaveQuickConfig.cpp 中时 ROS 包不会编译(生成的错误与尝试包含自己的类时相同)。 出于某种原因,当将 DataUARTHandler 类包括到包含 main()方法的第二个源文件(即 mmWaveLoader.cp)时,该软件包会进行编译。

    简而言之、将其添加到清理的 ti_rospackage 编译中:

    /*
    * mmWaveLoader.cpp
    *
    *
    #include "ROS/ROS.h"
    #include "nodelet/loader.h"
    #include "DataHandlerClass.h"

    int main (int argc、char ** argv)


    ROS::NodeHandle myNH;
    DataUARTHandler 处理程序(&myNH);

    (笑声)

    但是、将其添加到干净的 ti_rospackage 中不会编译:
    /*
    * mmWaveQuickConfig.cpp
    *
    *

    #include "ROS/ROS.h"
    #include "ti_mmwave_rospkg/mmWaveCLI.h"
    #include
    #include
    #include
    #include

    #include "nodelet/loader.h"
    #include "DataHandlerClass.h"
    #include "mmWaveDataHdl.HPP"
    #include

    int main (int argc、char ** argv)


    ROS::NodeHandle myNH;
    DataUARTHandler 处理程序(&myNH);

    (笑声)

    并生成以下编译错误:

    [100%]链接 CXX 可执行文件/home/joe/catkin_wsMA/devel/lib/ti_mmwave_rospkg/mmWaveQuickConfig
    /home/joe/catkin_wsMA/devel/lib/libmmwave.so:对`class_loader 的引用未定义::class_loader_private::抽象 MetaObjectBase::抽象 MetaObjectBase (std:_cxx11::Basic <char, std::char_traits) ,std::分配器 > const&、std:_cxx11::基础版<char, std::char_traits ,std::分配器 > const&)'
    /home/joe/catkin_wsMA/devel/lib/libmmwave.so:对`nodelet::Nodelet::Nodelet()'的引用未定义
    /home/joe/catkin_wsMA/devel/lib/libmmwave.so:对`nodelet::nodelet::getPrivateNodeHandle() const'的引用未定义
    /home/joe/catkin_wsMA/devel/lib/libmmwave.so:未定义对`class_loader <char, std::char_traits 的引用::class_loader_private::getFactoryMapForBaseClass (std:_cxx11::basical_fat ,std::分配器 > const&)'
    /home/joe/catkin_wsMA/devel/lib/libmmwave.so:对`class_loader 的引用未定义::class_loader_private::getCurrentlyActiveClassLoader()
    /home/joe/catkin_wsMA/devel/lib/libmmwave.so:对`class_loader 的引用未定义::class_loader_private::getCurrentlyLoadingLibraryName[ABI:cxx11]()'
    /home/joe/catkin_wsMA/devel/lib/libmmwave.so:对`class_loader 的引用未定义::class_loader_private::抽象 MetaObjectBase::addOwningClassLoader (class_loader::classloader*)'
    /home/joe/catkin_wsMA/devel/lib/libmmwave.so:对`class_loader 的引用未定义::class_loader_private::getPluginBaseToFactoryMapMapMutex()
    /home/joe/catkin_wsMA/devel/lib/libmmwave.so:对`class_loader 的引用未定义::class_loader_private::AbstractMetaObjectBase::~AbstractMetaObjectBase()'
    /home/joe/catkin_wsMA/devel/lib/libmmwave.so:未`对~nodelet 的引用::Nodelet:: Nodelet ()'
    /home/joe/catkin_wsMA/devel/lib/libmmwave.so:未`对 typeinfo for nodelet 的引用::Nodelet'
    /home/joe/catkin_wsMA/devel/lib/libmmwave.so:对`类加载程序的引用未定义::class_loader_private::AbstractMetaObjectBase::setAssociatedLibraryPath (std:_cxx11:::basical_ated.ated.ina.i.com <char, std::char_traits ,std::分配器 >)'
    /home/joe/catkin_wsMA/devel/lib/libmmwave.so:对`class_loader 的引用未定义::class_loader_private::hasanonPurePluginLibraryBeenOpeded (bool)'
    collect2:错误:LD 返回1退出状态
    TI_mmwave_rospkg/cmakeFiles/mmWaveQuickConfig.dir/build.make:126:目标'/home/joe/catkin_wsMA/devel/lib/ti_mmwave_rospkg/mmWaveQuickConfig '的配方失败
    maked[2]:***[/home/joe/catkin_wsMA/devel/lib/ti_mmwave_rospkg/mmWaveQuickConfig 错误1.
    CMakeFiles/Makefile2:1939:目标"ti_mmwave_rospkg/cmakeFiles\mmWaveQuickConfig.dir/all"的配方失败
    make[1]:***[ti_mmwave_rospkg/cmakeFiles\mmWaveQuickConfig.dir/all]错误2.
    Makefile:138:目标“全部”的配方失败
    Make:***[All]错误2.


    非常感谢您的帮助。

    此致、
    RYEN
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RYEN、

    尽管可以通过添加自定义类等来修改 ti_mmwave_rospkg 封装、但最好创建您自己的自定义 ROS 封装、然后使用来自 ti_mmwave_rospkg 节点的点云消息。 有关创建 ROS 软件包的教程、请参阅 wiki.ros.org/.../Tutorials 上的"创建 ROS 软件包"部分。 创建您自己的定制包的优势是将毫米波传感器驱动程序代码与您的定制代码分开。 这样可以更轻松地开发自己的代码、而无需处理驱动程序代码的内部结构和编译依赖项、并允许您在发布较新版本时彻底更新驱动程序代码。 它还允许您将来自毫米波传感器节点的 ROS 点云消息记录到 ROS 包文件中、并在稍后重放这些消息以供自定义节点使用、以便您可以在需要时迭代自定义代码、同时重放来自雷达传感器的相同数据采集。

    就出现的编译错误而言、可能是由于毫米波 ROS 驱动程序的内部库/可执行文件分区以及链接独立可执行文件与启动节点集所需的相关 ROS 库。 遗憾的是、我们无法调查和解决自定义代码更改导致的构建问题。

    此致、

    John
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 John:

    感谢你的帮助。 我现在已切换到使用 catkin Simple、我不再遇到编译错误。

    RYEN