gpt4 book ai didi

c++ - ROS message_filters::TimeSequencer

转载 作者:行者123 更新时间:2023-11-30 03:46:05 24 4
gpt4 key购买 nike

我正在尝试延迟处理通过 ros 主题收到的一些输入,并且在阅读 message_filters 包信息时,TimeSequencer似乎就是这样做的。

它们甚至包括一些我复制的示例代码,但无论如何都无法编译。我把产生错误的小测试程序贴在这里:

#include "ros/ros.h"
#include <message_filters/subscriber.h>
#include <message_filters/time_sequencer.h>
#include <std_msgs/String.h>

void callback(const std_msgs::String& info)
{
//do some processing
}

int main(int argc, char **argv)
{
ros::init(argc, argv, "test");
ros::NodeHandle n;

message_filters::Subscriber<std_msgs::String> sub(n, "my_topic", 1);
message_filters::TimeSequencer<std_msgs::String> seq(sub, ros::Duration(0.1), ros::Duration(0.01), 10);
seq.registerCallback(callback);

ros::spin();

return 0;
}

错误发生在 seq.registerCallback(callback);

In file included from /opt/ros/hydro/include/message_filters/subscriber.h:44:0,
from /home/j/workspace/src/test.cpp:17:
/opt/ros/hydro/include/message_filters/simple_filter.h: In member function message_filters::Connection message_filters::SimpleFilter<M>::registerCallback(void (*)(P)) [with P = const std_msgs::String_<std::allocator<void> >&, M = std_msgs::String_<std::allocator<void> >]:
/home/j/workspace/src/test.cpp:39:32: instantiated from here
/opt/ros/hydro/include/message_filters/simple_filter.h:96:100: error: no matching function for call to message_filters::Signal1<std_msgs::String_<std::allocator<void> > >::addCallback(void (*&)(const std_msgs::String_<std::allocator<void> >&))
/opt/ros/hydro/include/message_filters/simple_filter.h:96:100: note: candidate is:
/opt/ros/hydro/include/message_filters/signal1.h:91:22: note: template<class P> message_filters::Signal1<M>::CallbackHelper1Ptr message_filters::Signal1::addCallback(const boost::function<void(P)>&) [with P = P, M = std_msgs::String_<std::allocator<void> >, message_filters::Signal1<M>::CallbackHelper1Ptr = boost::shared_ptr<message_filters::CallbackHelper1<std_msgs::String_<std::allocator<void> > > >]

我已经用 TimeSequencer 搜索了很多例子,但真的找不到太多。非常感谢任何帮助。

最佳答案

与 ros::NodeHandle::subscribe() 不同,message_filters 类需要回调采用 boost::shared_ptr。

请参阅此处的文档: http://wiki.ros.org/message_filters#Time_Sequencer

void callback(const boost::shared_ptr<std_msgs::String>& info);

或者你可以使用 ConstPtr 类型定义:

void callback(const std_msgs::StringConstPtr& info);

关于c++ - ROS message_filters::TimeSequencer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34322075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com