当前位置: 首页 > news >正文

运动控制 双轮差速模型轨迹规划

文章目录

  • 一、轨迹规划
    • 1.1轨迹平滑与轮迹
    • 1.2 目标距离
    • 1.3 速度限制
    • 1.4 候选速度的计算与调整
    • 1.5 路径生成
  • 二、双轮轨迹
    • 2.1 计算梯度
    • 2.2 计算偏移轨迹
    • 2.3 返回结果

一、轨迹规划

1.1轨迹平滑与轮迹

  • 初始时,我们有一条由若干坐标点构成的机器人运行路径。通过对这些坐标点进行插值,我们可以得到一个更加平滑的轨迹,使得机器人在移动时能够更平稳地过渡。
  • 接着,我们基于这条中心轨迹,计算出左轮和右轮的轨迹。这是通过向中心轨迹的左侧和右侧分别偏移一定宽度来实现的。
    轨迹平滑

1.2 目标距离

  • 对于中心轨迹以及左轮和右轮的轨迹,我们分别计算出每个点到终点的距离。这个距离是为了确保机器人在接近终点时能够逐渐减速并停下来。
  • 同时,我们还计算出每个点到其下一个点的距离。这个距离将用于后续的速度计算。

1.3 速度限制

  • 对于轨迹上的每个点,我们都根据当前速度、最大速度限制、最大加速度以及到下一个点和终点的距离,计算出三个速度限制:最大速度限制(max_v)、基于到下一个点距离的加速限制速度(max_v_acc)和基于到终点距离的减速限制速度(max_v_dec)。
  • 注:相邻两个点之间计算max_v_acc时,以前一点的速度计算下一点能达到的最大速度 (v^2 = u^2 + 2ax)。
  • 然后,我们选择这三个速度限制中的最小值作为该点的最大允许速度。

1.4 候选速度的计算与调整

  • 在计算出中心轨迹上每个点的最大允许速度后,我们得到一个候选速度。这个速度是基于中心轨迹的当前速度、最大速度限制、最大加速度以及到下一个点和终点的距离来计算的。
  • 接着,我们根据左轮和右轮轨迹上对应点的距离比例,将候选速度分配到左轮和右轮上,得到左轮和右轮的候选速度。
  • 如果左轮或右轮的候选速度超过了它们各自的最大允许速度,我们就需要对候选速度进行调整。调整的原则是:确保左轮和右轮的速度都不会超过它们的最大允许速度,并且尽量保持中心轨迹的速度不变。
  • 调整后的候选速度被用作当前点的实际速度,并更新到结果路径中。

1.5 路径生成

  • 经过上述计算,我们得到了一个包含每个点速度和位置的结果路径。这个路径考虑了机器人的最大速度限制、最大加速度以及左轮和右轮的速度限制。
  • 最后,我们在结果路径的末尾添加了一个速度为0的点,表示机器人已经完全停止。

二、双轮轨迹

2.1 计算梯度

  • 首先遍历中心轨迹上的每个点(除了最后一个点),计算相邻两点之间的差值(即位移向量)。
  • 使用atan2函数,根据位移向量的y分量和x分量计算出每段轨迹的倾斜角度(即梯度)。这个角度表示了轨迹在该点的切线方向。
  • 为了确保最后一段轨迹也有一个梯度值,将最后一个计算出的梯度值复制到梯度数组的末尾。

2.2 计算偏移轨迹

  • 接着创建一个新的路径(即偏移轨迹),这个路径将包含与中心轨迹相同数量的点。
  • 对于中心轨迹上的每个点,根据该点的梯度值和给定的偏移量(offset),计算出偏移轨迹上对应点的坐标。这个计算过程考虑了是计算左轮轨迹还是右轮轨迹(通过left参数来控制)。
    • 如果是计算左轮轨迹,会给梯度值加上90度(即M_PI / 2.0),这样计算出的偏移点就会位于中心点的左侧。
    • 如果是计算右轮轨迹,会给梯度值减去90度(即-M_PI / 2.0),这样计算出的偏移点就会位于中心点的右侧。
  • 使用三角函数(cos和sin)和偏移量,计算出偏移轨迹上每个点的x坐标和y坐标。
  • 最后,将计算出的偏移点添加到偏移轨迹中。

2.3 返回结果

  • 返回计算出的偏移轨迹,这个轨迹是一系列坐标点构成的路径,表示了左轮或右轮的行驶轨迹。
http://www.lryc.cn/news/476619.html

相关文章:

  • 使用 Sortable.js 库 实现 Vue3 elementPlus 的 el-table 拖拽排序
  • MySQL索引相关介绍及优化(未完...)
  • 【AI+教育】一些记录@2024.11.04
  • 三维测量与建模笔记 - 2.2 射影几何
  • 论文速读:简化目标检测的无源域适应-有效的自我训练策略和性能洞察(ECCV2024)
  • ros与mqtt相互转换
  • Golang | Leetcode Golang题解之第522题最长特殊序列II
  • 安卓开发之数据库的创建与删除
  • 数据结构:LRUCache
  • shell脚本案例:创建用户和组
  • C++笔试题之实现一个定时器
  • 【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-13
  • 快消零售行业的培训创新:构建在线培训知识库
  • 【AI开源项目】Botpress - 开源智能聊天机器人平台及其部署方案
  • 一文读懂系列:SSL加密流量检测技术详解
  • Android Studio各种历史版本
  • 大数据导论及分布式存储HadoopHDFS入门
  • 语言模型的采样方法
  • 使用 Nginx 配置真实 IP 地址转发
  • WPF+MVVM案例实战与特效(二十四)- 粒子字体效果实现
  • Oracle视频基础1.4.3练习
  • energy 发布 v2.4.5
  • 一文详解工单管理系统,工单系统是什么意思
  • 【无标题】基于SpringBoot的母婴商城的设计与实现
  • 你需要了解的Android主题相关知识
  • 基于Multisim数控直流稳压电源电路(含仿真和报告)
  • 精读预告Bigtable
  • 软件架构演变:从单体架构到LLM链式调用
  • Redis-“自动分片、一定程度的高可用性”(sharding水平拆分、failover故障转移)特性(Sentinel、Cluster)
  • 操作系统(9) (并发-----原子性/互斥临界区/生产者消费者问题/临界区问题三条件/互斥性/进展性/公平性)