Velocity Smoother

源代码在 Github.

“nav2_velocity_smoother” 是一个包含生命周期组件节点的包,用于平滑 Nav2 发送给机器人控制器的速度。 thiyuandais 包的目的是实现 Nav2 的速度、加速度和死区平滑,通过平滑某些本地轨迹规划器控制工作中可能出现的加速度/急动运动,减少机器人电机和硬件控制器的磨损。 它还可以以比控制器服务器发布的更高的速率插入速度命令。

请参阅该包的 README 以了解更多信息。

速度平滑器参数

use_realtime_priority:

Type

Default

bool

false

Description

为控制器服务器添加软实时优先级,以更好地确保资源用于代码库的时间敏感部分。这将使控制器的执行线程的优先级高于系统其余部分(“90”),以满足调度期限,从而减少错过的循环率。要使用此功能,您可以在“/etc/security/limits.conf”中设置以下内容,以授予用户空间访问提升的优先级权限:“<username> soft rtprio 99 <username> hard rtprio 99”

smoothing_frequency:

Type

Default

double

20.0

Description

频率 (Hz) 使用最后收到的速度命令来平滑速度、加速度和死区约束。如果设置为大约本地轨迹规划器的速率,它应该通过加速度约束来平滑速度命令。如果设置得更高,它将进行插值并向硬件控制器提供一组平滑的命令。

scale_velocities:

Type

Default

bool

false

Description

是否根据加速度限制对某个组件所需更改的比例调整速度的其他组件。这将尝试调整所有组件以遵循相同的方向,但仍强制执行加速度限制以保证合规性,即使这意味着略微偏离指令轨迹。

feedback:

Type

Default

string

“OPEN_LOOP”

Description

用于机器人速度当前状态的反馈类型。在“OPEN_LOOP”中,它将使用最后命令的速度作为下一次迭代的当前速度。当加速度限制设置适当时,这是一个很好的假设。在“CLOSED_LOOP”中,它将使用来自“odom”主题的里程表来估计机器人的当前速度。在闭环模式下,相对于平滑频率,里程表的高速率和低延迟非常重要。

max_velocity:

Type

Default

vector<double>

[0.5, 0.0, 2.5]

Description

[x, y, theta] 轴上的最大速度(m/s)。

min_velocity:

Type

Default

vector<double>

[-0.5, 0.0, -2.5]

Description

[x, y, theta] 轴上的最小速度(米/秒)。这是**有符号**的,因此必须为**负**才能反转。注意:旋转速度负方向是右转,因此无论反转偏好如何,这都应该始终为负。

deadband_velocity:

Type

Default

vector<double>

[0.0, 0.0, 0.0]

Description

发送给机器人硬件控制器的最小速度(m/s),以防止由于失速扭矩而无法达到该速度时小命令损坏硬件控制器。

velocity_timeout:

Type

Default

double

1.0

Description

超时(秒)后,速度平滑器将发送清零的“Twist”命令并停止发布。

max_accel:

Type

Default

vector<double>

[2.5, 0.0, 3.2]

Description

应用于每个轴“[x, y, theta]”的最大加速度。

max_decel:

Type

Default

vector<double>

[-2.5, 0.0, -3.2]

Description

应用于每个轴“[x, y, theta]”的最小加速度。这是**有符号**的,因此这些通常都应该是**负**的。

odom_topic:

Type

Default

string

“odom”

Description

如果处于“CLOSED_LOOP”操作模式,则主题查找机器人里程表。

odom_duration:

Type

Default

double

0.1

Description

如果处于“CLOSED_LOOP”操作模式,则缓冲里程计命令的时间(秒)来估计机器人速度。

enable_stamped_cmd_vel:

Type

Default

bool

false

Description

是否使用 geometry_msgs::msg::Twist 或 geometry_msgs::msg::TwistStamped 速度数据。 True 使用 TwistStamped,false 使用 Twist。

bond_heartbeat_period:

Type

Default

double

0.1

Description

生命周期节点债券机制发布周期(在 /bond 主题上)。如果小于或等于 0.0,则禁用。

Example

velocity_smoother:
  ros__parameters:
    smoothing_frequency: 20.0
    scale_velocities: false
    feedback: "OPEN_LOOP"
    max_velocity: [0.5, 0.0, 2.5]
    min_velocity: [-0.5, 0.0, -2.5]
    deadband_velocity: [0.0, 0.0, 0.0]
    velocity_timeout: 1.0
    max_accel: [2.5, 0.0, 3.2]
    max_decel: [-2.5, 0.0, -3.2]
    odom_topic: "odom"
    odom_duration: 0.1
    use_realtime_priority: false
    enable_stamped_cmd_vel: false