动手学运动规划: 2.2.c 3次样条曲线代码解析

学习? 学个P!☺ — 亮剑 李云龙

🏰代码及环境配置:请参考 环境配置和代码运行!


本节提供了3次样条曲线的代码测试

python3 tests/curves/cubic_spline.py

2.2.c.1 3次样条曲线代码实现

CubicSpline1D实现了1维的3次样条曲线, 需要输入一组离散点. CubicSpline1D会计算两个点之间的3次多项式.

class CubicSpline1D:def __init__(self, x, y):h = np.diff(x)if np.any(h < 0):raise ValueError("x coordinates must be sorted in ascending order")self.a, self.b, self.c, self.d = [], [], [], []self.x = xself.y = yself.nx = len(x)  # dimension of x# calc coefficient aself.a = [iy for iy in y]# calc coefficient cA = self.__calc_A(h)B = self.__calc_B(h, self.a)self.c = np.linalg.solve(A, B)# calc spline coefficient b and dfor i in range(self.nx - 1):d = (self.c[i + 1] - self.c[i]) / (3.0 * h[i])b = 1.0 / h[i] * (self.a[i + 1] - self.a[i]) - h[i] / 3.0 * (2.0 * self.c[i] + self.c[i + 1])self.d.append(d)self.b.append(b)

它同样提供了计算0阶, 1阶, 2阶导数的接口

    def calc_position(self, x):if x < self.x[0]:return Noneelif x > self.x[-1]:return Nonei = self.__search_index(x)dx = x - self.x[i]position = (self.a[i] + self.b[i] * dx + self.c[i] * dx**2.0 + self.d[i] * dx**3.0)return positiondef calc_first_derivative(self, x)if x < self.x[0]:return Noneelif x > self.x[-1]:return Nonei = self.__search_index(x)dx = x - self.x[i]dy = self.b[i] + 2.0 * self.c[i] * dx + 3.0 * self.d[i] * dx**2.0return dydef calc_second_derivative(self, x):if x < self.x[0]:return Noneelif x > self.x[-1]:return Nonei = self.__search_index(x)dx = x - self.x[i]ddy = 2.0 * self.c[i] + 6.0 * self.d[i] * dxreturn ddy

对于2维的3次样条曲线, 只需要在(x, y)上分别构造参数方程即可.

2.2.c.2 3次样条曲线代码测试

  • 1维的3次样条曲线

main_1d()中, 我们提供了一组1维点, 构造CubicSpline1D即可.

  • 2维的3次样条曲线

main_2d()中, 我们提供了一组(x,y)点, 分别在x,y上构造CubicSpline1D.

这条曲线的航向角和曲率如下图:


🏎️自动驾驶小白说官网:https://www.helloxiaobai.cn

🐮GitHub代码仓:https://github.com/Hello-Xiao-Bai/Planning-XiaoBai!

🔥课程答疑,面试辅导:https://shop380995420.taobao.com

🌠代码配合官网教程食用更佳!

🚀知乎,微信,知识星球全平台同号!

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

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

相关文章

主存储器——随机存取存储器RAM

静态RAM 双稳态触发器 一、工作特性 两种稳定状态&#xff1a; 双稳态触发器具有两个稳定的输出状态&#xff0c;通常表示为 0 和 1&#xff08;或低电平和高电平&#xff09;。这两个状态可以长期保持&#xff0c;即使在没有输入信号的情况下&#xff0c;也不会自发地改变。 例…

Study-Oracle-10-ORALCE19C-RAC集群搭建

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。 ORACLE --RAC 搭建理念:准备工作要仔细,每个参数及配置都到仔细核对。环境准备完成后,剩下的就是图像化操作,没啥难度,所以图形化操作偷懒不续写了。 一、硬件信息及配套软件 1、硬件设置 RA…

C++初阶:STL详解(十)——priority_queue的介绍,使用以及模拟实现

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C&#xff1a;由浅入深篇 小新的主页&#xff1a;编程版小新-CSDN博客 一.priority_queue的介绍 优先级队列被实现…

手把手教你激活水果音乐制作软件FLStudio Producer Edition 24.1.1.4285 All Plugins汉化中文专业版下载

软件介绍 lmage-Line FL Studio 是由 lmage-Line 公司所开发的一款音乐制作软件&#xff0c;又名:水果音乐。你可以使用FL Studio 软件进行编写&#xff0c;编辑&#xff0c;录制&#xff0c;编辑以及混音和母带制作音乐&#xff0c;目前是世界上最受欢迎的音乐制作工具之一。…

【Linux】Shell脚本基础+条件判断与循环控制

目录 一、介绍 1. Linux提供的Shell解析器 2. bash和sh关系 3. Centos默认的Shell解析器是bash 二、定义 1. 变量名的定义规则 2. 等号周围没有空格 3. 查看变量 4. 删除变量 5. 正确地定义数组 6. 将局部环境变量提升为全局 7. 正确选择引号 8. 特殊变量名 三…

python 开发中识别和解决内存泄漏的技巧

Python 的内存管理是非常优秀的&#xff0c;它使用了自动垃圾回收机制。然而&#xff0c;在某些情况下&#xff0c;内存泄漏依然可能发生。这通常是在复杂的对象引用和循环引用的情境下容易出现&#xff0c;特别是涉及全局变量或不当的引用管理时。内存泄漏问题虽然并不常见&am…

Linux线程(二)线程ID及创建线程详解

1.线程ID 就像每个进程都有一个进程 ID 一样&#xff0c;每个线程也有其对应的标识&#xff0c;称为线程 ID。进程 ID 在整个系统中是唯一的&#xff0c;但线程 ID 不同&#xff0c;线程 ID 只有在它所属的进程上下文中才有意义。 进程 ID 使用 pid_t 数据类型来表示&#xf…

记录cocoscreater3.8.x设置2d卡牌圆角

引擎版本&#xff1a;Cocos Creater3.8.3版本 1.在Card节点上添加Mask组件&#xff0c;类型选择 2.在Card节点上绑定CardController.ts脚本 3.在CardController.ts编写圆角脚本&#xff0c;其实就是动态绘制Graphics组件 import { _decorator, Color, Component, Graphics, …

排序01 多目标模型

引入 使用机器学习方法对指标做预估&#xff0c;再对预估分数做融合。融合方法&#xff1a;加权和方法给不同指标赋予不同的权重&#xff0c;权重是做A/B test调试得到的。还有更好地融合方法。 多目标模型 排序模型的输入是各种各样的特征&#xff0c;用户特征主要是用户id和…

ADRC与INDI的关系

ADRC与INDI的关系 前言 一直热衷于把一些基础的东西想明白&#xff0c;这样才能更好地理解一些稍微复杂些的算法&#xff0c;在深入理解这些算法后才能更好地应用。 例如 用回路成型方法探究ADRC各参数对闭环系统的影响对比KF和RLS的关系互补滤波的原理以及参数整定&#xf…

【Python报错已解决】TypeError: not enough arguments for format string

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

C++【类和对象】(再探构造函数、类型转换与static成员)

文章目录 1. 再探构造函数2. 类型转换3. static成员结语 1. 再探构造函数 之前我们实现构造函数时&#xff0c;初始化成员变量主要使用函数体内赋值&#xff0c;构造函数初始化还有⼀种方式&#xff0c;就是初始化列表&#xff0c;初始化列表的使用方式是以⼀个冒号开始&#…

体系结构论文(五十三):Featherweight Soft Error Resilience for GPUs 【22‘ MIRCO】

Featherweight Soft Error Resilience for GPUs 一、文章介绍 背景&#xff1a;软错误通常由高能粒子&#xff08;如宇宙射线和α粒子&#xff09;打击电路造成的位翻转&#xff0c;可能导致程序崩溃或产生错误输出。随着电子技术的进步&#xff0c;电路对这种辐射引发的软错…

电子连接器温升仿真教程 二

在《电子连接器温升仿真教程 一》中详细介绍了用内热法做电子连接器温升仿真的操作步骤与方法,本教程将讲解用电流电压法做电子连接器温升仿真。 本教程,将以下面产品为例演示温升仿真方法其操作步骤。 该连接器为电池连接器,其Housing材料为LCP+30%GF,端子材质为铍铜…

Linux相关概念和重要知识点(11)(进程调度、Linux内核链表)

1.Linux调度算法 上篇文章我粗略讲过queue[140]的结构&#xff0c;根据哈希表&#xff0c;我们可以将40个不同优先级的进程借助哈希桶链入queue[140]中。调度器会根据queue的下标来进行调度。但这个具体的调度过程是怎样的呢&#xff1f;以及runqueue和queue[140]的关系是什么…

[C++] 剖析AVL树功能的实现原理

文章目录 引言AVL树的关键性质为什么选择AVL树&#xff1f; AVL树的结构节点对象的类 AVL树的插入检查是否为空树并处理根节点查询插入位置&#xff08;非递归&#xff09;插入节点并连接父节点更新平衡因子&#xff08;在失去平衡的条件下进行旋转&#xff09; 旋转旋转的原则…

基于ssm的学生社团管理系统 社团分配系统 社团活动调度平台 学生社团管理 信息化社团管理开发项目 社团活动管理 社团预约系统(源码+文档+定制)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

VMware中Ubuntu系统Docker正常运行但网络不通(已解决)

问题描述&#xff1a;在VMware中的Ubuntu系统下部署了Docker&#xff0c;当在docker容器中运行Eureka微服务时&#xff0c;发现Eureka启动正常&#xff0c;但无法通过网页访问该容器中Eureka。 解决办法如下&#xff1a; 1、创建桥接网络&#xff1a;test-net sudo docker n…

一文带你入门客制化键盘,打造专属打字利器

我用过不少键盘&#xff0c;但是都不太符合自己的需求&#xff0c;最后还是走向了客制化。 客制化&#xff0c;可以理解为自定义、DIY&#xff0c;自己动手拼装出一把只属于自己的键盘。 本文会对客制化做个简单的介绍&#xff0c;旨在读者能自己简单拼装出一款键盘。 目前市…