ROS::message_filters中的一个报错(mt::TimeStamp……)

                <p>&#x300E;&#x65B9;&#x4FBF;&#x68C0;&#x7D22;&#x300F; ros::Time msg_time = mt::TimeStamp<typename mpl::at_c<Messages, i>::type>::value(msg);</p>
  1. 瞎扯一会儿:

博主是大学生,最近一直使用ROS进行机器人控制编程。由于项目需要对多个接受者(Subscriber)进行同时接收。于是决定使用ROS里面的message_filters进行多消息接受的同步。

官方链接如下:message_filters – ROS Wiki

并参考学习了这篇文章:时间同步及在回调函数中发布ROS消息_罗宾酱的博客-CSDN博客_ros时间同步函数

个人觉得上面的文章非常不错。( 强烈推荐!!!

  1. 遇见的问题:(Header header 的缺失)

ROS::message_filters中的一个报错(mt::TimeStamp……)

主要报错如下:

###最开始显示的信息:
/opt/ros/noetic/include/message_filters/sync_policies/approximate_time.h: In instantiation of 'bool message_filters::sync_policies::ApproximateTime::checkInterMessageBound() [with int i = 0; M0 = rfid_reader::DataDev_ >; M1 = tracer_msgs::TracerStatus_ >; M2 = message_filters::NullType; M3 = message_filters::NullType; M4 = message_filters::NullType; M5 = message_filters::NullType; M6 = message_filters::NullType; M7 = message_filters::NullType; M8 = message_filters::NullType]':
主要报错如下:

/opt/ros/noetic/include/message_filters/sync_policies/approximate_time.h:170:85: error: &#x2018;value&#x2019; is not a member of &#x2018;ros::message_traits::TimeStamp<rfid_reader::datadev_<std::allocator<void> >, void>&#x2019;
170 | ros::Time msg_time = mt::TimeStamp<typename mpl::at_c<messages, i>::type>::value(msg);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
/opt/ros/noetic/include/message_filters/sync_policies/approximate_time.h:181:86: error: &#x2018;value&#x2019; is not a member of &#x2018;ros::message_traits::TimeStamp<rfid_reader::datadev_<std::allocator<void> >, void>&#x2019;
181 | previous_msg_time = mt::TimeStamp<typename mpl::at_c<messages, i>::type>::value(previous_msg);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
/opt/ros/noetic/include/message_filters/sync_policies/approximate_time.h:187:87: error: &#x2018;value&#x2019; is not a member of &#x2018;ros::message_traits::TimeStamp<rfid_reader::datadev_<std::allocator<void> >, void>&#x2019;
187 | previous_msg_time = mt::TimeStamp<typename mpl::at_c<messages, i>::type>::value(previous_msg);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~</typename></rfid_reader::datadev_<std::allocator<void></typename></rfid_reader::datadev_<std::allocator<void></typename></rfid_reader::datadev_<std::allocator<void>

报错原因:

消息类型中没有Head,就是没有时间戳信息。所以不能够同步。

解决方法:

在自定义消息中添加 Header header 即可。(可以看一下 松灵机器人的官方ROS包里的源代码,就像下面这样),个人觉得看官方源码确实收获不小。

ROS::message_filters中的一个报错(mt::TimeStamp……)

添加后即可编译成功:

ROS::message_filters中的一个报错(mt::TimeStamp……)

!!!不要忘记

在Cmakelists.txt中的find_package添加 message_filters

ROS::message_filters中的一个报错(mt::TimeStamp……)
  1. 学霸题,反思一下(C++与python的区别):

由于博主使用ROS C++与python ,在使用python时却没有出现相同的问题。那么问题来了,what f**k ? 有必要研究一番,(下面是官方文档里的c++与python中的相关代码部分)

//C++
typedef sync_policies::ApproximateTime MySyncPolicy;
// ApproximateTime takes a queue size as its constructor argument, hence MySyncPolicy(10)
Synchronizer sync(MySyncPolicy(10), image1_sub, image2_sub);
sync.registerCallback(boost::bind(&callback, _1, _2));
#python相关代码
ts = message_filters.ApproximateTimeSynchronizer([mode_sub, penalty_sub], 10, 0.1, allow_headerless=True)

我们注意到python代码中多了一个奇怪的参数『 allow_headerless=True』,并且官方文档中给出了相关解释:

ROS::message_filters中的一个报错(mt::TimeStamp……)

如果某些消息的类型不包含标头字段,则 ApproximateTimeSynchronizer 默认拒绝添加此类消息。 但是,它的 Python 版本可以使用 allow_headerless=True 构建,它使用当前的 ROS 时间代替任何缺失的 header.stamp 字段:

那么终于可以解释得通了(不得不吹一下python。不但numpy好用,还这么贴心)。虽然但是,我还是主要使用C++(doge)。

如果帮到了你,可以麻烦点一个赞吗?

ROS::message_filters中的一个报错(mt::TimeStamp……)

(图片来自网络,侵删)

Original: https://www.cnblogs.com/litecdows/p/15864391.html
Author: litecdows
Title: ROS::message_filters中的一个报错(mt::TimeStamp……)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/609960/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 实验一 密码引擎-4-国䀄算法交叉测试

    任务详情 0 2人一组,创建一个文件,文件名为小组成员学号,内容为小组成员学号和姓名1 在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码…

    Linux 2023年6月8日
    0104
  • 海思3559 FFMPEG移植

    具体参考下面这篇帖子http://bbs.ebaina.com/forum.php?mod=viewthread&tid=79863&pid=156755&…

    Linux 2023年6月13日
    099
  • Linux命令篇-sed 命令

    sed – stream editor for filtering and transforming text; sed:利用脚本来处理、编辑文本文件; &#x…

    Linux 2023年6月13日
    0104
  • short, int, long, long long各个类型的范围

    类型名称 字节数 取值范围 signed char 1 -2^7 ~ 2^7-1 -128~+127 short int 2 -2^14 ~ 2^14-1 -32768~+3276…

    Linux 2023年6月8日
    0114
  • 内存管理-物理内存虚拟内存布局

    ARM-linux环境,物理内存和虚拟内存之间的映射关系: Original: https://www.cnblogs.com/fanguang/p/11930358.htmlAu…

    Linux 2023年6月6日
    098
  • 【已解决】Windows环境下启动redis服务失败

    在redis安装目录下打开cmd窗口: 依次输入: redis-cli.exe shutdown exit redis-server.exe redis.windows.conf …

    Linux 2023年6月14日
    075
  • Running powershell scripts during nuget package installation and removal

    来源:https://devblogs.microsoft.com/nuget/NuGet-3-What-and-Why/ Since Visual Studio 2015 was…

    Linux 2023年5月28日
    0104
  • podman的基本用法

    podman的基本设置和使用 运行示例容器 列出正在运行的容器 检查正在运行的容器 测试 httpd 服务器 查看容器的日志 查看容器的 pid 检查点容器 恢复容器 迁移容器 停…

    Linux 2023年6月13日
    085
  • 随笔记录

    html结构、css表现、js行为vscode和sublime一样的在vscode中的插件:a.Auto Rename Tag 整体改变标签b.view-in-browser 预览…

    Linux 2023年6月13日
    094
  • 微信聊天内容可以被监听吗

    上班摸鱼与网络安全 成为了锅叔在博客园阅读数最高的一篇文章,足可见同学们上班摸鱼的热情,同时也反映了大家对网络安全的担忧…… 对于其中的一个存疑问题,&#8…

    Linux 2023年6月13日
    0101
  • macbook air 2019 安装win10单系统

    目前不考虑写的太详细了,如果有同学遇到问题了我再完善,主要是把遇到的坑讲下第一步,准备2个U盘(如果不嫌麻烦一个也可以)1.用大白菜或者老毛桃将其中一个做成启动盘2.在window…

    Linux 2023年6月14日
    0135
  • CentOS 7替换默认软件源

    安装CentOS 7后,默认源在国外,可以替换为国内的源以提升访问速度 参考https://mirrors.ustc.edu.cn/help/centos.html sudo vi…

    Linux 2023年6月6日
    093
  • 三系统删除与恢复引导(windows,Ubuntu,deepin)

    三系统的删除与引导修复 一、情况说明: 相信能找到我这篇随笔的朋友估计也是我和一样作死装了三个系统,例如我的(Window10,Ubuntu,deepin) 从左往右为我装系统的顺…

    Linux 2023年6月14日
    0102
  • IDEA 构建 mybatis 源码

    mybatis 源码构建 mybatis-source 下载 mybatis源码下载 mybatis-parent 版本信息 mybatis-parent 下载 mybatis-p…

    Linux 2023年6月13日
    096
  • Docker-数据卷管理

    Docker-数据卷管理 1.利用数据卷和数据容器管理数 管理Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器( DataVolumes Co…

    Linux 2023年6月13日
    095
  • 【git】git将本地代码上传远程仓库

    环境要求: windows平台可以直接下载安装git.exe(安装选中加入),右键文件使用git bash按以下命令输入 Ubuntu平台下执行sudo apt install g…

    Linux 2023年6月13日
    0115
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球