如何在C++程序中与nav2交互

本文介绍了如何在C++程序中与nav2进行交互,包括获取机器人坐标、初始化小车位置、加载地图、判断导航服务状态、发布导航目标及动态调整nav2参数的详细步骤。内容基于ROS2和自动驾驶环境。
摘要由CSDN通过智能技术生成

1 获取机器人坐标

有多个方法可以获得机器人在全局地图下的坐标,我采用查询TF的方法,得到base_footprint 到map的TF,从而得到机器人的x,y和yaw。

 geometry_msgs::msg::TransformStamped t;
    try {
   
        t = tf_buffer_->lookupTransform(
            "map", "base_footprint",
            tf2::TimePointZero);
    }
    catch (const tf2::TransformException & ex) {
   
        if(_bLocalised)RCLCPP_INFO(
            node->get_logger(), "Could not transform %s to %s: %s",
            "map", "base_footprint", ex.what());  
        _bLocalised=false;
        return;
    }
    tf2::Quaternion myQuaternion(t.transform.rotation.x,t.transform.rotation.y,t.transform.rotation.z,t.transform.rotation.w);
    tf2::Matrix3x3 m(myQuaternion);
    double yaw,roll,pitch;
    m.getEulerYPR(yaw,pitch,roll);
    emit posUpdate(true,t.transform.translation.x,t.transform.translation.y,yaw);
    current_pose_x=t.transform.translation.x;
    current_pose_y=t.transform.translation.y;
    current_pose_angle=yaw*180.0/M_PI;

2 初始化小车位置

通过发布当前位置消息(PoseWithCovarianceStamped 类型)到topic:“initialpose” 来让nav2进行位置进行初始化

::Publisher<geometry_msgs::msg::PoseWithCovarianceStamped>::SharedPtr _initial_pose_pub;
   // -----------------
     _initial_pose_pub =node->create_publisher<geometry_msgs::msg::PoseWithCovarianceStamped>("initialpose", 10);
   // -----------------
void rclcomm::PublishInitpos(float fx, float fy, float fa)
{
   
     geometry_msgs::msg::PoseWithCovarianceStamped iniPosMsg;
     iniPosMsg.header.stamp = rclcpp::Clock().now();
     iniPosMsg.header.frame_id = "map";
     iniPosMsg.pose.pose.position.x = fx;
     iniPosMsg.pose.pose.position.y = fy;
     iniPosMsg.pose.covariance[0] = 0.25;
     iniPosMsg.pose.covariance[6 * 1 + 1] = 0.25;
     iniPosMsg.pose.covariance[6 * 5 + 5] = 0.06853891945200942;
     iniPosMsg.pose.pose.orientation.z = sin(fa*M_PI/180/2);
     iniPosMsg.pose.pose.orientation.w = cos(fa*M_PI/180/2);

    _initial_pose_pub->publish(iniPosMsg);
     std::cout
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code .

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值