Y
一般我们的速度控制发布话题会取名为“cmd_vel”, 接受也叫这个,但如果有多个发布节点呢,接受该听谁的,笔者曾经就在机器人调试发现机器人运动卡顿,经过调试才发现原来手柄开着一直发布零指令。虽然可以通过特殊按键进行触发控制,但这岂不是又要配置。于是控制多路切换出现了
T
其实最具代表性的为twist_mux切换功能包,其输入输出如下:
经过该节点,同一时刻只有一个控制输出,通过配置文件不仅可以控制速度控制话题的优先级,而且还可以根据超时限制、外部锁话题来限制输入话题的选择。
W
安装
直接克隆库https://github.com/ros-teleop/twist_mux.git
也可以直接安装·
sudo apt-get install ros-$ROS_DISTRO-twist-mux
运行
roslaunch twist_mux twist_mux.launch
话题
这里的输出话题名是twist_mux/cmd_vel,的我们的接受话题为cmd_vel,这时可以将
`<arg name="cmd_vel_out" default="cmd_vel"/>`
改为
<arg name="cmd_vel_out" default="cmd_vel"/>
节点发送端进行重映射
<remap from ="/cmd_vel" to="/nav_vel"/>
这就可以实现控制
优先级设置,可以通过修改twist_mux_topics.yaml来进行制定
# Input topics handled/muxed.
# For each topic:
# - name : name identifier to select the topic
# - topic : input topic of geometry_msgs::Twist type
# - timeout : timeout in seconds to start discarding old messages, and use 0.0 speed instead
# - priority: priority in the range [0, 255]; the higher the more priority over other topics
topics:
-
name : navigation
topic : nav_vel
timeout : 0.5
priority: 10
-
name : joystick
topic : joy_vel
timeout : 0.5
priority: 100
-
name : keyboard
topic : key_vel
timeout : 0.5
priority: 90
-
name : tablet
topic : tab_vel
timeout : 0.5
priority: 100