基于Segbot动态模型如何实现控制器设计和轨迹跟踪
扫描二维码
随时随地手机看文章
去年,一个ME 461小组的Segbot项目专注于自适应平衡,并没有明确使用Segbot动态的完整模型;这个项目的目标是基于模型的控制器设计和轨迹跟踪,以及自平衡。我们推导出Segbot的动态模型,对其进行线性化,并支持游戏控制器的实时控制。
LQR控制器提供了比同类手动调谐PID控制器更强的鲁棒性保证,并确保无限增益裕度和至少60度相位裕度。此外,L1控制器有助于自动补偿未建模的动力学和干扰的影响,例如不平坦的地形、质量变化和质心的移动。首先,我们想推导出Segbot的动态模型。由于Segbot的不对称结构和复杂的几何形状,我们通过实验测量了关键参数。特别地,我们通过基于钟摆的测量来估计转动惯量。我们还通过直流电机模型测量了电机电压与车轮输出转矩之间的关系。在我们的模型中测量Segbot的基本参数后,我们得到了它的非线性动力学。从那里,我们线性化了关于直立平衡的模型,产生了Segbot动力学的连续时间状态空间表示,这将用于以下部分的控制设计。
然后,我们扩展了LabVIEW框架,以支持使用游戏控制器(有线或无线)进行实时控制。操纵杆运动和按键的用户输入通过Windows API捕获,并映射到高级Segbot命令,从而实现对机器人行为的直观手动控制。该界面允许用户在实验过程中交互式地命令Segbot,并便于在用户指定的输入下测试平衡和轨迹跟踪。
在我们的最终系统中,Segbot在不平坦的地形、质量变化和质心变化的条件下表现出了更大的稳定性。我们设置了不同高度的木板来制造不平坦的地形,Segbot通过这些木板而不会翻倒。我们还在Segbot运行过程中不断添加电池(而不是一开始就添加电池),Segbot没有翻转或崩溃。
传感器和执行器
算法(L1 +等)
Segbot被建模为一个欠驱动的两轮倒立摆,其中:
1)线性化模型用于控制设计
线性化关于直立(零)平衡的segbot动力学:
状态和输入:
η = [x, x_dot, θ, θ_dot, ψ, ψ_dot]^T
u = [T_L, T_R]^T
线性状态空间形式:
η_dot = A η + B u,其中A和B是基于隔离机器人物理参数的矩阵值
2)积分LQR基线(轨迹跟踪)
定义跟踪误差积分状态:
Z_dot = η−η_ref
增广状态:
X_aug = [z;η)
等方面目标:
J =∫(x_aug^ tq x_aug + u^ tr u) dt
LQR反馈律(连续时间):
u_LQR =−K x_aug
在代码中,这被实现为两个增益行(每个车轮一个):
u_b_left = -K_left·x
u_b_right = -K_right·x
控制器状态直接由板载传感+集成商构建,例如:
倾斜度和倾斜率来自IMU处理(卡尔曼估计+短平均),车轮编码器给出速度和车轮差(转向),积分状态累积跟踪误差以获得更好的稳态跟踪。
代码使用梯形积分的积分状态:
I[k] = I[k-1] + Ts * (e[k-1] + e[k]) / 2
增益K来自于最小化
J =∫(x^ tq x + u^ tr u) dt
从代数里卡第方程解得到K。
3) L1自适应增强(扰动鲁棒性)
模型扰动/不确定性:
η_dot = A η + B u + B σ(t)
完全控制:
u = u_LQR + u_L1
核心L1思想:在保持鲁棒性的同时允许快速适应
u_L1(s) =−C(s) σ_hat(s)
发送给电机的总命令:
u_left = u_b_left + u_L1_left
u_right = u_b_right + u_L1_right
状态预测器(离散时间更新每个样本):
x_hat[k] = x_hat[k-1] + Ts * x_hat_dot[k-1]
带有以下形式的预测导数:
x_hat_dot = A x + Bm (x_b + u_L1 + sigma_m_hat) + Bum sigma_um_hat + Ae (x_hat - x)
不确定性估计(来自预测误差):
x_x = x_hat - x
sigma_hat = G * x_tilde
分为“匹配”(影响输入通道)和“不匹配”部分:
Sigma_m_hat = sigma_hat的前两个分量
sigma_um_hat =剩余组件(通过B_um映射)
带低通滤波器的带宽限制自适应控制
u_L1 [k] = -(α* u_L1 (k - 1) +(1 -α)* sigma_m_hat [k])
= exp(- * Ts)
这种低通滤波使快速估计和滤波控制动作能够保持鲁棒性裕度。
本文编译自hackster.io





