根据机器人速度和加速度限制绑定传入的速度消息。
链接:https://github.com/yujinrobot/yujin_ocs.git(branch:indigo)
速度平滑节点与kobuki_node一起运行,它们将控制机器人的速度和加速度在发送到机器人之前进行限制,然后再应用到机器人。其也适用于任何其他通用ros移动底层控制。
(1)〜raw_cmd_vel(geometry_msgs / Twist)
要平滑的输入速度。
(2)〜odometry (nav_msgs /Odometry )
我们将输出速度命令与测得的速度进行比较,以确保我们不会在速度曲线中产生非常大的跳跃。
(3)〜robot_cmd_vel(geometry_msgs / Twist)
或者,我们也可以比较输出速度命令和结束机器人速度命令,以确保我们不会在速度曲线中创建非常大的跳跃。有关更多详细信息,请参阅下面的robot_feedback参数说明。
(1)〜smooth_cmd_vel(geometry_msgs / Twist)
根据速度和加速度极限的平滑输出相应的速度。
(1)〜accel_lim_v(double)
线性加速度极限。强制。
(2)〜accel_lim_w(double)
角加速度极限。强制。
(3)〜speed_lim_v(double)
线速度限制。强制。
(4)〜speed_lim_w(double)
角速度限制。强制。
(5)〜decel_factor(double,default:1.0)
减速/加速比。用于使减速更积极,例如在具有高惯性的机器人上安全地制动。
(6)〜frequency(double,默认值:20.0)
输出消息速率。速度平滑器保持它,而不管输入消息速率,在必要时进行内插。
(7)〜robot_feedback(int,default:0)
指定用作机器人速度反馈的主题(0 - 无,1 - 里程计,2- 机器人结束命令)。有关详细信息,请参阅下面的提示。
(1)除频率外的所有参数都是动态可重配置的。
(2)线性和角速度与更受限制的成比例地平滑,因此我们保证恒定的旋转半径。
(3)如果输入主题变得不活动,并且最后一个命令不是零速度命令(也许控制器崩溃,或者只是忘记了好的方式…),我们在排序超时后引入假零速度命令。
(4)看看Kobuki的控制系统教程,了解yocs_velocity_smoother如何与其他组件一起构建一个安全灵活的控制系统。
1、机器人反馈意味着机器人“认为”他现在移动的当前速度。知道这两个常见的方法是:
(1)测量速度,即里程表(选项1)
(2)假设机器人完全遵循我们发送给他的命令(选项2)
2、选项0当然忽略任何机器人反馈。使用机器人反馈有一些原因。我们面对的更多的是:
(1)多个控制器通过速度复用器访问机器人。已被具有较高优先级的另一个排除的控制器将继续向机器人发出命令,就好像它是唯一一个,而机器人实际速度可以完全不同于速度平滑器的假设。如果他恢复控制,他的第一个有效命令将从上一个控制器的最后一个跳跃。选项2很好地解决了这个问题。
(2)机器人不能使他接收的速度命令有效,例如如果他不能以命令的速度(斜坡,地毯,高惯性机器人…)加速/移动。同样,速度平滑的假设是错误的。选项1很好地解决了这个问题。
3、因此,在大多数情况下,推荐的选项是2(如果没有并发控制器,它将没有效果),让选项1只适用于特殊情况。如果人们不觉得它有用,我们可能会删除。