ROS消息筛选器::TimeSequencer
ROS message_filters::TimeSequencer
我试图延迟处理通过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类需要回调::shared_ptr。
请参阅此处的文档:http://wiki.ros.org/message_filters#Time_Sequencer
void callback(const boost::shared_ptr<std_msgs::String>& info);
或者您可以使用ConstPtr typedef:
void callback(const std_msgs::StringConstPtr& info);
#include <ros/ros.h>
#include <geometry_msgs/PoseStamped.h>
#include "image_transport/image_transport.h"
#include "cv_bridge/cv_bridge.h"
#include "message_filters/subscriber.h"
#include "message_filters/synchronizer.h"
#include "message_filters/time_synchronizer.h"
#include "message_filters/sync_policies/exact_time.h"
#include <message_filters/sync_policies/approximate_time.h>
using namespace sensor_msgs;
using namespace message_filters;
class SubscribeAndPublish
{
public:
void callback(const sensor_msgs::ImageConstPtr& msg,const sensor_msgs::ImageConstPtr& msg2)
{}
public:
SubscribeAndPublish():sync2(image_sub,image_sub2,500){
//https://gist.github.com/tdenewiler/e2172f628e49ab633ef2786207793336
image_sub.subscribe(n, "/camera/color/image_raw", 1);
image_sub2.subscribe(n, "/camera/aligned_depth_to_color/image_raw", 1);
sync2.registerCallback(boost::bind(&SubscribeAndPublish::callback,this, _1, _2));
odom_pub = n.advertise<nav_msgs::Odometry>("RGBDodom", 50);
}
private:
ros::NodeHandle n;
ros::Publisher odom_pub;
message_filters::Subscriber<Image> image_sub;
message_filters::Subscriber<Image> image_sub2;
TimeSynchronizer<Image, Image> sync2;
};
在上尝试此代码
相关文章:
- 输入验证以筛选出字符、字符串和一系列整数
- 参数包中的筛选器类型
- 筛选 QFileDialog 中显示的目录
- 筛选嵌套的动态元组(元组的动态元组)
- 如何从结构列表中筛选信息
- 通过QLineEdit筛选查询并更新QSqlQueryModel
- 如何从所选目录(位于listWidget中)中筛选图像文件
- 在 c++17 中筛选类型元组
- 不需要更改筛选器算法中的数据
- 在存储库中,筛选器函数返回动态向量或其他存储库
- 微筛选器从用户模式应用程序接收常量值
- 微筛选器无法阻止'Windows Photos'打开的图像
- C++可变参数模板类型筛选转换
- 点云库:计算筛选关键点 - 输入云错误
- 未调用微筛选器PRE_OP_CALLBACK
- OPENCV筛选未定义的参考问题
- 图像的行筛选
- 从equal_range查询中筛选和修改 boost::multi_index 中的元素
- 微筛选器驱动程序不阻止文件版本
- ROS消息筛选器::TimeSequencer