ROS NodeHandle 句柄

一、句柄的构造及命名空间

(1)阐述:

1. ros基本组件分为nodes、Parameters、Topics和Services。每个组件都带有一个命名空间。

2.Ros命名空间规则如下:

组件名格式是:第一级名字/第二级名字/第三级名字/第四级名字。对于一个具体的Parameters、Topics和Services可以没有第二和第三级名字。

(1) 第一级名字由命名空间<name_space>负责,如果句柄不是private的,且有<NodeHandle_name>,那么命名空间为<name_space>/<NodeHandle_name>

(2) 第二级名字在句柄被声明为private的条件下使用,当NodeHandle被声明为私有时,命名空间为<node_namespace>/<node_name>/<NodeHandle_name>。

(3)第三级名字就是<NodeHandle_name>,仅声明这个"~"表示无<NodeHandle_name>, 有<NodeHandle_name>的这样声明"~/<NodeHandle_name>"。

(4)第四级名字由{Parameters,Topics,Services}名字确定。

(2)具体实例

注意node_namespace 和node_name的区别。

// node_namespace 在launch文件中声明,这里表示为node_namespace

// 声明节点名字
ros::init(argc,argv,"node_name");


//(1)直接生成句柄
//命名空间为/node_namespace
ros::NodeHandle n;

//父句柄和子句柄
//命名空间为/node_namespace/sub
ros::NodeHandle n1("sub");
//命名空间为/node_namespace/sub/sub2
ros::NodeHandle n2(n1,"sub2");
//这种做法并不推荐,因为这样会使得节点无法被放入别的命名空间。只是有时在代码中使用全局名字有用。

//命名空间为/node_namespace/node_name
ros::NodeHandle pn1("~");

// pn2和pn3两种声明方式一样
//命名空间为/node_namespace/node_name/sub
ros::NodeHandle pn2("~sub");
//命名空间为/node_namespace/node_name/sub
ros::NodeHandle pn3("~/sub");

//使用"/"来声明全局
//命名空间为/node_namespace
ros::NodeHandle gn("/global");

二、NodeHandle::param()

param()函数从参数服务器取参数值给变量。如果无法获取,则将默认值赋给变量。

ros::nodehandle::param(const std::string & param_name,T & param_val,const T & default_val )
此方法尝试从参数服务器检索指示的参数值,并将结果存储在param_val中。 如果无法从服务器检索该值,则使用default_val。

三、NodeHandle::advertise()

Publisher ros::NodeHandle::advertise(
const std::string & topic, 
uint32_t queue_size,
const SubscriberStatusCallback & connect_cb, 
const SubscriberStatusCallback & disconnect_cb = SubscriberStatusCallback(), 
const VoidConstPtr & tracked_object = VoidConstPtr(), 
bool latch= false)

用来创建一个Publisher,发布话题,返回Publisherr。

topic:话题名称

queue_size:用于存储话题信息的队列容量

connect_cb:当有subscriber订阅到这个话题后,要调用的回调函数。

disconnect_cb:当有subscriber与订阅话题失去连接后,要调用的回调函数。

tracked_object:

latch:如果设置为true,那么这个话题发布的最后一个消息,将会被保存起来,并且后续如果有subscriber订阅的话,会发送最后一个消息。

四、NodeHandle::subscribe()

Subscriber ros::NodeHandle::subscribe(
const std::string & topic, 
uint32_t queue_size, void(T::*)(M) fp, 
T* obj, 
const TransportHints & transport_hints = TransportHints())

用来创建一个subscriber,订阅话题,返回subscriber。

topic:订阅的话题

queue_size:消息缓冲队列长度

fp:消息到达时的回调函数,

transport_hints:

五、NodeHandle::param()

bool ros::NodeHandle::param(
const std::string & param_name,
T & param_val,
const T & default_val) const 
    

c++ 函数前面和后面 使用const 的作用:

  • 前面使用const 表示返回值为const
  • 后面加 const表示函数不可以修改class的成员

尝试从parameter server处获取参数,参数保存到param_val中,没有则返回默认值

param_name: 参数名

param_val: 传入参数的变量

default_val: 默认返回的值

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值