Skip to content

踩坑GitHub universalrobots/universal_robots_ros2_description9 个月前

UR ROS2描述文件k_velocity为0致effort指令被限零 ​

本文由 AI 根据公开内容整理,可能有误,请以原文为准:k_velocity has value of 0 in safety_controller, limiting effort commands to 0(GitHub universalrobots/universal_robots_ros2_description #376)

状态:有绕过办法

问题 ​

在universal_robots_ros2_description的ur_macro.xacro中,safety_controller标签的k_velocity参数硬编码为0。当启用safety_controller并使用effort接口时,ros2_control的JointSoftLimiter计算软力矩限值会将指令钳位至0.0,导致机器人无法响应effort控制命令。

环境 ​

Universal Robots ROS2 Description仓库,ur_macro.xacro文件,ros2_control joint_limits模块,JointSoftLimiter组件,UR机器人effort硬件接口。

解决办法 ​

  1. 确认使用的是ros2_control中的joint_limits::JointSoftLimiter作为安全控制器。
  2. 修改URDF或xacro文件中safety_controller标签的k_velocity参数,将其从0改为合适的正数值。
  3. 根据应用所需的安全裕度调整k_velocity:该值越小,力矩限制介入越早,实际最大effort低于硬件极限;该值过大则可能在速度接近限值时才触发限制,存在超速风险。
  4. 参考计算公式:soft_max_eff = clamp(-k_velocity * (actual_vel - max_vel), -max_effort, max_effort),例如max_vel=2rad/s、current_vel=1.8rad/s、k_velocity=100时,最大允许力矩为20Nm。
  5. 注意底层硬件控制器亦有类似限幅机制,发送的力矩指令可能仍被进一步削减,需结合实测调整k_velocity以平衡安全性与控制性能。

讨论原作者:@JohnTGZ 等,版权归原作者所有。

来源

本页事实对应的公开页面,以原文为准。

  1. GitHub universalrobots/universal_robots_ros2_description #376:k_velocity has value of 0 in safety_controller, limiting effort commands to 0访问 2026-10-26