用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**



被折叠的 条评论
为什么被折叠?



