当前位置: 首页>>代码示例>>C++>>正文


C++ TransformListener::resolve方法代码示例

本文整理汇总了C++中tf::TransformListener::resolve方法的典型用法代码示例。如果您正苦于以下问题:C++ TransformListener::resolve方法的具体用法?C++ TransformListener::resolve怎么用?C++ TransformListener::resolve使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在tf::TransformListener的用法示例。


在下文中一共展示了TransformListener::resolve方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: if

void
AmclNode::initialPoseReceived(const geometry_msgs::PoseWithCovarianceStampedConstPtr& msg)
{
    boost::recursive_mutex::scoped_lock prl(configuration_mutex_);
    if(msg->header.frame_id == "")
    {
        // This should be removed at some point
        ROS_WARN("Received initial pose with empty frame_id.  You should always supply a frame_id.");
    }
    // We only accept initial pose estimates in the global frame, #5148.
    else if(tf_->resolve(msg->header.frame_id) != tf_->resolve(global_frame_id_))
    {
        ROS_WARN("Ignoring initial pose in frame \"%s\"; initial poses must be in the global frame, \"%s\"",
                 msg->header.frame_id.c_str(),
                 global_frame_id_.c_str());
        return;
    }

    // In case the client sent us a pose estimate in the past, integrate the
    // intervening odometric change.
    tf::StampedTransform tx_odom;
    try
    {
        tf_->lookupTransform(base_frame_id_, ros::Time::now(),
                             base_frame_id_, msg->header.stamp,
                             global_frame_id_, tx_odom);
    }
    catch(tf::TransformException e)
    {
        // If we've never sent a transform, then this is normal, because the
        // global_frame_id_ frame doesn't exist.  We only care about in-time
        // transformation for on-the-move pose-setting, so ignoring this
        // startup condition doesn't really cost us anything.
        if(sent_first_transform_)
            ROS_WARN("Failed to transform initial pose in time (%s)", e.what());
        tx_odom.setIdentity();
    }

    tf::Pose pose_old, pose_new;
    tf::poseMsgToTF(msg->pose.pose, pose_old);
    pose_new = tx_odom.inverse() * pose_old;

    // Transform into the global frame

    ROS_INFO("Setting pose (%.6f): %.3f %.3f %.3f",
             ros::Time::now().toSec(),
             pose_new.getOrigin().x(),
             pose_new.getOrigin().y(),
             getYaw(pose_new));
    // Re-initialize the filter
    pf_vector_t pf_init_pose_mean = pf_vector_zero();
    pf_init_pose_mean.v[0] = pose_new.getOrigin().x();
    pf_init_pose_mean.v[1] = pose_new.getOrigin().y();
    pf_init_pose_mean.v[2] = getYaw(pose_new);
    pf_matrix_t pf_init_pose_cov = pf_matrix_zero();
    // Copy in the covariance, converting from 6-D to 3-D
    for(int i=0; i<2; i++)
    {
        for(int j=0; j<2; j++)
        {
            pf_init_pose_cov.m[i][j] = msg->pose.covariance[6*i+j];
        }
    }
    pf_init_pose_cov.m[2][2] = msg->pose.covariance[6*5+5];

    delete initial_pose_hyp_;
    initial_pose_hyp_ = new amcl_hyp_t();
    initial_pose_hyp_->pf_pose_mean = pf_init_pose_mean;
    initial_pose_hyp_->pf_pose_cov = pf_init_pose_cov;
    applyInitialPose();
}
开发者ID:Renda110,项目名称:AGVC,代码行数:71,代码来源:amcl_node.cpp


注:本文中的tf::TransformListener::resolve方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。