Turtlebot 2e 导航之move_base
参数详解:速度平滑功能包
文章目录
速度平滑功能包velocity_smoother.launch.xml
velocity_smoother.launch.xml
为速度平滑包,是一个速度平滑控制器,用来防止robot navigation的速度/转速过快,加速度/快减速过大。smoother主要针对navigation或者其他一些例子。robot有一个命令选择node cmd_vel_mux,它可以防止robot被多个ros app下发的运动命令控制从而出现运动问题。见下图:
velocity_smoother.launch.xml
的内容为:
<!--
Velocity smoother
-->
<launch>
<node pkg="nodelet" type="nodelet" name="navigation_velocity_smoother" args="load yocs_velocity_smoother/VelocitySmootherNodelet mobile_base_nodelet_manager">
<rosparam file="$(find turtlebot_bringup)/param/defaults/smoother.yaml" command="load"/>
<remap from="navigation_velocity_smoother/smooth_cmd_vel" to="cmd_vel_mux/input/navi"/>
<!-- Robot velocity feedbacks; use the default base configuration -->
<remap from="navigation_velocity_smoother/odometry" to="odom"/>
<remap from="navigation_velocity_smoother/robot_cmd_vel" to="mobile_base/commands/velocity"/>
</node>
</launch>
虽然在move_base
脚本中启动,但smoother是一个nodelete
,被moibile_base_nodelete_manager
加载。其中smoothrt.yaml
参数配置文件更是在turtlebot_bringup
package下面。最后将节点中的发布的topic “navigation_velocity_smoother/smooth_cmd_vel
” 重新映射成 “cmd_vel_mux/input/navi
”,这样cmd_vel_mux
就可以订阅到smoother
发布的主题。
订阅的主题
~raw_cmd_vel (geometry_msgs/Twist):输入的速度命令
~odometry (nav_msgs/Odometry):接收里程计信息,确保下发的运动命令没有大的跳跃。根据feedback参数配置
~robot_cmd_vel (geometry_msgs/Twist):接受robot 命令信息,确保下发的运动命令没有大的跳跃。根据feedback参数配置
发布的主题
~smooth_cmd_vel (geometry_msgs/Twist):发出来的命令,通常会将其remap到cmd_vel_mux订阅的运动命令topic上
参数
~accel_lim_v (double):强制必须设置,线性加速度最大值
~accel_lim_w (double):强制必须设置,角加速度最大值
~speed_lim_v (double):强制必须设置,线速度最大值
~speed_lim_w (double):强制必须设置,角速度最大值
~decel_factor (double, default: 1.0):加减速比,对于惯性大的机器人
~frequency (double, default: 20.0):输出速度频率。不论输入命令的频率。必要时插值
~robot_feedback (int, default: 0):速度反馈(0 - none, 1 - odometry, 2 - end robot commands).
参数配置文件smoother.yaml
# Default parameters used by the yocs_velocity_smoother module.
# This isn't used by minimal.launch per se, rather by everything
# which runs on top.
# Mandatory parameters
speed_lim_v: 0.8
speed_lim_w: 5.4
accel_lim_v: 1.0 # maximum is actually 2.0, but we push it down to be smooth
accel_lim_w: 2.0
# Optional parameters
frequency: 20.0
decel_factor: 1.5
# Robot velocity feedback type:
# 0 - none (default)
# 1 - odometry
# 2 - end robot commands
robot_feedback: 2
其他
-
除了frequency其它参数都是动态可配置的
-
如果有一个恒定的旋转半径,线/角速度会更加平滑
-
输入的最后一个topic信息不为0时(命令下发node 崩溃/不活跃),为了保证robot不出现意外,会在最后加一个0速度。
-
使用yocs_cmd_vel_mux进行机器人速度控制切换,可参考以下博文:
https://www.cnblogs.com/21207-iHome/p/8228356.html -
关于velocity smooth算法,有篇比较好的综述文件:
Ravankar A, Ravankar A, Kobayashi Y, et al. Path smoothing techniques in robot navigation: State-of-the-art, current and future challenges[J]. Sensors, 2018, 18(9): 3170.