- 博客(145)
- 收藏
- 关注
原创 对角两对双差速轮AGV的平移、直行、转弯和原地旋转之PID控制
本示例将展示如何使用PID控制算法,控制具有对角线布置的两对双差速轮(左前和右后)的AGV,实现平移、直行、转弯和原地旋转等运动。通过对车辆的运动学和PID控制器的设计,我们可以精确地控制AGV的运动
2024-10-27 16:44:28
572
原创 对角双差速轮AGV平移、直行、转弯、原地旋转案例
在对角两对双差速轮 AGV(自动导引车)中,车辆配置了两对差速轮,分别安装在左前(Front Left,FL)和右后(Rear Right,RR)。这种配置使得 AGV 具有较高的机动性,可以实现平移、直行、转弯和原地旋转等复杂运动
2024-10-27 16:34:32
373
原创 对角两对双差速轮AGV的运动学正解和逆解
对角双差速轮AGV是一种特殊的移动机器人结构,其中两个驱动轮位于车辆的对角线上,通常是前左(FL)和后右(RR)轮,另外两个轮子则是从动轮(万向轮或滑轮),如前右(FR)和后左(RL)轮。这种配置可以在某些特殊应用场景下使用,如需要特定的运动性能或结构设计限制。理解这种AGV的运动学正解(由轮速求车辆运动)和逆解(由期望运动求轮速)对于其设计和控制非常重要
2024-10-26 23:26:04
466
1
原创 对角两对双差速轮AGV的动力学解算
对角双差速轮AGV是一种特殊的移动机器人,其驱动轮位于对角线位置(通常为前左轮和后右轮),另外两个轮子为从动轮(通常为万向轮)。在前面的讨论中,我们介绍了该类型AGV的运动学模型。现在,我们将深入研究其动力学模型,以便更准确地描述车辆的运动行为,并为控制设计提供基础
2024-10-26 23:05:04
582
原创 前后前后两对双差速轮之LQR控制
通过在四轮AGV的代码中引入LQR控制,实现了对AGV的精确路径跟踪控制。LQR控制器能够根据当前状态和目标状态的误差,计算最优的控制输入,使AGV平稳地到达目标位置。
2024-10-26 20:37:23
173
原创 前后两对双差速轮之PID控制
将PID控制器引入到前后两对双差速轮AGV的运动控制中,可以提高AGV对目标速度和位置的响应能力,实现对期望轨迹的跟踪。
2024-10-26 19:15:30
107
原创 前后两对双差速轮AGV的运动学正解和逆解
具有前后两对双差速轮的AGV是一种常见的移动机器人结构,四个驱动轮分为前后两组,每组由左右两个独立驱动的车轮组成。相比于单组双差速轮,增加了一组驱动轮,可以提高AGV的承载能力和稳定性。理解其运动学正解(由轮速求车辆运动)和逆解(由期望运动求轮速)对于控制和导航具有重要意义。L:前后轮组之间的轴距(单位:米)W:左右轮之间的轮距(单位:米)运动学正解:根据四个车轮的角速度,计算车辆的线速度和角速度。关键在于计算左右轮组的平均线速度,进而得到车辆的角速度。
2024-10-26 18:10:49
370
原创 双差速轮之LQR控制
线性二次型调节器(LQR,Linear Quadratic Regulator)是一种最优控制方法,旨在通过最小化性能指标(通常是状态和控制输入的加权二次型)来确定系统的最佳控制输入。对于双差速轮AGV,使用LQR控制可以实现对其轨迹的精确跟踪和姿态控制。通过在代码中引入LQR控制器,实现了对双差速轮AGV的路径跟踪控制。LQR控制器通过最小化状态误差和控制输入,计算出最优的控制输入,使得AGV能够平稳、高效地到达目标位置。
2024-10-26 17:33:20
653
原创 PID控制原理
PID控制器是一种经典且广泛应用于工业控制领域的反馈控制器,它由比例(P)、积分(I)和微分(D)三个部分组成。通过对这三个部分的综合调节,PID控制器能够实现对被控对象的精确控制,使系统输出尽可能快速、准确地跟随设定值(目标值)。问题: 长时间的误差累积可能导致积分项过大,造成“积分饱和”,影响系统稳定性。调整PID控制器的三个增益参数 Kp、Ki、Kd对系统性能影响重大。在数字控制系统中,PID控制器需要以离散形式实现。问题: 微分项对高频噪声敏感,可能放大测量噪声。
2024-10-26 17:05:09
433
原创 双差速轮之PID控制
为了更加精确控制AGV运动,加入PID控制器,以控制左右轮的角速度,使AGV能够更加精确地跟踪期望的运动。代码中将包括PID控制器的实现,以及在主循环中如何使用PID控制器来调整轮子的角速度。
2024-10-26 16:38:50
159
原创 双差速轮AGV的运动学正解和逆解
双差速轮AGV(Automated Guided Vehicle)是一种常见的移动机器人结构,采用两侧独立驱动的车轮,通过控制左右轮的转速差实现运动和转向。理解其运动学正解(由轮速求车辆运动)和逆解(由期望运动求轮速)对于AGV的设计和控制至关重要。𝑣:AGV的线速度(质心速度),单位:米/秒(m/s)𝜔:AGV的角速度(绕质心的旋转速度),单位:弧度/秒(rad/s)𝑣L、𝑣R :左、右轮的线速度,单位:米/秒(m/s)𝜔L、𝜔R:左、右轮的角速度,单位:弧度/秒(rad/s)
2024-10-26 12:35:36
1088
原创 C++ 进程间通信举例
上述示例展示了 C++ 中几种常见的进程间通信方法。管道(Pipe):适用于父子进程间的简单通信。消息队列(Message Queue):适用于需要消息优先级和复杂通信的场景。共享内存(Shared Memory):适用于需要快速数据交换的场景,但需要注意同步问题。信号(Signals):适用于异步事件通知。这些方法各有优缺点,可以根据具体需求进行选择和组合使用。
2024-07-07 22:57:28
256
原创 强化学习与控制模型结合例子
通过结合控制模型(如LQR)和强化学习算法(如DQN),我们可以利用控制模型提供的动态信息和稳定性保障,同时利用RL的学习能力优化控制策略。这种结合方法不仅提高了系统的鲁棒性,还加快了学习速度,适用于各种复杂的机器人控制任务。
2024-07-07 22:42:36
755
原创 dreamerV3 控制人形机器人行走举例
DreamerV3 是一种先进的强化学习算法,它结合了模型预测控制(MPC)和深度学习,能够在复杂环境中实现高效的学习和控制。DreamerV3 通过构建环境的动态模型并使用该模型进行多步预测和优化,来学习复杂任务如人形机器人行走
2024-07-06 15:41:24
682
原创 TD-MPC(Temporal Difference Model Predictive Control)人形机器人行走举例
基于TD-MPC的人形机器人行走任务通过结合时序差分学习和模型预测控制,可以实现对复杂物理系统的有效控制。通过构建动力学模型,进行多步预测和优化,并结合TD方法更新策略,可以大大提高学习效率和模型的准确性。这种方法在处理如人形机器人行走等复杂任务时,展示了其独特的优势和潜力。
2024-07-06 15:29:45
412
原创 贝尔曼方程人形机器人举例
贝尔曼方程(Bellman Equation)是强化学习中的核心方程,用于表示状态值函数和动作值函数之间的关系。通过贝尔曼方程,可以递归地计算状态或状态-动作对的价值。为了更好地理解贝尔曼方程在强化学习中的应用,下面我们以人形机器人行走任务为例进行讲解。
2024-07-06 11:58:08
166
原创 贝尔曼方程(Bellman Equation)
贝尔曼方程(Bellman Equation)是动态规划和强化学习中的核心概念,用于描述最优决策问题中的价值函数的递归关系。它为状态值函数和动作值函数提供了一个重要的递推公式,帮助我们计算每个状态或状态-动作对的预期回报。
2024-07-06 11:50:29
545
原创 PPO控制人形机器人行走举例
PPO算法主要有两种变体:PPO-Clip 和 PPO-Penalty。这里主要介绍PPO-Clip,因为它更常用。继承HumanoidEnv并重写step方法。在step方法中,我们计算了原始的状态、奖励、终止标志和信息。forward_reward:机器人在x方向上的速度,鼓励机器人前进。control_cost:控制成本,惩罚动作幅度过大的行为。contact_cost:接触成本,惩罚机器人身体接触地面。
2024-07-06 11:24:55
578
1
原创 人形机器人强化学习控制分类
人形机器人(Humanoid Robot)的控制是机器人学中的一个重要研究方向,其中强化学习(Reinforcement Learning, RL)技术近年来得到了广泛的应用。
2024-07-06 09:59:49
1244
原创 C++ 多线程举例
通过这些示例,我们展示了如何在C++中使用多线程,包括创建和启动线程、传递参数、线程间同步以及条件变量的使用。多线程编程在提高程序并发性能方面非常有用,但需要注意同步和数据竞争问题,以确保线程安全。
2024-06-20 10:38:24
204
原创 C++函数作为参数
我们展示了如何在C++中将函数作为参数传递给另一个函数,包括普通函数、std::function 和 std::bind、lambda表达式以及类成员函数
2024-06-20 10:13:48
598
原创 C++函数举例
C++函数是程序执行的基本单元,可以分为多种类型,包括普通函数、内联函数、递归函数、函数模板、成员函数等。下面我们详细介绍各种类型的函数及其用法。
2024-06-20 10:09:20
95
原创 C++ 宏定义(Macro Definition)用法举例
在C++中,宏定义(Macro Definition)是一种预处理器指令,主要用于定义常量、函数宏和条件编译。宏定义有多种形式,每种形式都用于不同的编程场景
2024-06-20 09:02:04
287
原创 MPC与DDP结合案例
通过这种方式,我们结合了DDP和MPC的方法,利用DDP生成全局轨迹,MPC在执行过程中进行实时调整,以应对环境变化和不确定性。这种方法可以在保持全局最优性的同时,提供实时控制的灵活性和鲁棒性
2024-06-19 18:54:28
659
原创 DDP算法之反向传播(Backward Pass)
在DDP(Differential Dynamic Programming)算法中,反向传播(Backward Pass)是关键步骤之一。这个步骤的主要目的是通过动态规划递归地计算每个时间步上的值函数和控制策略,以便在前向传播(Forward Pass)中使用。
2024-06-19 16:34:58
192
原创 DDP算法之线性化和二次近似(Linearization and Quadratic Approximation)
在DDP算法中,第三步是线性化系统动力学方程和二次近似代价函数。这一步是关键,它使得DDP能够递归地处理非线性最优控制问题。通过线性化和二次近似,我们将复杂的非线性问题转换为一系列简单的线性二次问题,逐步逼近最优解
2024-06-18 23:38:01
211
原创 DDP(Differential Dynamic Programming)算法举例
DDP(Differential Dynamic Programming)是一种用于求解非线性最优控制问题的递归算法。它基于动态规划的思想,通过线性化系统的动力学方程和二次近似代价函数,递归地优化控制策略。DDP的核心在于利用局部二次近似来简化全局非线性最优控制问题,从而高效地求解控制策略
2024-06-18 16:43:27
794
原创 DDP、FDDP、BOXDDP算法概要
DDP是一种递归的最优控制算法,基于动态规划原理。它在给定初始条件和目标的情况下,通过迭代改进控制策略,使系统的轨迹逐步逼近最优轨迹。DDP通过线性化系统的动态方程和二次近似代价函数来求解。FDDP是DDP的一种改进版本,重点在于确保每次迭代产生的控制输入和状态轨迹是可行的。它在每次迭代中调整控制输入,使系统轨迹尽可能满足动力学和约束条件。BOXDDP是在DDP算法基础上,进一步考虑了控制输入的范围约束(即控制输入的上下限)。这对于实际应用中常见的物理限制非常重要。
2024-06-18 12:44:53
415
原创 线性二次型调节器(LQR)举例
线性二次型调节器(LQR)是一种用于最优控制的问题,其中目标是通过最小化某个代价函数来找到最优控制策略。LQR特别适用于线性系统。为了在人形机器人上应用LQR进行建模,主要步骤包括建立系统模型、定义代价函数以及求解最优控制律。以下是详细步骤:首先,建立人形机器人的线性状态空间模型。一般形式如下:其中,x(t) 是状态向量,u(t) 是控制向量,A 是系统矩阵,B 是输入矩阵,C 是输出矩阵,D 是直接传输矩阵。LQR的目标是最小化以下二次型代价函数:为了找到最优控制律,需要求解Riccati方程:
2024-06-18 10:17:38
563
原创 pinocchio计算MPC控制状态方程AB矩阵
Pinocchio是一个用于机器人动力学和运动学计算的库,广泛应用于机器人控制和仿真中。为了在MPC控制中使用Pinocchio计算状态方程的线性化矩阵 A 和 B
2024-06-16 11:27:34
382
原创 MPC质心跟随控制(CoM Tracking Control)
在人形机器人中,质心(CoM)的跟随控制是保持机器人稳定和协调运动的关键技术之一。模型预测控制(MPC)是一种先进的控制方法,通过解决在线优化问题来控制机器人质心的位置和速度。下面我们详细介绍如何使用MPC实现质心跟随控制。
2024-06-16 11:12:09
382
原创 SQP序列二次规划(Sequential Quadratic Programming, SQP)
SQP是一种用于解决非线性优化问题的迭代方法。它通过将原始非线性优化问题分解为一系列的二次规划(Quadratic Programming, QP)子问题来近似求解。每个QP子问题在当前迭代点上构造并求解,以更新迭代点
2024-06-14 11:34:26
1777
原创 C++智能指针举例
C++11标准引入了智能指针,旨在自动管理动态内存,避免内存泄漏和悬挂指针问题。C++标准库提供了三种主要的智能指针类型:std::unique_ptr、std::shared_ptr和std::weak_ptr。下面分别介绍它们的使用场景及示例代码。
2024-06-14 11:14:39
138
原创 C++ const关键字有多种用法举例
可以用来修饰变量、指针、函数参数、成员函数等。可以看到const在C++中有多种用法,主要用于保证数据的不可变性,增强代码的安全性和可读性。在实际编程中,根据需要选择适当的const用法,可以有效避免意外修改数据,提高程序的稳定性。
2024-06-14 11:05:43
171
原创 C++函数参数传递
按值传递:适用于传递简单数据类型(如int, double等),避免函数内部修改外部数据,缺点是对于大型对象会有复制开销。按引用传递:适用于需要在函数内部修改外部数据的场景,同时避免了复制开销,缺点是容易导致不小心修改外部数据。按指针传递:适用于动态内存管理或需要传递数组等数据结构的场景,指针需要进行空值检查,增加了程序复杂性。每种方式都有其适用场景和优缺点。
2024-06-14 10:50:02
124
原创 Kinodynamic RRT-connect(Rapidly-exploring Random Tree-Connect)算法例子
是一种结合了快速扩展随机树(RRT)和动力学约束的路径规划算法。它特别适用于需要考虑动力学和运动学约束的复杂机器人系统,如人形机器人、无人驾驶汽车等。
2024-06-14 10:27:15
289
原创 阻抗控制(Impedance Control)和导纳控制(Admittance Control)例子
是两种用于机械臂或机器人交互控制的策略。阻抗控制定义的是机器人端部的力和位置之间的关系,而导纳控制则定义的是外力和运动之间的关系。导纳控制常用于处理机器人与环境交互中的力控制问题。
2024-06-13 22:15:19
2116
原创 雅可比矩阵奇异求解
在机械臂控制中,出现奇异矩阵(即不可逆矩阵)时,通常意味着雅可比矩阵在某些位置上失去了满秩性质,导致某些方向上的运动不可行或不可控。
2024-06-13 21:49:29
731
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人