roscpp中action server的多线程特性

        最近在搞一个用于机器人移动的action server,使用c++编写,主要就是给下位机发送目的点坐标并在一个循环中判断机器人是否到达目标点。在这个过程中需要不断监听里程计消息。众所周知ros中监听消息的机制是使用回调函数,而回调函数是在ros::spin中调用的,这就带来一个问题:action server本身是消息通信机制的一个封装,而当用户定义的action server回调函数在ros::spin中被调用时,里程计消息的subscriber所对应的callback就无法被调用,也就是说,在action server接收到一个goal时,里程计信息无法被更新。

        但实际测试发现一切正常,我上面提到的问题并没有出现。(竟然可以运行,为什么呢.jpg)

        于是查阅action server的代码,发现下面这段,在SimpleActionServer的构造函数中:

        SimpleActionServer在内部单开了一个线程用于接收goal并调用回调函数。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值