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

【MPC】无人机模型预测控制复现Data-Driven MPC for Quadrotors项目(Part 1)

无人机模型预测控制复现Data-Driven MPC for Quadrotors项目

    • 参考链接
    • 背景和问题
    • 方法与贡献
    • 实验结果
    • 安装ROS
    • 创建工作空间
    • 下载RotorS仿真器源码和依赖
    • 创建Python虚拟环境
    • 下载data_driven_mpc仓库代码
    • 下载并配置ACADO求解器
    • 下载并配置ACADO求解器的Python接口
    • 下载并配置rpg_quadrotor_control源码
    • 测试rpg_quadrotor_control源码
    • 测试data_driven_mpc仓库代码
      • 在Simplified Simulation中测试
        • 测试飞行

环境:

Ubuntu :20.04 LTS

Python: 3.8

在这里插入图片描述

参考链接

Github仓库地址

论文Data-Driven MPC for Quadrotors

Youtube视频

背景和问题

高速度和高加速度下的精确轨迹跟踪对于四旋翼飞行器仍然是一个挑战。由于空气动力学效应的复杂性,这些效应在高速度时会对飞行器的轨迹跟踪产生显著干扰,并引入较大的位置误差。这些效应难以建模,而现有的方法通常忽略了这些空气动力学效应,导致在执行快速和灵活的飞行任务时精度不足。

方法与贡献

本文提出了一种利用**高斯过程(Gaussian Processes, GP)**对四旋翼飞行器的动力学模型进行数据驱动增强的方法。具体而言,GP用于学习残差动力学,即在简化的四旋翼模型基础上,预测并修正空气动力学引起的误差,然后将这一增强的动力学模型集成到模型预测控制(Model Predictive Control, MPC)中,来实现高效且精确的实时反馈控制。

  • 结合了学习到的GP修正项与四旋翼飞行器的标称动力学,形成了一种高效的MPC控制管线。

  • 通过仿真和现实世界的实验,验证了这种方法在高速度和高加速度下的轨迹跟踪精度,能够显著优于传统的线性空气动力学模型。

实验结果

通过仿真和实际飞行实验,本文方法在多种轨迹(如随机、圈、双纽线轨迹等)中展示了其优越性。与未增强的MPC相比,本文提出的方法在速度达到14 m/s、加速度超过4g的条件下,能够将轨迹跟踪误差减少高达70 %。实验还表明,该方法在不同的轨迹之间具有良好的泛化能力,并在实验中持续表现优于基于线性阻力模型的MPC。

安装ROS

安装 ROS ,推荐用鱼香 ROS 的一键安装。

鱼香ROS网站上线|一行代码安装ROS/ROS2/解决rosdep问题|小鱼脚本

wget http://fishros.com/install -O fishros && bash fishros

创建工作空间

创建工作空间。

mkdir -p ~/mpc_ws/src
cd ~/mpc_ws/src
catkin_init_workspace  # initialize your catkin workspace
wstool init

下载RotorS仿真器源码和依赖

下载 RotorS 仿真器源码和依赖。

cd ~/mpc_ws/src
git clone https://github.com/catkin/catkin_simple.git
git clone https://github.com/ethz-asl/rotors_simulator.git
git clone https://github.com/ethz-asl/mav_comm.git
git clone https://github.com/ethz-asl/eigen_catkin.git
sudo apt-get install libgoogle-glog-dev
sudo apt-get install liblapacke-dev

编译工作空间。

cd ~/mpc_ws
catkin build

创建Python虚拟环境

Python virtualenv 是一个用于创建和管理虚拟环境的工具。它可以帮助开发者在不同的项目中使用不同的 Python 版本和包,而不会相互干扰。使用 virtualenv,可以轻松地创建一个独立的 Python 环境,在其中安装所需的包和版本,而不会影响系统中已经安装的其他 Python 环境和包。

我这里使用的是 Ubuntu 20.04 、 Python 3.8 的环境配置。

sudo pip3 install virtualenv
cd ~
virtualenv mpc_venv --python=/usr/bin/python3.8
source ~/mpc_venv/bin/activate

下载data_driven_mpc仓库代码

下载 data_driven_mpc 仓库代码。

cd ~/mpc_ws/src
git clone https://github.com/uzh-rpg/data_driven_mpc.git

该代码已在 Ubuntu 18.04 、 Python 3.6 和 ROS Melodic 上进行了测试运行。

切换到分支python3.8_support,可以在 Ubuntu 20.04 、 Python 3.8 和 ROS Noetic 上运行。

切换分支,激活 Python 环境并安装其余必需的 Python 库。

cd data_driven_mpc
git checkout python3.8_support
source ~/mpc_venv/bin/activate
python3 setup.py install

需要安装以下库。

install_requires=['numpy==1.19.0','scipy==1.5.0','tqdm==4.46.1','matplotlib==3.2.2','scikit-learn==0.23.2','casadi==3.5.1','pyquaternion==0.9.5','joblib==0.15.1','pandas==1.0.5','PyYAML==5.3.1','pycryptodomex==3.9.8','gnupg==2.3.1','rospkg==1.2.8','tikzplotlib==0.9.4'],

可以使用以下命令查看 Python 下所有包和包的版本。

pip list -o

多尝试几次,这个可能受网络环境影响,直到显示Finished processing dependencies ...为止。

再次编译工作空间。

cd ~/mpc_ws
catkin build

下载并配置ACADO求解器

参考链接

首先,安装必要的软件包。

sudo apt-get install gcc g++ cmake git gnuplot doxygen graphviz

下载 ACADO 求解器源码。

git clone https://github.com/acado/acado.git
cd acados
git submodule update --recursive --init

在 acados 目录下建立 build 文件夹,用于存放编译文件。

cd ~/acados
mkdir -p build
cd build
cmake -DACADOS_WITH_QPOASES=ON ..

进行编译。

make install -j4

执行一个例程以检查配置是否成功。

cd ..
cd examples/getting_started
./simple_ocp

运行结果如下。

在这里插入图片描述

如果运行结果如下图所示,出现显示异常。

在这里插入图片描述

打开 Ubuntu 系统配置,将缩放这一栏调回100%即可。

在这里插入图片描述

如果你想在debug模式下编译 acado ,可以运行如下命令:

cmake -DCMAKE_BUILD_TYPE=Debug ..

下载并配置ACADO求解器的Python接口

参考链接

在 acados 目录下下载接口文件。

cd ~/acados
pip install -e ~/acados/interfaces/acados_template

在 ~/.bashrc 文件中添加路径,这里需要写绝对路径, hccwb 是我的计算机名。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"/home/hccwb/acados/lib"
export ACADOS_SOURCE_DIR="/home/hccwb/acados"

在激活的虚拟环境中,测试 Python 案例。

source ~/mpc_venv/bin/activate
cd ~/acados/examples/acados_python/getting_started/
python minimal_example_ocp.py

如果运行成功,结果如下。

在这里插入图片描述

如果提示安装 Tera 模板渲染器,这里需要手动下载一下。

t_renderer-v0.0.34-linux下载地址

将下载的文件移动到 acados 的 bin 目录,重命名为 t_renderer,并赋予可执行权限。

mv ~/Downloads/t_renderer-v0.0.34-linux ~/acados/bin/t_renderer
chmod +x ~/acados/bin/t_renderer

下载并配置rpg_quadrotor_control源码

安装 ROS 依赖。

sudo apt-get install libgoogle-glog-dev protobuf-compiler ros-$ROS_DISTRO-octomap-msgs ros-$ROS_DISTRO-octomap-ros ros-$ROS_DISTRO-joy ros-$ROS_DISTRO-rqt*

安装 vcstool 包。

sudo apt-get install python3-vcstool 

如果提示找不到包,可以使用以下方法。

方法一:已经安装了 ROS 。

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt install curl # if you haven't already installed curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install python3-vcstool

方法二:没有安装 ROS 。

curl -s https://packagecloud.io/install/repositories/dirk-thomas/vcstool/script.deb.sh | sudo bash
sudo apt-get update
sudo apt-get install python3-vcstool

下载 rpg_quadrotor_control 源码

cd ~/mpc_ws/src
git clone https://github.com/uzh-rpg/rpg_quadrotor_control.git

下载相关依赖。

vcs-import < rpg_quadrotor_control/dependencies.yaml

如果下载失败,可以使用 HTTP 来克隆 GitHub 上的仓库。修改rpg_quadrotor_control/dependencies.yaml文件,将其中的所有 SSH 链接替换为 HTTP 链接。

repositories:catkin_simple:type: giturl: https://github.com/catkin/catkin_simple.gitversion: mastereigen_catkin:type: giturl: https://github.com/ethz-asl/eigen_catkin.gitversion: mastermav_comm:type: giturl: https://github.com/ethz-asl/mav_comm.gitversion: masterrotors_simulator:type: giturl: https://github.com/ethz-asl/rotors_simulator.gitversion: masterrpg_quadrotor_common:type: giturl: https://github.com/uzh-rpg/rpg_quadrotor_common.gitversion: masterrpg_single_board_io:type: giturl: https://github.com/uzh-rpg/rpg_single_board_io.gitversion: master

确保 rqt 缓存中的 GUI 已更新,如果报错找不到文件,忽略这个错误。

rm ~/.config/ros.org/rqt_gui.ini

编译工作空间。

cd ~/mpc_ws
catkin build

将工作空间地址添加到~/.bashrc文件。

echo "source ~/mpc_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

测试rpg_quadrotor_control源码

参考链接

测试运行集成开发环境。

cd ~/mpc_ws
catkin run_tests --no-deps rpg_quadrotor_integration_test

如果集成测试开发环境运行正常,应该看到这样的 Gazebo 模拟环境。

在这里插入图片描述

启动基础仿真环境使用以下命令。

source ~/mpc_ws/devel/setup.bash
roslaunch rpg_rotors_interface quadrotor_empty_world.launch

如果运行正常会看到如下的界面。

在这里插入图片描述

要使四旋翼飞行器飞行,首先点击Connect按钮,然后按下Arm Bridge按钮向无人机发送命令,然后按下Start按钮启动。

测试data_driven_mpc仓库代码

官方提供了如何在两个不同的模拟器中使用此软件包的说明。Simplified Simulation 和 Gazebo Simulation 。Simplified Simulation 是一个轻量级的 Python 模拟器,Gazebo Simulation 是建立在 RotorS 上的。

首先,确保将 data_driven_mpc 包的主目录添加到 Python 路径中。

export PYTHONPATH=$PYTHONPATH:~/mpc_ws/src/data_driven_mpc/ros_gp_mpc

在Simplified Simulation中测试

测试飞行

要验证软件包的正确安装,请首先在简化模拟上执行试飞。

source ~/mpc_ws/devel/setup.bash
source ~/mpc_venv/bin/activate
roscd ros_gp_mpc
python src/experiments/trajectory_test.py

模拟完成后,正确的安装应产生与以下结果非常相似的结果(平均优化时间可能会有所不同)。

:::::::::::::: SIMULATION SETUP ::::::::::::::Simulation: Applied disturbances: 
{"noisy": true, "drag": true, "payload": false, "motor_noise": true}Model: No regression model loadedReference: Executed trajectory `loop` with a peak axial velocity of 8 m/s, and a maximum speed of 8.273 m/s::::::::::::: SIMULATION RESULTS :::::::::::::Mean optimization time: 1.488 ms
Tracking RMSE: 0.2410 m

您可以在config/configuration_parameters.py文件中编辑 Simplified Simulation 的配置变量以获得更好的可视化效果。在SimpleSimConfig类中:

# Set to True to show a real-time Matplotlib animation of the experiments for the Simplified Simulator. Execution 
# will be slower if the GUI is turned on. Note: setting to True may require some further library installation work.
custom_sim_gui = True# Set to True to display a plot describing the trajectory tracking results after the execution.
result_plots = True# Set to True to show the trajectory that will be executed before the execution timepre_run_debug_plots = True# Choice of disturbances modeled in our Simplified Simulator. For more details about the parameters used refer to# the script: src/quad_mpc/quad_3d.py.simulation_disturbances = {"noisy": True,                       # Thrust and torque gaussian noises"drag": True,                        # 2nd order polynomial aerodynamic drag effect"payload": False,                    # Payload force in the Z axis"motor_noise": True                  # Asymmetric voltage noise in the motors}

下面是运行结果。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

您还可以改变参考轨迹的峰值速度和加速度,或者使用双纽线轨迹而不是圆轨迹。所有这些选项都可以在脚本参数中指定。键入以下内容可以显示更多信息:

python src/experiments/trajectory_test.py --help

参考资料:

Github仓库地址

论文Data-Driven MPC for Quadrotors

安装 python3-vcstool

相关文章:

【MPC】无人机模型预测控制复现Data-Driven MPC for Quadrotors项目(Part 1)

无人机模型预测控制复现Data-Driven MPC for Quadrotors项目 参考链接背景和问题方法与贡献实验结果安装ROS创建工作空间下载RotorS仿真器源码和依赖创建Python虚拟环境下载data_driven_mpc仓库代码下载并配置ACADO求解器下载并配置ACADO求解器的Python接口下载并配置rpg_quadr…...

微信小程序开发——比较两个数字大小

在这里我们使用的工具是 需要自行安装和配置。 在微信小程序中比较两个数字大小有以下几种方式&#xff1a; 一、普通条件判断 在小程序的.js 文件中&#xff0c;先定义两个数字&#xff0c;如let num1 5; let num2 3;。通过if - else if - else语句&#xff0c;根据num1与…...

Java多线程3

1.有序性在并发编程中的含义。 有序性在并发编程中指的是在多线程环境下&#xff0c;程序的执行顺序应与单线程情况下保持一致&#xff0c;以避免出现不确定或错误的执行结果。 2.为何需要使用多线程进行程序设计&#xff1f; 使用多线程可以提高程序的效率&#xff0c;利用…...

node+Vue项目环境创建

nodeVue项目环境创建 使用淘宝镜像源使用官方镜像源()清除缓存取消取消ssl验证安装vue 使用淘宝镜像源 npm config set registry https://registry.npm.taobao.org/使用官方镜像源() 由于国内网络问题&#xff0c;安装报错 npm install -g cnpm --registryhttps://registry.…...

云智AI人工智能平台——与众不同之处

人工智能领域、深度学习、强化学习、大小模型盛行的时代&#xff0c;人工智能技术正以前所未有的速度改变着我们的世界。然而&#xff0c;在众多AI平台中&#xff0c;如何选择一个既高效又灵活的工具&#xff0c;成为了每个开发者心中的难题。今天&#xff0c;我们特别介绍一款…...

国庆节有什么好物值得入手?精选国庆节必选好物合集

一年一度的国庆节马上来临了&#xff0c;平时舍不得买的好物可以在国庆节这段时间大采购了&#xff0c;毕竟这可是年度购物的好时机&#xff0c;千万不要错过这个享受优惠的机会。还不知道买什么国庆节好物的朋友可以看看本篇文章&#xff0c;提前做好功课噢&#xff01; 好物…...

并发安全与锁

总述 这篇文章&#xff0c;我想谈一谈自己对于并发变成的理解与学习。主要涉及以下三个部分&#xff1a;goroutine&#xff0c;channel以及lock 临界区 首先&#xff0c;要明确下面两组概念 并发和并行 并行&#xff1a;指几个程序每时每刻都同时进行 并发&#xff1a;指…...

细胞分裂检测系统源码分享

细胞分裂检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…...

openssl 生成多域名 多IP 的数字证书

openssl.cnf 文件内容&#xff1a; [req] default_bits 2048 distinguished_name req_distinguished_name copy_extensions copy req_extensions req_ext x509_extensions v3_req prompt no [req_distinguished_name] countryName CN stateOrProvinceName GuangDong l…...

电影评论|基于springBoot的电影评论网站设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书&#xff08;可指定任意题目&#xff09; 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取&#xff1a; 一、摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c…...

【C++】虚函数

一、什么是虚函数 在类的成员函数前加上virtual关键字&#xff0c;这个函数就是虚函数。 虚函数的所用就是完成多态。多态示例如下&#xff1a; class A {public:virtual void func()//虚函数{cout << "A" << endl;}void ftwo()//普通函数{cout <&…...

esxi虚拟机启用cbt备份(增量备份)

在虚拟机中启用CBT 1.关闭虚拟机。 右键点按虚拟机&#xff0c;Edit Settings-VM Options-Advanced-Configuration Parameters-Edit Configuration- Add parameters&#xff0c;添加ctkEnabled参数&#xff0c;并将其值设置为true。 Add parameters&#xff0c;添加scsi0:0…...

mysql 8.0 时间维度表生成(可运行)

文章目录 mysql 8.0 时间维度表生成实例时间维度表的作用时间维度表生成技术细节使用时间维度表的好处 mysql 8.0 时间维度表生成实例 时间维度表的作用 dim_times&#xff08;时间维度表&#xff09;在数据仓库&#xff08;Data Warehouse&#xff09;中的作用至关重要。作为…...

打造高效实时数仓,从Hive到OceanBase的经验分享

本文作者&#xff1a;Coolmoon1202&#xff0c;大数据高级工程师&#xff0c;专注于高性能软件架构设计 我们的业务主要围绕出行领域&#xff0c;鉴于初期采用的数据仓库方案面临高延迟、低效率等挑战&#xff0c;我们踏上了探索新数仓解决方案的征途。本文分享了我们在方案筛选…...

15.3 JDBC数据库编程

15.3 JDBC数据库编程 15.3.1 创建数据库和表 创建一个名为webstore的数据库&#xff0c;并向其中添加数据&#xff0c;代码如下: 1.创建数据库 CREATE TABLE products( id int PRIMARY KEY, pname VARCHAR(20) brand VARCHAR(20), price FLOAT(7,2), stock SMALLINT, ) …...

SSH公私钥后门从入门到应急响应

目录 1. SSH公私钥与SSH公私钥后门介绍 1.1 SSH公私钥介绍 1.1.1 公钥和私钥的基本概念 1.1.2 SSH公私钥认证的工作原理(很重要) 1.2 SSH公私钥后门介绍 2. 如何在已拿下控制权限的主机创建后门 2.1 使用 Xshell 生成公钥与私钥 2.2 将公钥上传到被需要被植入后门的服务…...

服务器数据恢复—Linux操作系统环境下网站数据的恢复案例

服务器数据恢复环境&#xff1a; 一台linux操作系统服务器上跑了几十个网站&#xff0c;服务器上只有一块SATA硬盘。 服务器故障&#xff1a; 服务器突然宕机&#xff0c;尝试再次启动失败。将硬盘拆下检测&#xff0c;发现存在坏扇区。找当地一家数据恢复公司处理后&#xff…...

开放式耳机是怎么样的?开放式耳机的优缺点分析?

开放式耳机作为一种独特的耳机类型&#xff0c;因其独特设计和使用体验受到了许多用户的喜爱。了解开放式耳机的优缺点有助于大家更好地选择适合自己需求的耳机。以下是开放式耳机的一些主要优点和缺点分析&#xff1a; 优点 l 舒适度高 开放式耳机的设计通常更加轻盈&#…...

HDMI色块移动——FPGA学习笔记13

一、方块移动原理 二、实验任务 使用FPGA开发板上的HDMI接口在显示器上显示一个不停移动的方块&#xff0c;要求方块移动到边界处时能够改变移动方向。显示分辨率为800*480&#xff0c;刷新速率为90hz。&#xff08;480p分辨率为800*480&#xff0c;像素时钟频率Vga_clk 800x4…...

MySQL中去除重复

除去相同的行 SELECT DISTINCT 列名 FROM 表名; 示例&#xff1a;查询employees表&#xff0c;显示唯一的部门ID select distinct department_id from employees;...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...