PythonRobotics 如何用 LQR 控制小车保持倒立摆平衡
PythonRobotics 如何用 LQR 控制小车保持倒立摆平衡【免费下载链接】PythonRoboticsPython sample codes and textbook for robotics algorithms.项目地址: https://gitcode.com/GitHub_Trending/py/PythonRobotics这篇文章解决一个具体任务在 PythonRobotics 仓库中运行小车倒立摆inverted pendulum on a cart的 LQR 控制示例验证控制器能否把偏离竖直方向的摆杆拉回并保持平衡。示例位于 inverted_pendulum_lqr_control.py只依赖 README 中列出的 NumPy、SciPy、Matplotlib 环境装好依赖后即可运行。示例背后的模型与控制结构文档页 inverted_pendulum_main.rst 定义了系统质量为M的小车可在水平轨道上移动车上竖直铰接一根长l的杆杆顶有质量m。控制目标是通过给小车施加水平力u来保持摆杆平衡。物理量对应关系如下M小车质量m杆顶质量l杆长u施加在小车上的力x小车位置θ摆杆相对竖直方向的角度文档先用 Lagrange 方程推导出非线性运动方程再在小角度假设下cos θ ≈ 1、sin θ ≈ θ、θ̇² ≈ 0得到线性化模型并写成状态空间形式ẋ Ax Bu状态向量取x [x, ẋ, θ, θ̇]A、B矩阵的表达式见该文档页。LQR 部分控制器最小化代价函数J xᵀQx uᵀRu使代价最小的反馈律为u -Kx其中K (BᵀPB R)⁻¹BᵀPAP是离散代数 Riccati 方程DAREP AᵀPA - AᵀPB(R BᵀPB)⁻¹BᵀPA Q的正定解。示例代码实现了这条完整链路get_model_matrix()按线性化模型构造A、B并用仿真步长delta_t离散化A I delta_t·AB delta_t·Bsolve_DARE()迭代求解P当相邻两次迭代的差值最大分量小于eps时提前停止最多迭代maxiter次dlqr()由P计算增益K并同时返回A - BK的特征值lqr_control()计算u -Kx并打印该步的求解耗时。注意仿真函数simulation()直接用离散化后的矩阵做单步更新x A x B u其中A、B就是上面离散化后的版本。安装依赖并运行README 要求运行各示例代码需要 Python 3.13.x 以及 NumPy、SciPy、Matplotlib、cvxpy。两种安装方式conda env create -f requirements/environment.yml或pip install -r requirements/requirements.txtrequirements.txt 中固定了具体版本numpy 2.3.5、scipy 1.18.1、matplotlib 3.11.0、cvxpy 1.8.1、ecos 2.0.14 等。LQR 示例本身只用到 NumPy 和 Matplotlibcvxpy 是同目录其他示例如 MPC 示例的依赖。在仓库根目录执行脚本python InvertedPendulum/inverted_pendulum_lqr_control.py默认show_animation True会弹出 Matplotlib 窗口实时绘制小车、杆和轮子窗口标题同步显示当前的x和theta单位 deg。代码里注册了按键事件在窗口中按 ESC 键会退出仿真源码注释写明 for stopping simulation with the esc key。模型与仿真参数都集中在文件顶部含义如下参数示例中的取值用途按源码注释l_bar2.0杆长M1.0[kg]小车质量m0.3[kg]杆顶质量g9.8[m/s^2]重力加速度Qnp.diag([0.0, 1.0, 1.0, 0.0])state cost matrixRnp.diag([0.01])input cost matrixdelta_t0.1[s]时间步长用于A、B离散化sim_time5.0[s]仿真总时长初始状态x0为[0.0, 0.0, 0.3, 0.0]小车位于原点摆杆初始偏离竖直方向 0.3 rad。无图形界面时如何运行单元测试 test_inverted_pendulum_lqr_control.py 给出了无窗口跑法的标准做法在调用main()前把show_animation置为Falsefrom InvertedPendulum import inverted_pendulum_lqr_control as m m.show_animation False m.main()你可以直接把源码顶部的show_animation True改成False也可以直接跑仓库里现成的测试python -m pytest tests/test_inverted_pendulum_lqr_control.py如何判断运行结果脚本运行时有两类输出这是示例自带的核对方式每个控制步都会打印一行求解耗时格式固定为数值为运行时实际测量值calc time:… [sec]打印次数对应仿真时间步总数由sim_time与delta_t决定。仿真循环结束后打印收尾两行Finish x… [m] , theta… [deg]第二个数值分别是仿真结束时刻的小车位置与摆杆角度。文档没有给出固定的预期数值核对时应结合控制目标来判断文档明确控制系统的目标是 balance the inverted pendulum即最终theta应回到接近 0竖直方向的量级而不是停留在初始的 0.3 rad。开启动画时也可以直接观察窗口中杆是否保持在竖直附近、小车左右移动的姿态。可调参数与模型适用边界Q、R代价函数中状态误差与控制量的权重矩阵是调整二者相对强弱的入口。调整后可以对照最终的theta数值与每步calc time的变化。delta_t既决定A、B的离散化也决定仿真步长sim_time决定总时长。x0初始状态其中第三项是初始摆角。solve_DARE()的收敛参数maxiter150、eps0.01分别是最多迭代次数和收敛判据相邻两次P的最大差值小于eps即停止。边界线性化模型只在小角度下成立文档中给出的是cos θ ≈ 1、sin θ ≈ θ、θ̇² ≈ 0的近似。示例取 0.3 rad 的初始摆角如果你修改x0或参数使摆杆大幅摆动就超出了该文档页推导适用的小角度假设。下一步完整的 Lagrange 方程推导、线性化过程和A/B/C/D矩阵见 inverted_pendulum_main.rst。同一文档页还给出了对照的 MPC 控制示例 inverted_pendulum_mpc_control.py它最小化同样的代价函数J xᵀQx uᵀRu约束为线性化倒立摆模型与初始状态预测时域T 30依赖 cvxpy。跑通 LQR 后可以用同一组参数运行它比较两种控制器的仿真输出。【免费下载链接】PythonRoboticsPython sample codes and textbook for robotics algorithms.项目地址: https://gitcode.com/GitHub_Trending/py/PythonRobotics创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Atmosphère 定制固件架构解析:Nintendo Switch 多层组件体系与实现原理

Atmosphère 定制固件架构解析:Nintendo Switch 多层组件体系与实现原理

Atmosphre 定制固件架构解析:Nintendo Switch 多层组件体系与实现原理 【免费下载链接】Atmosphere Atmosphre is a work-in-progress customized firmware for the Nintendo Switch. 项目地址: https://gitcode.com/GitHub_Trending/at/Atmosphere Atmosphr…

2026/9/13 18:06:26 阅读更多 →
CookLikeHOC 热奶茶制作指南:苹果山楂茶底与生椰乳的复配工艺解析

CookLikeHOC 热奶茶制作指南:苹果山楂茶底与生椰乳的复配工艺解析

CookLikeHOC 热奶茶制作指南:苹果山楂茶底与生椰乳的复配工艺解析 【免费下载链接】CookLikeHOC 🥢像老乡鸡🐔那样做饭。已添加2026年发布的《老乡鸡菜品溯源报告 2.0中新出现的菜品。主要部分于2024年完工,非老乡鸡官方仓库。文字…

2026/9/13 18:06:26 阅读更多 →
MATLAB神经网络分类实战:从数据预处理到模型评估

MATLAB神经网络分类实战:从数据预处理到模型评估

简介:面向MATLAB初学者的ANN神经网络入门资料包,聚焦BP神经网络在分类问题中的完整实现。压缩包共7个文件,总体积仅6KB,包含2个可直接运行的.m源程序与5个txt格式的训练测试数据。两个经典实验分别是蠓虫分类和鸢尾花分类&#xf…

2026/9/13 18:06:26 阅读更多 →

最新新闻

Pydantic Evals 第三方评测框架集成:把 Ragas 与 DeepEval 指标封装为自定义 Evaluator

Pydantic Evals 第三方评测框架集成:把 Ragas 与 DeepEval 指标封装为自定义 Evaluator

Pydantic Evals 第三方评测框架集成:把 Ragas 与 DeepEval 指标封装为自定义 Evaluator 【免费下载链接】pydantic-ai How Python does AI. Agents, realtime voice, image generation, embeddings. Every model, every interface, typed end to end. 项目地址: h…

2026/9/13 19:45:12 阅读更多 →
SkillSpector Multilingual Batch Scanner 实战指南:目录并行扫描、语言检测与 LLM Gap-Fill 原理

SkillSpector Multilingual Batch Scanner 实战指南:目录并行扫描、语言检测与 LLM Gap-Fill 原理

SkillSpector Multilingual Batch Scanner 实战指南:目录并行扫描、语言检测与 LLM Gap-Fill 原理 【免费下载链接】SkillSpector Security scanner for AI agent skills. Detect vulnerabilities, malicious patterns, security risks, prompt injection, data exf…

2026/9/13 19:45:12 阅读更多 →
YOLOv3+PyQt5交通路口智能监控系统实现

YOLOv3+PyQt5交通路口智能监控系统实现

简介:基于YOLOv3与PyQt5的交通路口智能监控系统,是一套面向计算机视觉与智慧交通初学者的端到端实战源码包。项目采用SRS流媒体服务器、GPU服务器、Local客户端三层架构,通过RTMP拉取远端视频流,利用YOLO模型对人、车、交通灯等道…

2026/9/13 19:45:12 阅读更多 →
NeMo Speech 开源协作实战:从 PR 规范、测试与 CI 到代码风格与命名约定

NeMo Speech 开源协作实战:从 PR 规范、测试与 CI 到代码风格与命名约定

NeMo Speech 开源协作实战:从 PR 规范、测试与 CI 到代码风格与命名约定 【免费下载链接】Speech A scalable generative AI framework built for researchers and developers working on Large Language Models, Multimodal, and Speech AI (Automatic Speech Reco…

2026/9/13 19:45:12 阅读更多 →
Cua Driver 与 Lume 的持久化发布渠道选择机制:RFC 3101 设计与实现全解析

Cua Driver 与 Lume 的持久化发布渠道选择机制:RFC 3101 设计与实现全解析

Cua Driver 与 Lume 的持久化发布渠道选择机制:RFC 3101 设计与实现全解析 【免费下载链接】cua Scale computer-use 2.0 with open-source drivers, cross-OS fleets, and benchmarks for training, evaluation, and data generation. 项目地址: https://gitcode…

2026/9/13 19:45:12 阅读更多 →
ESP32红外热成像手势识别:从温度矩阵到0-9分类实战

ESP32红外热成像手势识别:从温度矩阵到0-9分类实战

简介:这是一份面向嵌入式开发者和物联网爱好者的ESP32手势识别项目资料,聚焦于利用红外热成像阵列传感器实时捕获手部温度分布并解析动作含义。内容覆盖ESP32的GPIO/ADC配置、底层外设驱动、C/C应用层开发、FreeRTOS任务调度,以及红外传感器数…

2026/9/13 19:44:11 阅读更多 →

日新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/13 0:00:24 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/13 0:00:24 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/13 0:00:24 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/13 0:00:24 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/13 0:00:24 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/13 0:00:24 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/13 16:51:11 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/12 18:29:34 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/12 19:02:44 阅读更多 →