ros::NodeHandle用途用法

ROS中的NodeHandle是节点与ROS计算图系统通讯的主要接口,用于发布和订阅主题、调用和提供服务。本文详细介绍了NodeHandle的用途、用法,包括公有(全局)和私有节点句柄的区别,以及如何在C++中创建和使用它们进行话题的发布和订阅。通过理解NodeHandle,开发者能更有效地编写ROS代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在ROS(Robot Operating System)中,ros::NodeHandle 是一个核心类,用于与ROS系统进行交互。几乎所有的ROS节点功能,例如发布或订阅主题、调用或提供服务,都需要使用到 ros::NodeHandle

ros::NodeHandle 类似于类的实例:

  • ros::NodeHandle 可以更准确地类比为类的实例。它是一个对象,通过它可以访问 ROS 功能,如订阅和发布消息、提供和使用服务等。NodeHandle 的实例化表明了一个与 ROS 网络交互的点,就像类的实例代表了具体的对象。
  • 不过,它是一个已经定义好的类(在 ROS 库中)的实例,而不是用户定义的类。

ros::init 更多地处理全局环境的初始化,而 ros::NodeHandle 是操作 ROS 功能的接口。

用途:

  1. 与ROS系统交互ros::NodeHandle 是节点与ROS计算图系统进行通讯的主要接口。

  2. 发布和订阅主题:使用 ros::NodeHandle,你可以定义发布者和订阅者来发布消息或订阅主题。

  3. 服务调用和提

#include "ucar_solution.h" using namespace std; using namespace Eigen; //标准 namespace ucar_solution { Solution::Solution(ros::NodeHandle &nh) { ros::NodeHandle navi_nh(nh, "navigation"); //ros::NodeHandle speed_nh(nh, "speed"); mbf_client_ = std::make_unique<actionlib::SimpleActionClient<move_base_msgs::MoveBaseAction>>("move_base", true); if (!mbf_client_->waitForServer(ros::Duration(10.0))) { ROS_INFO("Waiting for the move_base action server to come up"); } target_sub = nh.subscribe("/target_msg", 100, &Solution::solutionCallback, this); start_sub = nh.subscribe("/ucar/is_start", 100, &Solution::startCallback, this); cmd_pub = nh.advertise<geometry_msgs::Twist>("/cmd_vel", 50); scan_sub_ = nh.subscribe("/scan", 1000, &Solution::scanCallback, this); rpy_sub_ = nh.subscribe("/rpy_topic", 100, &Solution::rpyCallback, this); scan_mode_pub_ = nh.advertise<std_msgs::Int32>("/scan_mode", 10); scan_start_pub_ = nh.advertise<std_msgs::Bool>("/scan_start", 10); detect_start_pub_ = nh.advertise<std_msgs::Bool>("/detect_start", 10); follow_start_pub_ = nh.advertise<std_msgs::Bool>("/follow_start", 10); pidInit(0.01, 0.003, 0.005, 960,-0.3); XmlRpc::XmlRpcValue patrol_list; navi_nh.getParam("speed", MAX_LIMIT); navi_nh.getParam("goal_list", patrol_list); for (int i = 0; i < patrol_list.size(); ++i) { ROS_ASSERT(patrol_list[i].getType() == XmlRpc::XmlRpcValue::TypeArray); geometry_msgs::PoseStamped pose_stamped; pose_stamped.header.frame_id = "map"; ROS_ASSERT(patrol_list[i][0].getType() == XmlRpc::XmlRpcValue::TypeDouble and patrol_list[i][1].getType() == XmlRpc::XmlRpcValue::TypeDouble and patrol_list[i][2].getType() == XmlRpc::XmlRpcValue::TypeDouble); pose_stamped.pose.position
最新发布
03-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小秋slam实战

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

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

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

打赏作者

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

抵扣说明:

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

余额充值