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.3 Linux压缩文件或目录为.zip格式(zip命令)

    我们经常会在 Windows 系统上使用 “.zip”格式压缩文件,其实”.zip”格式文件是 Windows 和 Linux 系统…

    Linux 2023年6月7日
    0101
  • MSSQL中Repalce函数处理长字符串时报异常的解决方案

    阅文时长 | 17.99分钟字数统计 | 28788.8字符主要内容 | 1、引言&背景 2、问题还原 3、解决方案 4、官方解释 5、声明与参考资料『MSSQL中Repa…

    Linux 2023年6月14日
    073
  • SQLI-LABS(Less-11、12)

    Less-11(POST-Error Based-Single Quotes-String) 打开 Less-11的页面,可以看到一个登录框,需要输入用户名和密码,由本关名字可知S…

    Linux 2023年6月6日
    076
  • 2017年腾讯 秋招软件开发笔试编程题回忆版

    2017 年腾讯 秋招软件开发笔试编程题回忆版 (所有题目大致描述如下,并非完整的题目回忆,但意思大致一样) 1、又一个魔法城市,城市里面有n个魔法城堡,序号为0,1,2。。。n-…

    Linux 2023年6月6日
    095
  • Isilon 的OneFs常见操作命令(一)

    1背景知识: Isilon的oneFS是基于Free BSD的,FreeBSD 是一种类UNIX操作系统,因此有些类似Linux操作系统的常见命令可以直接使用,但有些又略微差别,需…

    Linux 2023年6月6日
    0132
  • MIT6.828——Lab1 partB(麻省理工操作系统课程实验)

    Lab1 历时2天,完成了LAB1,完整代码仓库可点击:https://github.com/Elio-yang/MIT6.828 partA 练习 *exercise3 gdb指…

    Linux 2023年5月27日
    0116
  • tomcat

    1. tomcat简介 2. tomcat的部署 2.1 java环境的安装 2.2 tomcat部署 2.3 访问Host Manager界面 2.4 访问Server Stat…

    Linux 2023年6月13日
    0113
  • 尤娜,我去面试了

    前情回顾 从前,有一个简单的通道系统叫尤娜…… 尤娜系统的第一次飞行中换引擎的架构垂直拆分改造 四种常用的微服务架构拆分方式 面试前几天 尤娜系统经过一次拆…

    Linux 2023年6月14日
    0101
  • Linux网络智障问题排查汇总

    Q: Linux 客户端应用接收不到组播:A: 检查客户端的 Linux 系统,可能没有配置 net.ipv4.conf.ethx.rp_filter = 0 的内核参数 Q: 在…

    Linux 2023年6月14日
    078
  • 一篇”水文“带你解剖HTML中的ID属性以及和Class属性的区别。

    写在开篇 哈喽!我又来写”水文”了,回顾上篇讲到的class属性,那么class属性和本篇要讲的id属性有什么不一样呢?跟随笔者步伐,一一解剖。 HTML中…

    Linux 2023年6月7日
    094
  • SpringBoot-MVC自动配置原理

    MVC自动配置原理 5.1 官网阅读 在进行项目编写前,我们还需要知道一个东西,就是SpringBoot对我们的SpringMVC还做了哪些配置,包括如何扩展,如何定制。 只有把这…

    Linux 2023年6月14日
    099
  • 常见Git命令汇总

    前言 最近,有朋友私信让我就 git &#x4F7F;&#x7528;做篇文章分享,分享一下我在日常工作中是如何使用 git的。我当场就收费两包辣条,最后讨价还价,…

    Linux 2023年6月13日
    088
  • vim编辑器

    vim 编辑器 2018 年12 月12 日 22:15 常用操作 命令模式(初始模式) 输入模式(i 进入) 底行命令模式(:进入) / 往下搜索 ? 往上搜索 n 搜索下一个 …

    Linux 2023年6月13日
    0114
  • Shell语法

    在 Shell 中引号分为 2 种:单引号、双引号。 ( 1 )双引号 由双引号括起来的字符,除 $ 、倒引号和反斜线( \ )仍保留其特殊功能外,其余字符通常作为普通字符对待。 …

    Linux 2023年5月28日
    084
  • Python 批处理sql插入 %s 占位符报错

    语法错误 在查询表达式 ‘%s’ 中。 (-3100) (SQLPrepare)”) 语法错误 在查询表达式 ‘%s’ …

    Linux 2023年6月7日
    0111
  • Linux tcpdump抓包命令排查

    bash;gutter:true; tcpdump命令行参数介绍:</p> <p>-A 以ASCII格式打印出所有分组,并将链路层的头最小化。 -c 在收到…

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