ROS探索总结(四十二)——twist_mux多路切换器

我们在做机器人ROS开发时,常常会遇到相同速度控制消息的选择问题。比如说控制机器人移动的geometry_msgs::Twist消息,可以使用键盘节点发布,可以使用手柄节点发布,也可以在导航过程中由movebase发布,那么这些节点同时运行时,多个节点发布相同的速度控制话题,这个时候机器人就迷茫了,到底该听谁的呢?只能收到哪个数据就听谁的。

针对这样的问题,ROS提供了一种mux多路切换器——twist_mux,可以帮助我们切换到希望接收的数据源上。

 

一、原理

正如我们开篇描述的场景,当机器人接收到不同节点发布的速度控制消息时,该如何进行选择呢?

回想一下RTOS中的任务调度原则,每个任务都有自己的优先级,当有多个任务进入等待状态时,系统会选择优先级最高的任务执行,很多系统还支持同等优先级的任务,此时系统会按照时间片轮询的方式执行任务,也就是不偏不倚,平等对待相同优先级的任务。

twist_mux的原理类似于RTOS中的任务调度,需要为每个输入的话题设置优先级,不同话题也可以设置为同样的优先级,但是并不推荐这样做。除了优先级机制外,twist_mux还可以根据超时限制、外部锁话题(lock topics)来限制输入话题的选择。

twist_mux功能包中的核心节点就是twist_mux,其输入输出如下:

image

左侧输入的是多个geometry_msgs::Twist类型的话题,通过twist_mux的选择后,输出唯一的geometry_msgs::Twist话题。下方输入的话题就是用户动态配置选择机制的锁话题,话题的消息类型是Bool,正如锁一样,只有打开和关闭两种状态。这里锁的概念可以理解为:通过限制不同优先级的输入源,达到控制输出的效果。

 

二、配置

twist_mux功能包的安装一句话就可以搞定:

  1. sudo apt-get install ros-indigo-twist-mux

然后就可以运行多路切换器了:

  1. roslaunch twist_mux twist_mux.launch

打印当前的话题列表可以看到:

image

回头再来看一下twist_mux.launch文件里边到底干了啥:

  1. <launch>
  2.   <arg name="joy_vel_in"  default="input_joy/cmd_vel"/>
  3.   <arg name="joy_vel_out" default="joy_vel"/>
  4.   <arg name="cmd_vel_out" default="twist_mux/cmd_vel"/>
  5.   <arg name="config_locks"  default="$(find twist_mux)/config/twist_mux_locks.yaml"/>
  6.   <arg name="config_topics" default="$(find twist_mux)/config/twist_mux_topics.yaml"/>
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值