当前位置: 首页 > article >正文

在AirSim里用Python实现LQR控制:让无人机自动跟踪预设轨迹(附完整代码)

用Python实现AirSim无人机LQR轨迹跟踪从理论到代码落地1. 环境准备与基础概念在开始编写代码之前我们需要先搭建好开发环境并理解几个核心概念。AirSim是微软开源的无人机/车辆仿真平台基于Unreal Engine构建提供了高度逼真的物理模拟和丰富的API接口。而LQRLinear Quadratic Regulator则是一种经典的最优控制算法特别适合像无人机这样的线性系统控制。1.1 安装必要的软件包首先确保你已经安装了以下组件pip install airsim numpy scipy matplotlib对于AirSim本身需要从GitHub克隆并编译git clone https://github.com/microsoft/AirSim.git cd AirSim ./setup.sh ./build.sh提示编译AirSim需要安装Visual StudioWindows或gccLinux并确保系统已安装Unreal Engine。1.2 理解无人机动力学模型无人机在空中的运动可以用以下状态空间方程表示$$ \begin{aligned} \dot{x} Ax Bu \ y Cx Du \end{aligned} $$其中$x$ 是状态向量位置、速度等$u$ 是控制输入电机推力$A$ 是系统矩阵$B$ 是输入矩阵对于简单的二维平面控制我们可以将状态向量定义为x [position_x, position_y, velocity_x, velocity_y]2. LQR控制器设计与实现2.1 LQR算法核心原理LQR通过最小化以下代价函数来找到最优控制律$$ J \int_0^\infty (x^TQx u^TRu)dt $$其中$Q$ 是状态权重矩阵$R$ 是控制输入权重矩阵求解LQR问题最终归结为求解代数Riccati方程from scipy.linalg import solve_continuous_are # 解Riccati方程 P solve_continuous_are(A, B, Q, R) # 计算反馈矩阵K K np.linalg.inv(R) B.T P2.2 Python实现LQR控制器下面是一个完整的LQR控制器类实现import numpy as np from scipy.linalg import solve_continuous_are class LQRController: def __init__(self, A, B, Q, R): self.A A self.B B self.Q Q self.R R self.compute_gain_matrix() def compute_gain_matrix(self): 计算LQR反馈矩阵K P solve_continuous_are(self.A, self.B, self.Q, self.R) self.K np.linalg.inv(self.R) self.B.T P def compute_control(self, x, x_desired): 计算控制输入 error x - x_desired return -self.K error3. AirSim接口与轨迹跟踪3.1 连接AirSim并获取无人机状态首先我们需要建立与AirSim的连接并获取无人机状态import airsim # 连接到AirSim client airsim.MultirotorClient() client.confirmConnection() client.enableApiControl(True) client.armDisarm(True) # 获取无人机状态 def get_drone_state(): state client.getMultirotorState() position state.kinematics_estimated.position velocity state.kinematics_estimated.linear_velocity return np.array([ position.x_val, position.y_val, velocity.x_val, velocity.y_val ])3.2 轨迹生成与跟踪我们可以定义一个简单的圆形轨迹作为跟踪目标def generate_circular_trajectory(radius10, speed2, dt0.05): 生成圆形轨迹 t 0 while True: x radius * np.cos(speed * t) y radius * np.sin(speed * t) vx -radius * speed * np.sin(speed * t) vy radius * speed * np.cos(speed * t) yield np.array([x, y, vx, vy]) t dt4. 完整控制循环实现4.1 主控制循环将前面所有组件整合成一个完整的控制循环def main(): # 初始化 client.takeoffAsync().join() # 定义系统矩阵 (简化模型) A np.array([ [0, 0, 1, 0], [0, 0, 0, 1], [0, 0, 0, 0], [0, 0, 0, 0] ]) B np.array([ [0, 0], [0, 0], [1, 0], [0, 1] ]) # 权重矩阵 Q np.diag([10, 10, 1, 1]) # 更重视位置误差 R np.diag([0.1, 0.1]) # 控制输入权重 # 创建控制器 controller LQRController(A, B, Q, R) # 轨迹生成器 trajectory generate_circular_trajectory() try: while True: # 获取当前状态和期望状态 x get_drone_state() x_desired next(trajectory) # 计算控制输入 u controller.compute_control(x, x_desired) # 转换为AirSim控制指令 client.moveByVelocityAsync( u[0], u[1], 0, 0.1 # 只控制xy平面 ) time.sleep(0.05) except KeyboardInterrupt: client.armDisarm(False) client.reset()4.2 调试与优化技巧在实际应用中你可能需要关注以下几点系统辨识真实的无人机动力学可能更复杂需要通过实验或系统辨识来获取更准确的A、B矩阵权重调整Q和R矩阵的选择对控制效果影响很大需要根据实际需求调整状态估计如果使用真实无人机可能需要卡尔曼滤波来处理传感器噪声抗饱和处理当控制输入达到物理限制时需要特殊处理避免积分饱和5. 高级话题与扩展5.1 三维空间扩展将我们的二维控制器扩展到三维空间# 3D状态向量 x_3d [pos_x, pos_y, pos_z, vel_x, vel_y, vel_z] # 3D系统矩阵 A_3d np.block([ [np.zeros((3,3)), np.eye(3)], [np.zeros((3,3)), np.zeros((3,3))] ]) B_3d np.block([ [np.zeros((3,3))], [np.eye(3)] ])5.2 非线性系统处理对于非线性系统可以考虑使用LQR的变种增益调度在不同工作点设计多个LQR控制器SDREState-Dependent Riccati EquationMPCModel Predictive Control5.3 实际部署注意事项当准备将代码部署到真实无人机时通信延迟网络延迟会影响控制性能状态估计需要融合IMU、GPS等多种传感器数据安全机制必须实现紧急停止和故障保护计算效率嵌入式设备上的计算资源有限在调试过程中我发现最关键的参数是Q矩阵中对位置误差的权重。过小的权重会导致无人机跟踪滞后而过大的权重则可能引起振荡。一个实用的技巧是从较小的权重开始逐步增加直到获得满意的响应速度。

相关文章:

在AirSim里用Python实现LQR控制:让无人机自动跟踪预设轨迹(附完整代码)

用Python实现AirSim无人机LQR轨迹跟踪:从理论到代码落地 1. 环境准备与基础概念 在开始编写代码之前,我们需要先搭建好开发环境并理解几个核心概念。AirSim是微软开源的无人机/车辆仿真平台,基于Unreal Engine构建,提供了高度逼真…...

2026专业护眼产品深度评测:告别眼干涩疲劳,哪款才是“医用级“长效养护的选择?

屏幕时代,眼睛正在为我们的工作和生活"买单"。从早起看手机的那一刻,到深夜关灯前最后一次刷屏,多数人每天面对电子屏幕的时间早已超过10小时。干涩、疲劳、视力模糊、异物感……这些曾经只出现在中老年人身上的困扰,正…...

FPGA开发必备:手把手教你安装破解Modelsim 10.5se(附环境变量配置避坑指南)

FPGA开发实战:Modelsim仿真环境搭建与高效调试技巧 对于FPGA开发者而言,一个稳定可靠的仿真环境就像厨师的刀具一样重要。Modelsim作为业界广泛使用的仿真工具,其精确的时序仿真能力可以帮助我们在硬件烧录前发现绝大多数逻辑错误。本文将从一…...

3种方法永久解决IDM激活弹窗问题 开源工具全解析

3种方法永久解决IDM激活弹窗问题 开源工具全解析 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script Internet Download Manager(IDM)作为一款…...

威联通NAS安全防护全攻略:10个必做设置让你的数据固若金汤

威联通NAS安全防护全攻略:10个必做设置让你的数据固若金汤 在数字化时代,数据安全已成为个人和企业最关注的议题之一。威联通NAS作为专业级网络存储设备,凭借其强大的硬件性能和丰富的软件生态,成为许多用户存储重要数据的首选。然…...

终极指南:一键解决iPhone USB网络共享驱动问题

终极指南:一键解决iPhone USB网络共享驱动问题 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.com/gh_mirrors/ap…...

图的存储方式详解(邻接矩阵 + 邻接表)| 算法入门必看

在算法学习中,图是仅次于树的核心数据结构,广泛应用于路径规划、网络拓扑、社交关系等场景。而图的存储是后续图论算法(DFS、BFS、最短路等)的基础——选择合适的存储方式,能直接影响算法的时间和空间效率。 本文将详细讲解图的两种最常用存储方式:邻接矩阵和邻接表,从…...

告别兼容性烦恼,让老旧应用在现代浏览器中“无缝”运行

在数字化转型的浪潮中,企业的技术架构往往承载着历史的痕迹。当我们享受着现代浏览器带来的极速体验与丰富扩展时,一个不容忽视的挑战正悄然影响着员工的工作效率与IT运维的平静——那就是“传统浏览器支持”问题。这并非一个遥不可及的技术概念&#xf…...

Pixel Fashion Atelier部署案例:中小企业低成本GPU算力优化生成方案

Pixel Fashion Atelier部署案例:中小企业低成本GPU算力优化生成方案 1. 项目概述与核心价值 Pixel Fashion Atelier是一款专为时尚设计领域打造的AI图像生成工作站,基于Stable Diffusion和Anything-v5模型构建。与传统AI工具不同,它采用独特…...

Phi-3-mini-4k-instruct-gguf作品展:面向开发者的技术文档摘要生成样例

Phi-3-mini-4k-instruct-gguf作品展:面向开发者的技术文档摘要生成样例 1. 模型简介 Phi-3-mini-4k-instruct-gguf是微软Phi-3系列中的轻量级文本生成模型GGUF版本。这个经过优化的模型特别适合处理问答、文本改写、摘要整理和简短创作等任务。作为开发者工具&…...

1688图搜接口有复购率对于选品的你们有帮助吗

1688 图搜接口的复购率数据,对选品非常有帮助,是判断商品长期生命力与供应链稳定性的核心指标。一、复购率在图搜选品中的核心价值验证商品质量与用户粘性高复购率(B 端通常 > 20%,优秀 > 30%)直接证明商品质量稳…...

无人机飞控实战:四元数微分方程在PX4中的实现与调参技巧

无人机飞控实战:四元数微分方程在PX4中的实现与调参技巧 当无人机在复杂环境中执行高速机动时,传统欧拉角描述姿态会出现万向节锁死现象。去年调试一台行业级六旋翼时,就曾遇到俯仰角接近90时控制器突然发散的情况——这正是欧拉角奇异点的典…...

react为啥不像vue3一样做diff优化(双端diff和最长递增子序列)

React 不是不能做 LIS / 双端 Diff, 而是 React 的架构目标 不追求 DOM 最优,追求调度最优 所以它故意不做 Vue 那套极致 Diff 优化。 一、先给结论(面试直接说) React 不做极致 Diff 优化,是因为它的架构方向是&…...

开源AI翻译新范式:Pixel Language Portal镜像免配置+GPU算力适配教程

开源AI翻译新范式:Pixel Language Portal镜像免配置GPU算力适配教程 1. 产品概览:像素语言跨维传送门 Pixel Language Portal(像素语言跨维传送门)是一款基于Tencent Hunyuan-MT-7B大模型构建的创新翻译工具。与传统翻译软件不同…...

实战演练:基于快马平台与vscode codex思想,快速构建业务数据可视化仪表盘

今天想和大家分享一个实战经验:如何快速构建一个业务数据可视化仪表盘。这个需求其实挺常见的,很多公司都需要通过直观的图表来展示销售数据、用户行为等关键指标。我最近在InsCode(快马)平台上尝试了这个项目,整个过程比想象中顺利很多。 需…...

RMBG-2.0实测参数详解:batch_size=1/resize=1024/alpha_threshold=0.5设定依据

RMBG-2.0实测参数详解:batch_size1/resize1024/alpha_threshold0.5设定依据 1. 项目背景与核心价值 RMBG-2.0(BiRefNet)是目前开源领域最强大的图像抠图模型之一,它在处理复杂边缘细节方面表现出色,特别是对于毛发、…...

手把手教你配置Figma MCP:打造属于你自己的AI驱动设计组件库(以阅读题为例)

智能设计革命:用Figma MCP构建AI驱动的交互式学习组件库 当设计系统遇上生成式AI,一场关于效率与智能化的变革正在悄然发生。在Figma中构建可动态响应数据的智能组件库,已成为中高级UI/UX设计师突破传统设计边界的必备技能。本文将深入解析如…...

数据库索引原理:B+树与哈希索引的深度对决

数据库索引原理:B树与哈希索引的深度对决在数据库的世界里,索引是提升查询性能的“核武器”。如果把数据库表比作一本厚厚的书,那么索引就是书中的目录。没有目录,想要找到特定的知识点只能一页页翻找(全表扫描&#x…...

从连续到离散:用Python小例子复现Mamba SSM的零阶保持离散化(含完整代码)

从连续到离散:用Python小例子复现Mamba SSM的零阶保持离散化(含完整代码) 在深度学习领域,状态空间模型(State Space Model, SSM)因其对序列数据的强大建模能力而备受关注。Mamba作为SSM的最新演进&#x…...

带爱机出国攻略——大机箱反向升级小机箱C28?

大家好,欢迎来到机械大师频道,这不前几天有位粉丝找到我们,说是打算带着自己的爱机出国,但是奈何自己原本的主机实在太大台了,于是想在显卡和内存都不换的情况下,将其他硬件全换了,并且要求机箱…...

工控机驱动安全自查:5分钟用DriverView揪出可疑第三方驱动(附分析技巧)

工控机驱动安全自查:5分钟用DriverView揪出可疑第三方驱动(附分析技巧) 工业自动化设备的稳定运行离不开安全的驱动环境。想象一下,当你负责的生产线突然出现不明原因的停机,经过层层排查,最终发现是一个来…...

SAP Analysis for Office 2.8 SP6 升级与常见问题解决指南

1. SAP Analysis for Office 2.8 SP6升级前的准备工作 升级软件就像给房子做装修,准备工作做得好,后续问题少一半。对于SAP Analysis for Office(简称AFO)2.8 SP6版本升级,我建议先做好这三件事: 第一&…...

MTK平台录音杂音怎么来的?从AudioALSACaptureDataClientAurisysNormal的mDropPopSize说起

MTK平台录音杂音问题深度解析:从硬件初始化到算法优化的全链路解决方案 在移动设备音频开发领域,MTK平台的录音杂音问题一直是困扰开发者的典型痛点。特别是录音起始阶段出现的"爆破音"或"电流声",不仅影响用户体验&…...

YimMenu:GTA5游戏体验增强与安全防护指南

YimMenu:GTA5游戏体验增强与安全防护指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu 项目…...

如何快速配置Windows三指拖动功能:ThreeFingerDragOnWindows完整指南

如何快速配置Windows三指拖动功能:ThreeFingerDragOnWindows完整指南 【免费下载链接】ThreeFingersDragOnWindows Enables macOS-style three-finger dragging functionality on Windows Precision touchpads. 项目地址: https://gitcode.com/gh_mirrors/th/Thre…...

快速原型设计:使用快马平台ai一键生成c语言银行系统项目骨架

今天想和大家分享一个快速验证技术方案的小技巧——用InsCode(快马)平台的AI生成功能快速搭建C语言项目原型。最近在准备一个银行系统的课程设计时,发现这个方式特别适合用来做前期技术验证。 为什么需要快速原型 刚开始做课程设计时,最头疼的就是花大量…...

太方便了!农村自建房设计新神器,二三维设计 + 扫码看模型

还在为农村自建房设计发愁?手绘图纸看不懂、修改慢、施工易出错?飞扬集成设计系统,专为农村自建房打造,一键实现二三维一体化设计,还能扫码查看轻量化 3D 模型,让建房更高效、更直观、更省心!一…...

STM32CubeMX项目实战:从新建工程到驱动LED,一步步教你玩转HAL库(附代码解析)

STM32CubeMX实战指南:HAL库驱动LED的底层逻辑与工程化思维 第一次打开STM32CubeMX时,那种面对密密麻麻的配置选项却不知从何下手的焦虑感,相信每位嵌入式开发者都记忆犹新。不同于传统寄存器操作的直白,HAL库和图形化配置工具带来…...

用8086和蜂鸣器DIY音乐盒:手把手教你复刻童年旋律(附完整汇编代码)

用8086和蜂鸣器DIY音乐盒:手把手教你复刻童年旋律(附完整汇编代码) 记得小时候第一次听到电子贺卡发出《生日快乐》的单调旋律时,那种机械却又神奇的"音乐"让我盯着电路板研究了半天。现在想来,那些简单的方…...

利用快马AI一键生成vmware虚拟机下载与配置脚本,快速搭建开发原型环境

今天想和大家分享一个快速搭建开发环境的实用技巧——利用AI工具自动生成VMware虚拟机下载与配置脚本。作为一个经常需要测试不同开发环境的程序员,我发现手动配置虚拟机实在太费时间了,直到尝试了InsCode(快马)平台的AI生成功能,整个过程变得…...