一个具体的safety_controller共有以下几部分组成:
分别是k_velocity, k_position, soft_lower_limit, soft_upper_limit
就像这样:
<safety_controller
k_velocity="10"
k_position="15"
soft_lower_limit="-2.0"
soft_upper_limit="0.5" />
soft_lower_limit, soft_upper_limit,很好理解,就是关节的上下限制的软限制而已,只是要注意的是soft_lower要比limit的下限要大,同理soft_upper要比limit的上限要小,那么k_position和k_velocity是什么意思呢?
首先,先看下ros_wiki的解释:
上面那段话是什么意思呢?其实意思很简单:
所谓的Kv就是对扭矩的控制,一旦某个方向的关节速度过大,则能对同向速度施加的同向扭矩便更小,而对阻碍它运动的扭矩(即异向扭矩)则可以更大。(我个人认为这一点类似于控制加速度大小)
而Kp则类似于Kv,它是对关节速度的控制,一旦某个关节要接近极限位置的时候则能对同向位置施加的同向速度便更小,而对阻碍它运动的扭矩(即异向速度)则可以更大。
而Kv,Kp本身的数学意义便是直线的斜率,即上面两张图中的平行四边形的斜率
那么现在便看得懂下面的代码是啥意思了吧:
<safety_controller
k_velocity="10"
k_position="15"
soft_lower_limit="-2.0"
soft_upper_limit="0.5" />