旋转衬垫控制器 ( 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

相关文章

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(模型)

二维旋转公式

二维旋转公式 ros的tf工具包可以很方便的实现任意坐标系之间的坐标转换。但是,如果只是想简单的测试想法,而又不想编写过于庞杂的代码,考虑自己写二维旋转的函数。而与二维旋转问题对偶的另一个问题便是二维坐标系旋转变换。这两个问题的形式基本一样,只是旋转的角度相差一个负号。就是这个容易搞混,所以做个笔记,以备查用。 1. 二维旋转公式(算法) 而(此文只针对二维)旋转则是表示某一坐标点 ( x

jmeter之仅一次控制器

仅一次控制器作用: 不管线程组设置多少次循环,它下面的组件都只会执行一次 Tips:很多情况下需要登录才能访问其他接口,比如:商品列表、添加商品到购物车、购物车列表等,在多场景下,登录只需要1次,我们期望的是重复执行登陆后面的接口来做压测,这就和事务相关,例如 事务1: 登录—>添加购物车 事务2: 登录—>购物车列表 事务3: 登录—>商品列表—>添加购物车 … 一、仅一次控制器案例 在

算法复杂度 —— 数据结构前言、算法效率、时间复杂度、空间复杂度、常见复杂度对比、复杂度算法题(旋转数组)

目录 一、数据结构前言 1、数据结构 2、算法 3、学习方法 二、 算法效率 引入概念:算法复杂度  三、时间复杂度 1、大O的渐进表示法 2、时间复杂度计算示例  四、空间复杂度 计算示例:空间复杂度 五、常见复杂度对比 六、复杂度算法题(旋转数组) 1、思路1 2、思路2 3、思路3 一、数据结构前言 1、数据结构         数据结构(D

为控制器的方法添加必要参数

前言:做这个系统时,要求每次调用接口时要传操作人、操作人电脑ip、菜单id,然后计入log。本来前端读取到然后加入请求头,后端写入log即可。但是老大要求后端也要把控必传参数,避免前端忘记。所以就写了这个。IOperationFilter 这个是百度知道的。主要用于在Swagger生成的API文档中动态地添加或修改操作(即API接口)的元数据。 用处:可以自动地为 Swagger/OpenAPI

IBM Storwize V7000存储控制器故障节点报错574

背景:由于客户机房搬迁,需要下电迁移设备。该存储自2016年投入生产使用后,从未关过机,已正常运行七八年时间,期间只更换过硬盘,无其他硬件故障。 在GUI界面点击关闭系统后,大概等了40分钟,存储仍未关机,所有硬盘状态灯绿色常亮,面板无报错。到设备后面看控制器的状态,发现node2已经正常关机了,node1仍然在运行,又等了大概20分钟还没有关机,直接将电源线给拔掉了。 再次上电以后,发现

计算几何之向量旋转

实际做题中我们可能会遇到很多有关及计算几何的问题,其中有一类问题就是向量的旋转问题,下面我们来具体探讨一下有关旋转的问题。 首先我们先把问题简化一下,我们先研究一个点绕另一个点旋转一定角度的问题。已知A点坐标(x1,y1),B点坐标(x2,y2),我们需要求得A点绕着B点旋转θ度后的位置。 A点绕B点旋转θ角度后得到的点,问题是我们要如何才能得到A' 点的坐标。(向逆时针方向旋转角度正,

Spring 注解(@Repository 、@Service 和 @Controller )

Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository、@Service 和 @Controller 。         在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层 、业务层 和控制层 相对应。虽然目前这 3 个注释和 @