Rotation Shim Controller
源代码在 Github.
nav2_rotation_shim_controller
将检查相对于机器人和新接收路径的粗略航向差异。如果在阈值内,它将把请求传递给 primary_controller
以执行任务。如果超出阈值,该控制器将使机器人原地旋转朝向该路径航向。一旦在公差范围内,它将把控制执行从此旋转垫片控制器传递到主控制器插件。此时,机器人的主插件将接管控制,以便顺利交接任务。
当 rotate_to_goal_heading
参数设置为 true 时,当达到目标检查器的 XY 目标公差时,此控制器还能够重新控制机器人。在这种情况下,机器人将朝着目标航向旋转,直到目标检查器验证目标并结束当前导航任务。
RotationShimController
最适合:
可以原地旋转的机器人,例如差速机器人和全向机器人。
当开始跟踪与机器人当前航向有显著不同航向的新路径时,或者当调整控制器以执行其任务使得紧密旋转变得困难时,优先原地旋转。
使用非运动学上可行的规划器,例如 NavFn、Theta* 或 Smac 2D(可行的规划器,例如 Smac Hybrid-A* 和 State Lattice 将从机器人的实际起始航向开始搜索,不需要旋转,因为它们的路径由物理约束保证可驾驶)。
请参阅该包的“README”来获取更完整的信息。
旋转垫片控制器参数
- angular_dist_threshold:
Type
Default
double
0.785
- Description
以弧度为单位,远离路径航向直至触发旋转的最大角距离。
- forward_sampling_distance:
Type
Default
double
0.5
- Description
沿路径前进的距离(以米为单位)选择一个采样点来近似路径前进方向
- rotate_to_heading_angular_vel:
Type
Default
double
1.8
- Description
旋转至路径方向的角旋转速度,以弧度/秒为单位
- primary_controller:
Type
Default
string
N/A
- Description
内部控制器插件用于旋转至航向后的实际控制行为
- max_angular_accel:
Type
Default
double
3.2
- Description
旋转至航向的最大角加速度(rad/s/s)
- simulate_ahead_time:
Type
Default
double
1.0
- Description
以秒为单位模拟旋转命令以检查碰撞的时间。如果发现碰撞,则将控制权转发回主控制器插件。
- rotate_to_goal_heading:
Type
Default
bool
false
- Description
如果为真,当处于目标的 XY 公差范围内时,rotationShimController 将会重新接管机器人的控制权并开始朝目标方向旋转。
Example
controller_server:
ros__parameters:
use_sim_time: True
controller_frequency: 20.0
min_x_velocity_threshold: 0.001
min_y_velocity_threshold: 0.5
min_theta_velocity_threshold: 0.001
progress_checker_plugins: ["progress_checker"] # progress_checker_plugin: "progress_checker" For Humble and older
goal_checker_plugins: ["goal_checker"]
controller_plugins: ["FollowPath"]
progress_checker:
plugin: "nav2_controller::SimpleProgressChecker"
required_movement_radius: 0.5
movement_time_allowance: 10.0
goal_checker:
plugin: "nav2_controller::SimpleGoalChecker"
xy_goal_tolerance: 0.25
yaw_goal_tolerance: 0.25
stateful: True
FollowPath:
plugin: "nav2_rotation_shim_controller::RotationShimController"
primary_controller: "nav2_regulated_pure_pursuit_controller::RegulatedPurePursuitController"
angular_dist_threshold: 0.785
forward_sampling_distance: 0.5
rotate_to_heading_angular_vel: 1.8
max_angular_accel: 3.2
simulate_ahead_time: 1.0
rotate_to_goal_heading: false
# Primary controller params can be placed here below
# ...