ROS回顾学习(5):订阅多个话题并对其进行同步处理

更新时间:2023-06-27 18:57:53 阅读: 评论:0

ROS回顾学习(5):订阅多个话题并对其进⾏同步处理
1. 研究背景
本⼩节针对在ROS节点中需要订阅两个及两个以上的话题时,需要保持对这两个话题数据的同步,且需要同时接收数据⼀起处理然后当做参数传⼊到另⼀个函数中。赖淑芳
研究背景:realnT265 和 realn D435 都有IMU数据,但是这两个传感器都将imu的数据拆开进⾏发布了,区分了线加速度和⾓加速,⽽在有⼀些场合我们需要合并使⽤。
2. 详细代码如下:
#include <message_filters/subscriber.h>
#include <message_filters/synchronizer.h>
#include <message_filters/sync_policies/approximate_time.h>
#include <boost/thread/thread.hpp>
香菇虾仁饺子using namespace message_filters;
void imu_callback(const nsor_msgs::ImuConstPtr &imu_msg_accel,const nsor_msgs::ImuConstPtr &imu_msg_gyro)花花简笔画
超级智能住宅
{
double t = imu_msg_accel->Sec();
double dx = imu_msg_accel->linear_acceleration.x;
double dy = imu_msg_accel->linear_acceleration.y;
double dz = imu_msg_accel->linear_acceleration.z;
double rx = imu_msg_gyro->angular_velocity.x;
double ry = imu_msg_gyro->angular_velocity.y;
double rz = imu_msg_gyro->angular_velocity.z;
Vector3d gyr(rx, ry, rz);
Vector3d acc(dx, dy, dz);
/**油炸黄豆
处理函数 ......国庆促销
*/
}
int main(int argc,char** argv)
{
// 需要⽤message_filter容器对两个话题的数据发布进⾏初始化,这⾥不能指定回调函数
message_filters::Subscriber<nsor_msgs::Imu>sub_imu_accel(n,IMU_TOPIC_ACCEL,2000,ros::TransportHints().tcpNoDelay());
message_filters::Subscriber<nsor_msgs::Imu>sub_imu_gyro(n,IMU_TOPIC_GYRO,2000,ros::TransportHints().tcpNoDelay());
// 将两个话题的数据进⾏同步
一个户一个衣
typedef sync_policies::ApproximateTime<nsor_msgs::Imu, nsor_msgs::Imu> syncPolicy;
厚黑学作者Synchronizer<syncPolicy>sync(syncPolicy(10), sub_imu_accel, sub_imu_gyro);
// 指定⼀个回调函数,就可以实现两个话题数据的同步获取
ros::spin();
return0;
}
3. 和 l添加如下ROS包:
// 下添加:
find_package(catkin REQUIRED COMPONENTS
....
image_transport
.
...
)
// l下添加:
<build_depend>image_transport</build_depend>
<exec_depend>image_transport</exec_depend>

本文发布于:2023-06-27 18:57:53,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1057605.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:话题   数据   需要   发布   函数
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图