Reeds-Shepp曲线基础运动公式推导过程

news2024/11/15 12:07:16

   本文是对之前文章“Reeds-Shepp曲线学习笔记及相关思考【点击可跳转】”的补充,因小伙伴的提问,本文补充介绍上述文章第三部分中基础运动公式的推导过程。

   本文以上面的第一个公式为例进行介绍,即Reeds-Shepp曲线基础运动中的向前左转运动,其他五个可根据第一个的过程,以此类推。

   现假设机器人位于S点处横纵坐标分别为x、y,与x轴夹角为ψ,因此,机器人在S点的状态可以表示为(x,y,ψ),执行L+基础运动前行左转弧长t后,到达G点。求机器人在G点的状态,根据第一个公式可得G点的状态如下:。

   G : ( x + sin ⁡ ( ψ + t ) − sin ⁡ ( ψ ) , y − cos ⁡ ( ψ + t ) + cos ⁡ ( ψ ) , ψ + t ) G:\left(x+\sin(\psi+t)-\sin(\psi),y-\cos(\psi+t)+\cos(\psi),\psi+t\right) G(x+sin(ψ+t)sin(ψ),ycos(ψ+t)+cos(ψ),ψ+t)

   现在我们来推导一下这个结果是怎么来的,为方便理解,我绘制了以下示意图,图中大写字母是为了方便对图中的边和角进行描述,图中的小写字母是角度。


   G点的第三个状态是与x轴的夹角,执行L+运动之前为ψ, 由于是向前左转,也就是逆时针运动,逆时针运动为正,又因为L+运动向前左转了弧长t,在之前的文章“Reeds-Shepp曲线学习笔记及相关思考【点击可跳转】”中已介绍过计算时会将最小转弯半径归一化为1,即上图中边FG和边FS的长度为1,弧长=弧长圆心角x半径,所以弧长t也对应转过的弧度制角度,因此G点与x轴的夹角为ψ+t

   接下来介绍稍微复杂一点的前两个状态的推导过程,由上图容易知道,G点的横纵坐标 x g 、 y g x_g、y_g xgyg满足下式:

   x g = x + G S ∗ cos ∠GSA y g = y + G S ∗ sin ∠GSA ; x_g=x+GS*\text{cos ∠GSA} \hspace{1cm} y_g=y+GS*\text{sin ∠GSA} ; xg=x+GScos ∠GSAyg=y+GSsin ∠GSA;

   所以我们只要求得边GS的长度和∠GSA即可求得 x g 、 y g x_g、y_g xgyg

   我们先来求边GS,现在我们已知∠GFS=t,边GF=边FS=1,由余弦公式 c 2 = a 2 + b 2 − 2 a b cos ⁡ γ c^2=a^2+b^2-2ab\cos\gamma c2=a2+b22abcosγ得,边GS的长度为:

   G S 2 = G F 2 + F S 2 − 2 ∗ G F ∗ F S ∗ cos ∠GFS = 1 + 1 − 2 ∗ cos t = 2 ( 1 − cos t ) GS^2=GF^2+FS^2-2*GF*FS*\text{cos ∠GFS}=1+1-2*\text{cos t}=2(1-\text{cos t}) GS2=GF2+FS22GFFScos ∠GFS=1+12cos t=2(1cos t)

   由半角公式 sin ⁡ α 2 = ± 1 − cos ⁡ α 2 \sin\dfrac{\alpha}{2}=\pm\sqrt{\dfrac{1-\cos\alpha}{2}} sin2α=±21cosα 得,上式可化为:

   G S 2 = 2 ( 1 − cos t ) = 4 ∗ sin ⁡ 2 t 2 GS^2=2(1-\text{cos t})=4*\sin^{2}\frac{t}{2} GS2=2(1cos t)=4sin22t
   所以:

   G S = 4 ∗ sin ⁡ 2 t 2 = 2 ∗ s i n t 2 GS=\sqrt{4∗\sin^{2}\frac{t}{2}}=2*sin\frac{t}{2} GS=4sin22t =2sin2t


   我们再来求∠GSA,过程如下:
   ∠GSC=(π–∠GCS)/ 2 = (π–(π–t))/ 2 = t 2 \text{∠GSC=(π--∠GCS)/ 2 = (π--(π--t))/ 2}= \frac{t}{2} ∠GSC=π–∠GCS/ 2 = π–π–t))/ 2=2t

   ∠GSA=∠GSC+∠CSA = t 2 + ψ \text{∠GSA=∠GSC+∠CSA}= \frac{t}{2}+ψ ∠GSA=∠GSC+∠CSA=2t+ψ


   将求得的边GS和∠GSA带入,可得G点的横纵坐标 x g 、 y g x_g、y_g xgyg的表达式:

   x g = x + G S ∗ cos ∠GSA = x + 2 ∗ s i n t 2 ∗ cos ⁡ ( t 2 + ψ ) x_g=x+GS*\text{cos ∠GSA} =x+ 2*sin\frac{t}{2} *\cos \left(\frac{t}{2}+\psi\right) xg=x+GScos ∠GSA=x+2sin2tcos(2t+ψ)

   y g = y + G S ∗ sin ∠GSA = y + 2 ∗ s i n t 2 ∗ sin ⁡ ( t 2 + ψ ) y_g=y+GS*\text{sin ∠GSA}=y+ 2*sin\frac{t}{2} *\sin \left(\frac{t}{2}+\psi\right) yg=y+GSsin ∠GSA=y+2sin2tsin(2t+ψ)

   最后再运用一下如下所示的积化和差公式:

   利用积化和差公式,我们可以对 x g 、 y g x_g、y_g xgyg的表达式进一步化简,如下:

   x g = x + 2 ∗ s i n t 2 ∗ cos ⁡ ( t 2 + ψ ) = x + s i n ( t 2 + t 2 + ψ ) + s i n ( t 2 − t 2 − ψ ) = x + s i n ( t + ψ ) − s i n ( ψ ) x_g=x+ 2*sin\frac{t}{2} *\cos \left(\frac{t}{2}+\psi\right)=x+sin(\frac{t}{2} +\frac{t}{2}+ψ)+sin(\frac{t}{2} -\frac{t}{2}-ψ)=x+sin(t+ψ)-sin(ψ) xg=x+2sin2tcos(2t+ψ)=x+sin(2t+2t+ψ)+sin(2t2tψ)=x+sin(t+ψ)sin(ψ)

   y g = y + 2 ∗ s i n t 2 ∗ sin ⁡ ( t 2 + ψ ) = y + c o s ( t 2 − t 2 − ψ ) − c o s ( t 2 + t 2 + ψ ) = y − c o s ( t + ψ ) + c o s ( ψ ) y_g=y+ 2*sin\frac{t}{2} *\sin \left(\frac{t}{2}+\psi\right) =y+cos(\frac{t}{2} -\frac{t}{2}-ψ)-cos(\frac{t}{2} +\frac{t}{2}+ψ)=y-cos(t+ψ)+cos(ψ) yg=y+2sin2tsin(2t+ψ)=y+cos(2t2tψ)cos(2t+2t+ψ)=ycos(t+ψ)+cos(ψ)


   到这里,我们已经得到了推导前给出的G点的状态表达式:

   G : ( x + sin ⁡ ( ψ + t ) − sin ⁡ ( ψ ) , y − cos ⁡ ( ψ + t ) + cos ⁡ ( ψ ) , ψ + t ) G:\left(x+\sin(\psi+t)-\sin(\psi),y-\cos(\psi+t)+\cos(\psi),\psi+t\right) G(x+sin(ψ+t)sin(ψ),ycos(ψ+t)+cos(ψ),ψ+t)

   也就是,文章开头处给出的第一个Reeds-Shepp曲线的基础运动公式:

   L t + ( x , y , ψ ) = ( x + sin ⁡ ( ψ + t ) − sin ⁡ ( ψ ) , y − cos ⁡ ( ψ + t ) + cos ⁡ ( ψ ) , ψ + t ) L_t^+(x,y,\psi)\quad=\big(x+\sin(\psi+t)-\sin(\psi),y-\cos(\psi+t)+\cos(\psi),\psi+t\big) Lt+(x,y,ψ)=(x+sin(ψ+t)sin(ψ),ycos(ψ+t)+cos(ψ),ψ+t)

   恭喜小伙伴们(✪ω✪),到这里也就证明,或者说推导就完毕了,有兴趣的小伙伴,可以以此为例子,进行其余五个Reeds-Shepp曲线基础运动公式的推导(ง •_•)ง


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

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

相关文章

JDK 17 史诗级JVM调优

文章目录 JDK 17 之 JVM调优 史诗级 教程 1 调优层次2 调优指标3 JVM调优原则3.1 优先原则3.2 堆设置3.3 年轻代设置3.4 老年代设置3.5 方法区设置3.6 GC设置3.6.1 GC发展阶段3.6.2 G1的适用场景3.6.3 其他收集器适用场景4 JVM调优步骤4.1 监控分析4.1.1 如何生成GC日志4.1.2 …

python + pandas 如何实现web网页的断点连续采集

目录 一、实战场景 二、知识点 python 基础语法 python 文件读写 pandas 数据处理 web 连续采集 三、菜鸟实战 列表页断点连续采集基本思路 基本思路 网页列表页断点连续采集实现 Pandas 保存数据 csv 文件 详情页断点采集思路 基本思路 网页详情页断点连续采集代…

RealWorldCTF2023体验赛 部分WEB

WEB 🐑了拼🐑 拼图或者直接搜索js文件代码 Evil Mysql Server Mysql恶意服务器读取文件,MySQL_Fake_Server或者Rogue-MySql-Server直接读文件,填写vps的ip端口让服务器连接。 Be-a-Language-Expert 前段时间thinkphp6 多语言…

初级软件测试面试会问什么 拿好这些问题的标准答案,offer不在话下

随着互联网的不断发展,企业对于IT方面的人才需求也越来越大,在追求人才数量的同时,也注重人才质量。而面试就成为把握质量的拦门砖,因此,你想要走心仪的公司,那么你在面试中的表现将会直接决定你求职的成败…

C++ 语法基础课7 —— 类、结构体、指针、引用

文章目录1. 类和结构体1.1 类的定义1.2 类的使用1.3 结构体1.4 构造函数2. 指针和引用2.1 指针2.2 数组2.3 引用2.4 查询地址3. 链表3.1 添加结点3.2 删除结点1. 类和结构体 1.1 类的定义 class Person {private:int age, height;double money;string books[100];public:stri…

嵌入式系统移植导学

目录 系统移植导学 系统移植过程 Windows装机 Linux系统移植 开发板启动过程 系统移植导学 操作系统:向下管理硬件、向上提供接口 操作系统为我们提供了: 1.进程管理 2.内存管理 3.网络接口 4.文件系统 5.设备管理 那系统移植是干什么呢&am…

Zabbix使用LLD自动发现规则发现监控docker容器(下)

本篇是使用Zabbix监控docker容器下篇。利用ZABBIX自动发现监控功能,在部署zabbix agent客户端的服务器上,编写自定义功能脚本,实现自动获取服务器上运行的docker服务并监控其运行状态。 前提条件 已经部署好的zabbix监控系统 Zabbix服务器…

自动驾驶专题介绍 ———— 惯性导航

文章目录介绍工作原理特点应用场景介绍 惯性导航系统(Inertial Navigation System - INS)是一种不依赖外部输入信息、也不向外辐射能量的自助式导航系统,是通过陀螺仪和加速度计为敏感器件的导航参数解算系统。该系统根据陀螺仪输出建立导航坐…

安全—03day

虚拟主机基于域名、端口、IP访问nginx 一、虚拟主机基于域名访问nginx 1.为虚拟主机提供域名解析 echo "192.168.181.130 www.nj.com www.benet.com" >> /etc/hosts2.为虚拟主机准备网页文档 mkdir -p /var/www/html/benet mkdir -p /var/www/html/nj echo…

linux系统中QT进行文本读写操作的方法

大家好,今天主要和大家聊一聊,利用QT进行文本的读写操作方法。 目录 第一:文本读写基本简介 第二:应用实例 第三:运行效果 第一:文本读写基本简介 有时候我们需要对文件进行读写,比如写个Mp3…

第01讲:Docker入门

一、什么是Docker 1、Docker 是一个开源的应用容器引擎 2、诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc) 3、Docker 是一个可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器引擎&…

Java--集合--经典七道综合练习题

文章目录 一、集合的遍历方式 二、添加数字并遍历 三、添加学生对象并遍历 四、添加学生对象并遍历 五、添加用户对象并判断是否存在 六、添加手机对象并返回要求的数据 七、创建学生管理系统(*****) 一、集合的遍历方式 需求:定义一…

深耕5G云专网,阿里云祝顺民入选“2022年度5G创新人物”

2022 年,5G 商用发展成效显著,正在加速产业数字化,全面赋能经济社会发展。运营商 5G 投资超过 4000 亿元,共带动 8.6 万亿元的经济产出,而这一切离不开奋战在 ICT 行业的 5G 应用推动者。 日前,由中国工信…

分享104个PHP源码,总有一款适合您

PHP源码 分享104个PHP源码,总有一款适合您 链接:https://pan.baidu.com/s/1MnmNb3vsofBnQ4kKoMlSBw?pwdkl4o 提取码:kl4o 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载…

Python学生信息管理系统源码,学生教师端分离,支持数据的增删查改、数据分析与统计 基于Tkinter带图形界面

介绍 Python学生信息管理系统。学生教师端分离,支持数据的增删查改、数据分析与统计。 下载地址:Python学生信息管理系统源码 软件架构 Python3.9版本 Python-Tkinter库开发的图形界面 Python-Pandas库数据处理 Python-matplotlib库数据分析与展示 P…

C语言经典100例(006,007)

题目:用*号输出字母C的图案。 程序分析:可先用*号在纸上写出字母C,再分行输出。 程序源代码: #include "stdio.h" int main() {printf("用 * 号输出字母 C!\n");printf(" ****\n");printf("…

CSS知识点精学7-小兔鲜项目实现案例

一.网页和网站的关系 包含关系 网页和网站的关系就是包含关系,网站包含了很多的网页,网页不能单独存在于网络中。 网站是一个整体,网页是一个个体,一个网站是由很多网页构建而成。就像进入百度网站,里面还有其他许多…

AI作画怎么弄?超详细ai绘画教程在这里

AI作画怎么弄?如何实现将照片生成ai漫画图,如何通过关键词描述生成好看的壁纸、背景?最全最详细教程来了,一分钟学会! 一、将照片生成二次元 我们先打开数画ai绘画软件,在首页这里,点击“相册”…

【Git】Git常用命令

3、Git 常用命令 命令名称作用git config --global user.name 用户名设置用户签名git config --global user.email 邮箱设置用户签名git init初始化本地库git status查看本地库状态git add 文件名添加到暂存区git commit -m “日志信息” 文件名提交到本地库git reflog查看历史…

手写RPC框架06-基于线程和队列提升框架并发处理能力

源代码地址:https://github.com/lhj502819/IRpc/tree/v7 系列文章: 注册中心模块实现路由模块实现序列化模块实现过滤器模块实现自定义SPI机制增加框架的扩展性的设计与实现基于线程和队列提升框架并发处理能力 Server端 现有的问题 目前我们的RPC框…