旋转衬垫控制器 ( Rotation Shim Controller ) 是什么

2023-10-28 07:04

本文主要是介绍旋转衬垫控制器 ( Rotation Shim Controller ) 是什么,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

旋转衬垫控制器 ( Rotation Shim Controller ) 是什么?

  旋转衬垫控制器是为了解决 TEB 和 DWB 中的一些问题而开发的,但同样适用于其他希望具有旋转就位行为的控制器插件类型。由于 TEB 采用了弹性带方法,其行为倾向于通过小幅转向将机器人迅速转向,或者当路径的起始方向与当前方向相差较大时,以一种令人惊讶的方式进行转向。DWB 可以调整为具有任何类型的行为,但通常将其调整为优秀的路径跟踪器也会使其在远离当前路径方向的新路径上的平滑过渡能力降低-这总是存在权衡的。为 TEB 和 DWB 提供更好的起始点来跟踪路径使得控制器的调整更加容易,并为旁观者创造出更直观的结果。
  请注意,并不必须需要使用这个控制器插件。许多用户在没有使用此控制器的情况下也能成功地仿真机器人,但如果机器人在开始路径跟踪任务(或其他任务)之前需要原地旋转,那么使用此控制器可能会更有优势。
  nav2_rotation_shim_controller 会检查机器人与新接收到的路径之间的大致航向差异。如果在一个阈值范围内,它将将请求传递给 primary_controller 来执行任务。如果超出阈值范围,该控制器将使机器人原地旋转,朝向路径的航向。一旦在容差范围内,它将把控制执行从旋转shim控制器转移到主要的控制器插件上。此时,机器人的主要插件将接管控制,以平稳过渡到任务执行阶段。

RotationShimController最适合于以下情况:
  1.可以原地旋转的机器人,例如差分和全向轮机器人。
  2.在开始跟踪一个方向与机器人当前朝向显著不同的新路径时,或者在为其任务调整控制器时,希望进行原地旋转。
  3.使用非运动学可行的规划器,例如 NavFn、Theta 或 Smac 2D(运动学可行的规划器,如 Smac Hybrid-A 和 State Lattice ,将从机器人的实际起始航向开始搜索,不需要旋转,因为它们的路径受物理约束保证可行)。

备注:
  Regulated Pure Pursuit(RPP)已经内置了这个功能,因此不需要与RPP配对使用。但是,它适用于其他所有控制器插件。请参阅导航插件以获取当前控制器插件的完整列表。
配置旋转shim控制器:

  该控制器是一个shim,因为它位于主要控制器插件和控制器服务器之间。它接收命令并对其进行预处理以旋转到指定的航向,一旦满足条件,就将执行控制转交给主要插件,起到简单的传递作用。
  因此,它的配置与其他插件非常相似。在下面的代码块中,您可以看到我们将 RotationShimController 作为路径跟踪的插件添加到控制器服务器中。您还可以看到我们在下面配置了其内部参数,从 angular_dist_threshold 到 max_angular_accel。

controller_server:ros__parameters:use_sim_time: Truecontroller_frequency: 20.0min_x_velocity_threshold: 0.001min_y_velocity_threshold: 0.5min_theta_velocity_threshold: 0.001progress_checker_plugins: ["progress_checker"] # progress_checker_plugin: "progress_checker" For Humble and oldergoal_checker_plugins: ["goal_checker"]controller_plugins: ["FollowPath"]progress_checker:plugin: "nav2_controller::SimpleProgressChecker"required_movement_radius: 0.5movement_time_allowance: 10.0goal_checker:plugin: "nav2_controller::SimpleGoalChecker"xy_goal_tolerance: 0.25yaw_goal_tolerance: 0.25stateful: TrueFollowPath:plugin: "nav2_rotation_shim_controller::RotationShimController"angular_dist_threshold: 0.785forward_sampling_distance: 0.5rotate_to_heading_angular_vel: 1.8max_angular_accel: 3.2simulate_ahead_time: 1.0

注意:上述代码块是一个示例,其中包含了 RotationShimController 的配置参数。实际应用中,您需要根据您的具体需求进行配置。
angular_dist_threshold:机器人当前朝向与近似路径朝向之间的角度距离(以弧度表示),当机器人在此阈值内时,控制将转交给主要控制器插件。
forward_sampling_distance:从机器人选择一个点以近似路径的起始朝向的距离(以米为单位)。这类似于“前瞻”点。
rotate_to_heading_angular_vel:当激活该行为时,机器人旋转到目标朝向的角速度(以弧度/秒为单位)。
max_angular_accel:当激活该行为时,机器人旋转到目标朝向的角加速度(以弧度/秒²为单位)。
simulate_ahead_time:将旋转命令向前推进以检查碰撞的时间(以秒为单位)。
  还有一个未在上面提到的 RotationShimController 的参数,即 primary_controller 。这是您的应用程序希望用作主要操作方式的控制器类型。它将与 shim 插件具有相同的名称和 yaml 命名空间。下面的示例中,将主要控制器设置为 DWB(为简洁起见,省略了进度检查器和目标检查器)。

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
controller_plugins: ["FollowPath"]
FollowPath:
plugin: "nav2_rotation_shim_controller::RotationShimController"
primary_controller: "dwb_core::DWBLocalPlanner"
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# DWB parameters.........

重要的一点是,在相同的 yaml 命名空间中,您还可以包括适用于主控制器的任何所需参数。因此,在max_angular_accel 之后,您可以包括 DWB 的任何参数以适应您的平台。

参考 navigation2 官方文档
希望对您有所帮助!

这篇关于旋转衬垫控制器 ( Rotation Shim Controller ) 是什么的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/291525

相关文章

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

详解如何在SpringBoot控制器中处理用户数据

《详解如何在SpringBoot控制器中处理用户数据》在SpringBoot应用开发中,控制器(Controller)扮演着至关重要的角色,它负责接收用户请求、处理数据并返回响应,本文将深入浅出地讲解... 目录一、获取请求参数1.1 获取查询参数1.2 获取路径参数二、处理表单提交2.1 处理表单数据三、

Spring Boot Controller处理HTTP请求体的方法

《SpringBootController处理HTTP请求体的方法》SpringBoot提供了强大的机制来处理不同Content-Type​的HTTP请求体,这主要依赖于HttpMessageCo... 目录一、核心机制:HttpMessageConverter​二、按Content-Type​处理详解1.

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

Spring中@RestController和@Controller的使用及区别

《Spring中@RestController和@Controller的使用及区别》:本文主要介绍Spring中@RestController和@Controller的使用及区别,具有很好的参考价... 目录Spring中@RestController和@Controller使用及区别1. 基本定义2. 使

css实现图片旋转功能

《css实现图片旋转功能》:本文主要介绍了四种CSS变换效果:图片旋转90度、水平翻转、垂直翻转,并附带了相应的代码示例,详细内容请阅读本文,希望能对你有所帮助... 一 css实现图片旋转90度.icon{ -moz-transform:rotate(-90deg); -webkit-transfo

Qt QWidget实现图片旋转动画

《QtQWidget实现图片旋转动画》这篇文章主要为大家详细介绍了如何使用了Qt和QWidget实现图片旋转动画效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、效果展示二、源码分享本例程通过QGraphicsView实现svg格式图片旋转。.hpjavascript

poj 2187 凸包or旋转qia壳法

题意: 给n(50000)个点,求这些点与点之间距离最大的距离。 解析: 先求凸包然后暴力。 或者旋转卡壳大法。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <s

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)

1、MVC MVC(Model-View-Controller) 是一种常用的架构模式,用于分离应用程序的逻辑、数据和展示。它通过三个核心组件(模型、视图和控制器)将应用程序的业务逻辑与用户界面隔离,促进代码的可维护性、可扩展性和模块化。在 MVC 模式中,各组件可以与多种设计模式结合使用,以增强灵活性和可维护性。以下是 MVC 各组件与常见设计模式的关系和作用: 1. Model(模型)