【机器人数值优化】数值优化基础(一)从理论到实战全方位指南 | 解锁机器人技术的核心技能

devtools/2024/10/21 23:08:50/
💯 欢迎光临清流君的博客小天地,这里是我分享技术与心得的温馨角落 💯

在这里插入图片描述

🔥 个人主页:【清流君】🔥
📚 系列专栏: 运动控制 | 决策规划 | 机器人数值优化 📚
🌟始终保持好奇心,探索未知可能性🌟

文章目录

  • 引言
  • 一、参考书籍推荐
  • 二、数值优化的定义与组成
    • 2.1 数值优化组成部分
      • (1) 优化变量
      • (2) 目标函数
      • (3) 不等式约束
      • (4) 等式约束
    • 2.2 数值优化前提假设
  • 三、数值优化机器人中的应用
    • 3.1 平滑与映射:非线性最小二乘法
    • 3.2 轨迹规划: 非线性问题
    • 3.3 点云配置:半定规划
    • 3.4 时间最优路径参数化:二阶锥规划
  • 四、数值优化基础
    • 4.1 数学基础
    • 4.2 数值分析
    • 4.3 机器人学基础
    • 4.4 编程技能
    • 4.5 软件工具
  • 五、无约束优化
    • 5.1 优化问题的数学表述
    • 5.2 优化算法
    • 5.3 最优性条件
  • 六、约束优化
    • 6.1 优化问题的数学表述
    • 6.2 约束优化算法
    • 6.3 最优性条件
  • 七、对称锥规划
    • 7.1 对称锥定义
    • 7.2 对称锥应用
    • 7.3 对称锥问题解决方法
  • 八、提出和解决问题的技巧
    • 8.1 平滑技术
    • 8.2 自由度和伴随法
    • 8.3 线性求解器的类别和功能
    • 8.4 项目实战:实现密集障碍环境中的安全导航
  • 九、总结
  • 参考资料


引言

  在当今机器人技术迅速发展的背景下,优化问题求解成为了该领域的关键技能之一。为了帮助那些对机器人方向感兴趣,却苦于不知如何解决优化问题的同学,博主开设了系列专栏——《机器人数值优化》。本系列专栏旨在让大家迅速掌握解决一般非凸、光滑、非光滑、有约束、无约束,以及具有特殊结构的凸问题和非凸问题的方法。

  希望通过专栏,能够帮助各位读者在机器人数值优化领域迈出坚实的第一步。让共同探索这片充满挑战和机遇的领域!


一、参考书籍推荐

  首先给出以下四本书作为参考:在这里插入图片描述

  1. 最优化:建模、算法与理论
      第一本是北大的文再文团队编著的书籍,这本书是中文版的,给了很多算法的理论和具体流程,可以作为比较好的入门书籍,对国内的学者来说是比较不错的选择。
  2. 数值优化Numerical Optimization
      第二本除了理论方面很全之外,也关注了很多程序中的问题,因为程序代码是用浮点数表示的,所以会引发一系列的关于程序稳健性数值的问题,怎么样去规避。因为浮点数表示会存在舍入误差的数值问题。这也是这本书比较有特色地方,给了很多工程实践上比较有用的技巧,让理论的算法在转化到对应的程序时更加鲁棒、更加稳定。
  3. 凸优化教程Lectures on Convex Optimization
      第三本主要聚焦在凸优化理论,从光滑到非光滑到结构优化,涵盖了很多理论上的知识点,这本书的思路也比较清晰,建议大家如果对理论方面感兴趣,也可以看第三本书。
  4. 现代凸优化分析、算法和工程应用教程LECTURES ON MODERN CONVEX OPTIMIZATION ANALYSIS, ALGORITHMS, AND ENGINEERING APPLICATIONS
      第四本书针对一类特殊的凸优化——锥优化,对锥规划以及多项式时间复杂度的内敛算法都有比较好的整体分析和应用。

  一般查阅这四本书比较多,这四本书并不是互相独立的,可以重点看第一本、第二本还有第三本书。


二、数值优化的定义与组成

  数值优化机器人技术中一种重要的算法,它通过数学模型和算法来找到使机器人系统性能最优的参数值。这种优化通常涉及最小化目标函数,该函数反映了机器人性能的某些度量,如能耗、轨迹精度、响应时间等。优化问题可以非常复杂,涉及多个变量和约束条件。

2.1 数值优化组成部分

数学优化一般由几个部分组成:
min ⁡ f ( x ) s . t . g ( x ) ≤ 0 h ( x ) = 0 \begin{matrix} \min f ( x ) \\ s . t . \quad g ( x ) \leq 0 \\ \quad \quad h ( x ) = 0 \end{matrix} minf(x)s.t.g(x)0h(x)=0

(1) 优化变量

x = ( x 1 , ⋯ , x n ) ∈ R n x = ( x _ { 1 } , \cdots , x _ { n } ) \in R ^ { n } x=(x1,,xn)Rn   x x x n n n 维的向量,称为优化变量(Optimization Variables)

(2) 目标函数

f : R n → R f : R ^ { n } \rightarrow R f:RnR  评价 x x x 是否更优,是否更好,要看目标函数(objective function) f f f x x x 赋予了值,值是越小越好的。

(3) 不等式约束

g : R n → R m g g : R ^ { n } \rightarrow R ^ { m _ { g } } g:RnRmg比如
g ( x ) = ( x 1 − 1 ) 2 + x 2 2 − 1 ≤ 0 g ( x ) = ( x_1 - 1 ) ^ { 2 } + x ^ { 2 } _ { 2 } - 1 \leq 0 g(x)=(x11)2+x2210  描述的就是以 ( 1 , 0 ) (1,0) (1,0) 为圆心, 1 1 1 为半径的圆形区域,就要在圆形里面找到 f ( x ) f(x) f(x) 的最小值,所以 x x x 除了圆形区就是不感兴趣的区域,就不要了。

(4) 等式约束

h : R n → R m h h : R ^ { n } \rightarrow R ^ { m _ { h } } h:RnRmh  比如在三维空间的曲面上,所寻找的 x x x 要在曲面上滑动,它不应该在曲面之外,所以曲面可以用等式 h h h 表述,如
x 1 2 + x 2 2 + x 3 2 = 0 x _ { 1 } ^ { 2 } + x _ { 2 } ^ { 2 } + x _ { 3 } ^ { 2 } = 0 x12+x22+x32=0  表示的是球面的一部分,它其实是整个球面, h h h 也可以是多个等式。比如
{ x 1 2 + x 2 2 + x 3 2 = 0 − x 1 + x 2 + x 3 = 0 \left\{ \begin{array}{l} x_{1}^{2}+x_{2}^{2}+x_{3}^{2}=0\\ -x_1+x_2+x_3=0\\ \end{array} \right. {x12+x22+x32=0x1+x2+x3=0  表示的是曲面和平面相交的曲线。

  定义最优值 x ∗ x^* x,要满足所有约束,在感兴趣的区域内,所有满足约束的 x x x ,称作 可行解(Feasible Solution)

  最优解是可行解中具有最低目标函数 f ( x ) f(x) f(x) 值的解的集合,这里有几层意思,就是说最优解 x x x 一定属于该解集。因为最优解可能不止一个,也可能没有,也可能有多个的情况。

2.2 数值优化前提假设

  另一方面需要对所考虑的等式和不等式约束要有假设,在机器人数值优化中,假设目标函数一定满足以下两点:

  • 假设1目标函数具有下界,即 f ( x ) ≥ α f(x)\ge\alpha f(x)α
    目标函数的最小值可以很小但必须有界 ,因此,目标函数不能存在负无穷的值,若存在负无穷的值会使得最小值无法在计算机中用浮点数表示。
  • 假设2目标函数具有有界子级集,即当目标函数 f ( x ) ≤ β f(x)\le\beta f(x)β 时, x x x 有界,保证最优解在 x x x 的有限范围内取到。
    目标函数不能存在当 x x x 趋于无穷时函数趋于某个值即下水平集无界,这同样会导致最小值无法用浮点数表示。

如下图中的 f ( x ) f ( x ) f(x) 分别不满足假设 1 1 1、假设 2 2 2
在这里插入图片描述
  可以看看刚刚所说的一系列的 f ( x ) 、 g ( x ) 、 h ( x ) f(x)、g(x)、 h(x) f(x)g(x)h(x) 都是连续的,对应的称为连续优化,很多优化问题其实也可以表示一系列的离散变量的决策问题,不处理离散性的问题,只处理连续优化,所以 f ( x ) 、 g ( x ) f(x)、g(x) f(x)g(x) 至少都得是连续的,可以非光滑,但必须得是连续的。

  在本系列的所有情况中,都会假设无约束优化里的目标函数必须得满足这两个假设条件,存在下界且具有有界子级集

  对于有约束优化的情况,即 g ( x ) g(x) g(x) h ( x ) h(x) h(x) 存在时,定义
f ~ ( x ) = { f ( x ) 满足约束时 + ∞ 不满足约束时 \tilde{f}\left( x \right) =\left\{ \begin{array}{l} f\left( x \right) \ \text{满足约束时}\\ +\infty \ \ \ \text{不满足约束时}\\ \end{array} \right. f~(x)={f(x) 满足约束时+   不满足约束时  则在有约束优化或无约束优化时, f ~ ( x ) \tilde{f}(x) f~(x) 作为目标函数是有下界且具有有界子级集,这是最基本的假设条件。


三、数值优化机器人中的应用

机器人领域中,数据优化有哪些应用呢?

3.1 平滑与映射:非线性最小二乘法

  很多时候 SLAM 同步定位与地图构建里面的很多问题。

在这里插入图片描述

要恢复出整个位置的轨迹,都可以写为非线性函数
min ⁡ ∑ f i 2 ( x ) \min \sum f _ { i } ^ { 2 } ( x ) minfi2(x)其中,约束条件为 l x ≤ x ≤ u x lx\le x\le ux lxxux

  目标函数为关于优化变量的平方和最小化残差,满足一系列边界约束。每个 x x x 元素都有上界和下界,因为 f ( x ) f(x) f(x) 是非线性函数,所以称为非线性最小二乘法。

3.2 轨迹规划: 非线性问题

  在轨迹规划或者运动规划里通常会解非线性问题。

在这里插入图片描述

  只要 f ( x ) , g ( x ) , h ( x ) f(x), g(x), h(x) f(x),g(x),h(x) 都是非性的,它就是非线性问题,需要把火箭的一系列的状态 x x x 随着时间变化的轨迹优化出来,让轨迹尽可能光滑,让推力不要太高,不要太低,并且满足安全约束,它也可以变成非线性规划的问题,这是比较通用的。

3.3 点云配置:半定规划

  在点云配置领域,要找最优的 R R R T T T ,其中, R R R旋转(rotation) T T T平移( translating),使得两帧点云中间的距离度量尽可能的最小,这样就把点云配准。

在这里插入图片描述

  因为 R R R T T T 有特殊的性质,可以通过牺牲精度来把对应的问题变成半定规划(SDP),这是一类锥优化, SDP 问题求解出来的最优解跟只用优化 R R R T T T 的全局最优解之间的间隙很小。这一类问题称为 半定规划(Semidefinite Programming,SDP)

  凸问题是非凸优化的松弛,所以很多非凸优化问题,可以把凸问题或者凸松弛描述出来,就可以用凸优化的方法求解。

3.4 时间最优路径参数化:二阶锥规划

  在多关节机器人、无人车、无人机、无人船里都有时间最优路径参数化的问题。
在这里插入图片描述

  给定连续可导的路径 A A A B B B ,一定要严格按照路径走,路径可以是三维,可以是二维,关节里的多维,因为电机驱动还有马达发动机都有力矩特性,所以要在满足机器人驱动限制的前提下,使其最快地从 A A A B B B 沿这条路径完成路径跟踪。

有了轨迹其实就有了形状,如何分配时间?怎样得到具体什么时候该到哪个位置?

   A A A B B B 的时间尽可能短,称为 时间最优路径参数化(TOPP) 问题。 TOPP 问题就是给弧度重新以真正的时间做参数化,所以叫参数化。这样的问题可以变成一类 二阶锥规划(SOCP) 问题, SOCP 也是凸问题,约束结构很特殊,也是一类锥规划问题。

  所以在机器人领域里,不管是非线性的非凸的优化还是凸优化,还是有一定结构的凸优化,研究领域还是挺广的,所以针对相应的问题怎样有效求解感兴趣的全局最优解,是很关键的问题。


四、数值优化基础

  在机器人学领域,数值优化方法的应用至关重要,它们是解决设计、控制、路径规划等问题的关键工具。本系列博客将深入探讨数值优化机器人学中的应用,并掌握解决实际问题的有效方法。要掌握这一领域的数值优化,需要以下基础知识:

4.1 数学基础

  • 线性代数:矩阵运算、向量空间、特征值和特征向量等。
  • 微积分:偏导数、梯度、雅可比矩阵、海森矩阵等。
  • 最优化理论:凸分析、凸优化、非凸优化、最优性条件等。

4.2 数值分析

  • 数值逼近:插值、拟合、数值微分和积分等。
  • 数值线性代数:线性方程组的求解、矩阵分解、迭代方法等。
  • 数值优化算法:梯度下降法、牛顿法、拟牛顿法、共轭梯度法等。

4.3 机器人学基础

  • 机器人运动学:位置、速度、加速度的表示,运动方程的建立。
  • 机器人动力学:质量矩阵、惯性矩阵、动力学方程等。
  • 控制理论PID 控制、反馈控制、最优控制等。
  • 机器人学具体应用:路径规划、姿态控制、力矩分配等。

4.4 编程技能

  • 掌握至少一种编程语言,如 PythonC++MATLAB ,用于实现和测试优化算法
  • 熟悉数据结构和算法,能够高效处理数据。

4.5 软件工具

  • 熟悉优化软件包,如 IPOPTMATLABOptimization Toolbox 等。
  • 了解仿真环境,如 ROS ( Robot Operating System )、 Gazebo 等。

  首先,我们将研究非凸优化问题,其中涉及到的凸非凸优化其实也要研究凸性质,因为很多算法都依赖于局部凸性质的假设,特别是那些在局部区域可以近似为凸函数的问题,所以凸性质是不可避免的部分。这类问题在机器人学中普遍存在,例如在路径规划和控制策略中。研究非凸优化也可以通过利用凸性质,来设计出更快速、更稳定的算法

  后续博客会讲对非凸优化的一般无约束优化的算法比如带线性搜索的最速梯度下降法、修正阻尼牛顿法等。


五、无约束优化

  在机器人数值优化中,无约束优化是指寻找一个函数的极值点,而不受任何额外条件的限制。这类问题在机器人学中非常常见,例如在路径规划、姿态控制、参数调整等方面。无约束优化包含以下几个主要内容:

5.1 优化问题的数学表述

  • 目标函数:通常表示为机器人系统的某种性能指标,如路径长度、能量消耗、执行时间等。
  • 决策变量:需要优化的参数,如机器人的位置、速度、加速度或控制参数。

5.2 优化算法

  • 梯度下降法:通过目标函数的梯度来更新决策变量,逐步逼近最优解。
  • 牛顿法和拟牛顿法:利用目标函数的一阶和二阶导数信息,加速收敛速度。
  • 共轭梯度法:结合了梯度下降法和牛顿法的优点,适用于大规模问题。
  • 启发式算法:如模拟退火、遗传算法、蚁群算法等,适用于解决复杂或非凸问题。

5.3 最优性条件

  • 一阶必要条件:目标函数的梯度为零。
  • 二阶充分条件:目标函数的海森矩阵正定。

  本系列博客会介绍一类工程上比较有效的无约束优化的算法,包括准牛顿方法、 BFGS 更新、线性共轭梯度下降等。这些方法在工程实践中非常有效,尤其是在处理非光滑问题和高维数据时。通过实际案例,如平滑导航路径生成,来展示无约束优化算法的应用。

  上述都是对无约束优化问题的算法


六、约束优化

  在机器人数值优化中,约束优化是指寻找一个函数的极值点,同时满足一定的约束条件。这类问题在机器人学中非常普遍,例如在路径规划、姿态控制、资源分配等方面。约束优化包含以下几个主要内容:

6.1 优化问题的数学表述

  • 目标函数:表示为机器人系统的某种性能指标,如路径长度、能量消耗、执行时间等。
  • 决策变量:需要优化的参数,如机器人的位置、速度、加速度或控制参数。
  • 约束条件:包括等式约束和不等式约束,如机器人运动的动力学约束、物理限制、工作空间限制等。

6.2 约束优化算法

  • 拉格朗日乘子法:通过引入拉格朗日乘子将约束优化问题转化为无约束优化问题。
  • 序列二次规划法(SQP):结合了二次规划和一个线搜索过程,适用于解决非线性约束问题。
  • 内点法:通过迭代方法在可行域内部寻找最优解,适用于大规模问题。
  • 启发式算法:如模拟退火、遗传算法、蚁群算法等,适用于解决复杂或非凸问题。

6.3 最优性条件

  • KKT(Karush-Kuhn-Tucker)条件:是约束优化问题的一阶必要条件,包括目标函数的梯度、约束条件的拉格朗日乘子和互补松弛条件。

  通过低维线性规划、严格凸二次规划等方法,我们可以高效地解决具有约束的优化问题。此外,还将介绍增广拉格朗日法,这是一种简洁高效的算法,尤其适用于控制分配问题和碰撞距离计算等实际应用。

  对于一般的约束优化,也是对于非凸问题来讲的,我们将讨论不同类型的约束优化问题及其复杂性,为了让大家明白优化算法并不是一定要用通用的算法,需要逐个挑选。对于通用的工程问题,什么样的问题适合什么样的求解,所以并不是所有的问题都需要用数值算法去迭代,还有低维度的精确算法,他们在导航规划问题里面都比较有效,也能够很快的计算出精确解,而不是数值近似解。

  通过一系列无约束优化的方法解约束优化的算法,会讲约束优化的一系列的最优性条件,增广拉格朗日算法或者 PHR ,增广拉格朗日算法的特点就是简洁有效,它的算法效率会比一阶算法或者不利用高阶信息的算法收敛要快,并且计算效率会比 SQP 、内点法要更为轻量级,而且收敛性也可以做到很快,尤其适用于控制分配问题、碰撞距离计算和非线性模型预测控制等实际应用。


七、对称锥规划

7.1 对称锥定义

  对称锥规划( Symmetric Cone Programming , SCP )是一类特殊的凸优化问题,它能够表达某些非凸函数,并转化为可以获得全局最优解的锥规划问题。对称锥规划是线性规划、二次规划和半定规划等优化问题的推广。

  我们将讨论对称锥与欧几里得约旦代数的关系,以及如何使用增广拉格朗日法求解大规模锥规划问题,并以时间最优路径参数化( TOPP ) 问题。

7.2 对称锥应用

对称锥规划在机器人学中的应用包括但不限于:

  • 控制理论:用于设计最优控制器,特别是在处理多变量系统和不确定性时。
  • 机器学习:在支持向量机( SVM )和其它统计学习模型中,对称锥规划可以帮助解决大规模的分类和回归问题。
  • 传感器网络:在优化传感器布局和数据处理时,对称锥规划可以提供有效的解决方案。

7.3 对称锥问题解决方法

  对称锥规划问题通常通过内点法( Interior Point Method , IPM )来解决,这是一种高效的数值方法,适用于解决大规模的凸优化问题。内点法通过迭代地在可行域内部移动,逐步逼近最优解,避免了在边界上的复杂计算。

  对称锥规划是机器人学中数值优化的一种高级形式,它提供了一种强大的工具来处理复杂的优化问题。


八、提出和解决问题的技巧

  最后,我们将讨论优化算法中的工程技巧,如平滑技术、自由度和伴随法的权衡,以及线性求解器的选择。这些技巧对于提高算法效率和稳定性至关重要。

8.1 平滑技术

  在数值优化中存在一种不可避免的问题——非光滑,就是不可能有效的求解。对于这种问题可以牺牲一系列的精度,把对应的非光滑问题磨光,获得很快的求解方案。

8.2 自由度和伴随法

  很多问题并不是自由度越高越好的,工程里面关注的是质量和效率的权衡,所以怎样有效地把实际的约束个数和自由度解耦,工程里有比较实用的方法叫 伴随法

8.3 线性求解器的类别和功能

  在数值优化中都会涉及到求解线性方程组, A x = b Ax=b Ax=b 并不是简单的问题。

比如 A A A 是对称时, A A A 是镇定时, A A A 是非满秩时,怎样稳定地解出对应的 x x x

  或者并不需要精确求解,需要迭代近似求解对应的 x x x ,此时怎样能够更快、更稳定,怎样挑选对应的线性求解器也是很重要的部分,对于优化算法来说是关乎性能最重要的一方面。

8.4 项目实战:实现密集障碍环境中的安全导航

  在自主移动机器人的研究领域,安全导航是一个极具挑战性的任务,尤其是在障碍物密集的环境中。为了实现这一功能,我们需要运用数值优化方法来处理非光滑优化问题、低维度优化以及锥规划等问题。在本系列博客中,我们将探讨如何将这些优化方法应用于自主移动机器人的安全导航。通过实际案例,我们将分析影响算法效率的各个方面,以及数值稳定性在整个工作流程中的重要性。


九、总结

  本系列博客《机器人数值优化》专栏的核心是通过理论与实践相结合,帮助读者快速掌握机器人领域的数值优化技术。无论是无约束优化、约束优化、凸优化还是非凸优化,每一个部分都有其独特的应用和解决方法。同时,所提及的数值优化算法和工具在机器人学中的广泛应用,如同步定位与地图构建( SLAM )、轨迹规划、点云配置等,展示了这些技术的实际价值和重要性。

  通过该系列的学习,读者不仅可以掌握基本的数值优化理论,还可以应用这些优化技术来解决实际机器人中的各种复杂问题。这将为机器人的智能设计、路径规划和控制系统提供强大的理论支持,推动机器人技术的发展。

  希望本系列专栏能够帮助大家在机器人领域的数值优化之路上迈出坚实的一步!


参考资料

  1、机器人中的数值优化

  2、机器人中的数值优化(一)—— 数学优化、凸集合与凸函数


后记:

🌟 感谢您耐心阅读这篇关于 机器人数值优化从理论到实战全方位指南 的技术博客。 📚

🎯 如果您觉得这篇博客对您有所帮助,请不要吝啬您的点赞和评论 📢

🌟您的支持是我继续创作的动力。同时,别忘了收藏本篇博客,以便日后随时查阅。🚀

🚗 让我们一起期待更多的技术分享,共同探索移动机器人的无限可能!💡

🎭感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行 🚀


http://www.ppmy.cn/devtools/125554.html

相关文章

与鸿蒙同行,Java Solon v3.0 正式发布(向下兼容)

与 HarmonyOS NEXT 10月8日公测同行。Solon (开放原子开源基金会,孵化项目) v3.0 正式发布, 且将在 2025 年启动华为编程语言 “仓颉” 版开发(届时会有 Solon-Java 和 Solon-CJ 两大版本)。本次大版本更新…

c++基础知识复习(1)

前期知识准备 1 构造函数 (1)默认构造函数:没有参数传入,也没有在类里面声明 (2)手动定义默认构造函数:没有参数传入,但是在类里面进行了声明 可以在类外实现或者类内实现 以下案…

环境变量(Linux)

文章目录 一、什么是环境变量?二、环境变量的作用1. 方便命令执行:2.配置系统和应用程序:3.用户自定义环境变量: 三、Linux 常见环境变量四、设置环境变量1.临时设置:2.永久设置: 五、环境变量的优先级六、…

PyTorch gather与scatter_详解

PyTorch gather与scatter_详解 在 PyTorch 常用的算子中,有两个理解巅峰的存在,那就是 torch.gather 与 torch.scatter_,在 Seq2Seq 、Attention、crf viterbi等结构的源码中,都可以看到这两个算子的身影,今天来详细讲…

【回顾原生JDBC手动管理事务以及两种方式实现Spring编程式事务】

文章目录 一.关于事务1.事务概念2.事务四个基本特性3. 事务的生命周期4.事务的隔离级别5.事务的应用场景 二.回顾原生JDBC手动管理事务三.Spring编程式事务1.使用 TransactionTemplate 进行编程式事务管理2.使用 PlatformTransactionManager 进行编程式事务管理 四.编程式事务的…

【重学 MySQL】六十五、auto_increment 的使用

【重学 MySQL】六十五、auto_increment 的使用 创建表时使用 AUTO_INCREMENT特点和要求插入数据查看当前 AUTO_INCREMENT 值设置初始 AUTO_INCREMENT 值重置 AUTO_INCREMENT 值注意事项示例:组合主键和 AUTO_INCREMENTMySQL8.0 新特性:自增变量的持久化背…

正点原子学习笔记之汇编LED驱动实验

1 汇编LED原理分析 为什么要写汇编     需要用汇编初始化一些SOC外设     使用汇编初始化DDR、I.MX6U不需要     设置sp指针,一般指向DDR,设置好C语言运行环境 1.1 LED硬件分析 可以看到LED灯一端接高电平,一端连接了GPIO_3上面…

栈溢出0x0C 前置技能:栈迁移

栈迁移原因: 在完成一般的栈溢出攻击时,有一个充分条件是「栈上有足够的地方让攻击者进行布局」。通常的函数栈剩余空间是足够放置一些恶意指令的,但也有少数极端情况,例如仅能容纳一个 ret与一个 ebp。此时,一般的栈…