ROS中用rosbag记录的数据仿真时发布TF在RVIZ中遇到“Message removed because it is too old”的问题解决

用rosbag的里程计和激光数据mapping,想在RVIZ中不仅显示occupancy grid map,也显示激光数据,为此需要自己编写TF的broadcaster来发布scan到odom的坐标变换,代码如下

其中scan的坐标系名字(frame_id)叫“laser”,这是因为rosbag中scan的数据里面header.frame_id 就定义为了“laser”

#include <ros/ros.h>
#include <tf/tf.h>
#include <tf/transform_broadcaster.h>
#include <nav_msgs/Odometry.h>


static double x_r_l, y_r_l, theta_r_l;

void odomCallback ( const nav_msgs::OdometryConstPtr& odom )
{
    /* 获取机器人姿态 */
    double x_r = odom->pose.pose.position.x;
    double y_r = odom->pose.pose.position.y;
    double theta_r = tf::getYaw ( odom->pose.pose.orientation );

    static tf::TransformBroadcaster br;
    tf::Transform transform;
    transform.setOrigin(tf::Vector3(x_r+x_r_l, y_r+y_r_l, 0.0));
    transform.setRotation(tf::createQuaternionFromYaw(theta_r+theta_r_l));
    br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "odom", "laser"));
}

int main(int argc, char** 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值