Gazebo 跟踪8字形和U形轨迹(1) — 错误处理

news2025/3/12 13:03:15

Gazebo 跟踪8字形和U形轨迹(1) — 错误处理

整个过程还是比较曲折的,主要都是一些细小的问题,跑了很多遍模型才发现

参考轨迹生成问题不大,主要是参考横摆角和参考曲率部分有问题

atan和atan2

首先看下两者的区别

atan 函数:

  • atan 函数是简单的反正切函数,接受一个参数(通常是 y/x)
  • 在 MATLAB 中,atan 函数的语法是 atan(Y/X),其中 Y 和 X 是两个数值
  • 返回值的范围是 (-π/2, π/2)

atan2 函数:

  • atan2 函数是带有两个参数的反正切函数,接受两个参数(y 和 x)
  • 在 MATLAB 中,atan2 函数的语法是 atan2(Y, X),其中 Y 和 X 是两个数值
  • 返回值的范围是 (-π, π],因此它能够提供更广泛的角度范围,而且能够正确处理 x 和 y 同时为零的情况

在这里插入图片描述

四象限反正切 atan2(Y,X) 基于图形中所示的 Y 和 X 的值返回闭区间 [-pi,pi] 中的值

在这里插入图片描述

之前的路径规划时用 atan 计算参考路径点的横摆角,以圆形轨迹为例

clc;
clear all;

% [xr, yr, thetar, kr] = buildDoubleLane(150);
% [xr, yr, thetar, kr] = buildPassLane(20,2,30);
% [xr, yr, thetar, kr] = buildCurveEight(1000,10,10);
% [xr, yr, thetar, kr] = buildUShapePath(10,5,300);
[xr, yr, thetar, kr] = buildCircle(10,1000);

%% 圆形轨迹
function [xr, yr, thetar, kr] = buildCircle(radius,nums)
    t = linspace(0,2*pi,nums);
    xr = radius*cos(t);
    yr = radius*sin(t);
    dx_dt = -radius*sin(t);
    dy_dt = radius*cos(t);
    % 计算偏航角
    thetar = atan2(dy_dt,dx_dt);
    % 计算曲率
    kr = abs(dx_dt.*dy_dt)./(dx_dt.^2 + dy_dt.^2).^(3/2);
end

在这里插入图片描述

用 atan 函数所有点的参考横摆角如下图

在这里插入图片描述

用 atan2 函数所有点的参考横摆角如下图

在这里插入图片描述

考虑到移动机器人实际运动中横摆角范围就是[-pi,pi],因此参考路径也采用 atan2 函数

另一方面,Pure-Pursuit 中计算 alpha 时需要减去当前横摆角,因此当前位置与目标点间夹角的计算也应采用 atan2 函数

alpha = atan2((ty-y),(tx-x))-phi;       %该处定义向左转为alpha=beta-Fai,所以向右转就输出-alpha

单位换算

中午测试 stanley 测试出来的,真的是很细小的问题,感觉之前 LQR 跟踪超车轨迹跟这个也有关系

在这里插入图片描述

PP、Stanley、LQR 都进行了 km/h → m/s,以及 deg→rad,但是 Gazebo 输出的状态信息都是换算过的,再换算相当于进行了很大的缩小,导致跟踪效果变差甚至跟踪失败

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1299908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能监控型电源老化房方案

电源适配器专用老化房主要适用于充电器等电源成品(半成品)作一般性老化测试。其负载主体采用程控式电子负载,保证其稳定度和可调节性。该老化车配备电脑操作监控系统。 模拟量采集/老化房采集软件 一、老化房功能: 1 负载主体&am…

32.768KHz时钟RTC晶振精度PPM值及频差计算

一个数字电路就像一所城市的交通,晶振的作用就是十字路口的信号灯,因此晶振的品质及其电路应用尤其关键。数字电路又像生命体,它的运行就像人身体里的血液流通,它不是由单一的某个器件或器件单元构成,而是由多个器件及…

xtts和ogg不选择?

不选择ogg的理由: 1.需要在源端创建用户赋权,启用数据库最小日志,附加日志等操作--对生产影响较大 2.外键约束过多,割接启用可能很慢https://www.modb.pro/db/201126--割接停机时间影响 3.初始化配置expdp导出可能快照过旧&#x…

11.光线追踪

1.为什么要引入光线追踪 光栅化阶段有些全局效果做的并不好,首先不太好做软阴影,然后是类镜面反射,表面很光滑但是又达不到镜面反射那么光滑,光线反射到这类物体上之后会经过好几次反射,其次是间接光照,光…

File has been changed outside the editor, reload?

编译keil工程,一直提示:该文件在编译器之外被修改,是否重新加载。 解决办法: 关闭.map后缀的文件即可,然后重新build/rebulid可以发现不会重新弹出该错误。

数据集成和人工智能驱动的见解

数字时代使数据成为人们关注的焦点,将其从单纯的二进制序列转变为有价值的组织资产。随着企业越来越多地转向数据驱动战略,数据管理的复杂性也随之增加。当前的任务不仅仅是存储甚至收集数据,而是将其转化为可操作的情报。本博客旨在剖析寻求…

【漏洞复现】华脉智联指挥调度平台命令执行漏洞

Nx01 产品简介 深圳市华脉智联科技有限公司,融合通信系统将公网集群系统、专网宽带集群系统、不同制式、不同频段的短波/超短波对讲、模拟/数字集群系统、办公电话系统、广播系统、集群单兵视频、视频监控系统、视频会议系统等融为一体,集成了专业的有线…

Weblogic-wls-wsat-unserialize_CVE-2017-10271

文章目录 Weblogic < 10.3.6 wls-wsat XMLDecoder 反序列化漏洞1. 漏洞描述2. 漏洞复现2.1 环境启动2.2 漏洞扫描2.3 漏洞验证 3. 修复建议 Weblogic < 10.3.6 ‘wls-wsat’ XMLDecoder 反序列化漏洞 1. 漏洞描述 说明内容漏洞编号CVE-2017-10271漏洞名称Weblogic <…

【牛牛送书 | 第三期】《一本书讲透Java线程:原理与实践》带你深入JAVA多线程

目录 摘要&#xff1a; 多线程对于Java的意义 为什么Java工程师必须掌握多线程 Java多线程使用方式 如何学好Java多线程 参与方式&#x1f947; 摘要&#xff1a; 互联网的每一个角落&#xff0c;无论是大型电商平台的秒杀活动&#xff0c;社交平台的实时消息推送&#x…

10--面向对象OOP--05

1、代码块 如果成员变量想要初始化的值不是一个硬编码的常量值&#xff0c;而是需要通过复杂的计算或读取文件、或读取运行环境信息等方式才能获取的一些值&#xff0c;该怎么办呢&#xff1f;此时&#xff0c;可以考虑代码块&#xff08;或初始化块&#xff09;。 代码块(或…

JVM 分析GC日志

GC日志参数 -verbose:gc 输出gc日志信息&#xff0c;默认输出到标准输出 -XX:PrintGC 输出GC日志。类似&#xff1a;-verbose:gc -XX:PrintGCDetails 在发生垃圾回收时打印内存回收详细的日志&#xff0c;并在进程退出时输出当前内存各区域分配情况 -XX:PrintGCTimeStam…

【力扣】141和142环形链表

141.环形链表 法一&#xff1a;快慢指针 思路&#xff1a; 用两个指针slow,fast,后者能比前者多走一步路&#xff0c;那判断是不是有环&#xff0c;只需要判断是否会相遇。 就是有一个能比乌龟跑2倍快的兔子&#xff0c;两小只都在有环的路上跑&#xff0c;那是不是肯定会相…

【基于NLP的微博情感分析:从数据爬取到情感洞察】

基于NLP的微博情感分析&#xff1a;从数据爬取到情感洞察 背景数据集技术选型功能实现创新点 今天我将分享一个基于NLP的微博情感分析项目&#xff0c;通过Python技术、NLP模型和Flask框架&#xff0c;对微博数据进行清洗、分词、可视化&#xff0c;并利用NLP和贝叶斯进行情感分…

【51单片机系列】独立按键介绍

本文是关于独立按键的介绍及使用。首先介绍了按键&#xff0c;包括什么是按键及使用按键时如何实现软件消抖。然后使用proteus仿真实现独立按键控制LED指示灯的操作。 之前的LED、蜂鸣器、数码管中IO口都是作为输出使用&#xff0c;这里通过独立按键实验介绍IO口作为输入的使用…

web,Apache简述

一.HTTP请求访问的完整过程 1.建立连接 2.接收请求 3.处理请求 4.访问资源 服务器获取请求报文中请求的资源web服务器&#xff0c;即存放了web资源的服务器&#xff0c;负责向请求者提供对方请求的静态资源&#xff0c;或动态运行后生成的资源 静态资源&#xff1a;不需要…

如何使用bash写脚本

本章主要介绍如何使用bash写脚本。 了解通配符了解变量了解返回值和数值运算数值的对比判断语句循环语句 grep的用法是“grep 关键字 file”&#xff0c;意思是从file中过滤出含有关键字的行。 例如&#xff0c;grep root /var/log/messages&#xff0c;意思是从/var/log/me…

C++笔记之C语言中的换行符和转义符

C笔记之C语言中的换行符和转义符 文章目录 C笔记之C语言中的换行符和转义符 在C语言中&#xff0c;换行符和转义符用于在字符串和字符常量中表示特殊字符。下面是关于换行符和转义符的解释&#xff1a; 换行符&#xff08;Newline character&#xff09;&#xff1a; 在C语言中…

前端知识(十三)——JavaScript监听按键,禁止F12,禁止右键,禁止保存网页【Ctrl+s】等操作

禁止右键 document.oncontextmenu new Function("event.returnValuefalse;") //禁用右键禁止按键 // 监听按键 document.onkeydown function () {// f12if (window.event && window.event.keyCode 123) {alert("F12被禁用");event.keyCode 0…

MySQL Server 层和引擎层是如何交互的

Server 层、引擎层、BufferPool、磁盘间的关系 大体来说&#xff0c; MySQL可以分为Server层和存储引擎层两部分。 1&#xff09;Server 层&#xff1a;Server 层包括连接器、查询缓存、分析器、优化器、执行器等&#xff0c;涵盖MySQL的大多数核心服务功能&#xff0c;以及所…

FaceBook推出新的翻译模型Seamless!可实现跨语言交流的无缝衔接!

FaceBook **&#xff08;中文名&#xff1a;脸书&#xff09;**近期发布了一个新的翻译模型 Seamless Communication&#xff0c;可实现跨语言实时"无缝"交流。 该模型可以保留跨语言的表达方式和复杂性&#xff08;翻译时保留语音中的停顿和语速&#xff0c;以及声…